Skip to content

Commit

Permalink
Wrap BaseIdent name_override_opt & TraitName in an Arc (#5978)
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshuaBatty authored May 9, 2024
1 parent 58944ae commit 76c41c8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 16 deletions.
21 changes: 11 additions & 10 deletions sway-core/src/semantic_analysis/namespace/trait_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::{
collections::{BTreeSet, HashMap},
fmt,
hash::{DefaultHasher, Hash, Hasher},
sync::Arc,
};

use hashbrown::HashSet;
Expand Down Expand Up @@ -85,7 +86,7 @@ impl DebugWithEngines for TraitSuffix {
}
}

type TraitName = CallPath<TraitSuffix>;
type TraitName = Arc<CallPath<TraitSuffix>>;

#[derive(Clone, Debug)]
struct TraitKey {
Expand Down Expand Up @@ -235,7 +236,7 @@ impl TraitMap {
args: map_trait_type_args,
},
..
} = map_trait_name;
} = &*map_trait_name.clone();

let unify_checker = UnifyCheck::non_generic_constraint_subset(engines);

Expand Down Expand Up @@ -385,14 +386,14 @@ impl TraitMap {
}
}
}
let trait_name: TraitName = CallPath {
let trait_name: TraitName = Arc::new(CallPath {
prefixes: trait_name.prefixes,
suffix: TraitSuffix {
name: trait_name.suffix,
args: trait_type_args,
},
is_absolute: trait_name.is_absolute,
};
});

// even if there is a conflicting definition, add the trait anyway
self.insert_inner(
Expand Down Expand Up @@ -1079,7 +1080,7 @@ impl TraitMap {
ResolvedTraitImplItem::Parsed(impl_item) => match impl_item {
ImplItem::Fn(fn_ref) => {
let decl = engines.pe().get_function(&fn_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.name.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand All @@ -1092,7 +1093,7 @@ impl TraitMap {
}
ImplItem::Constant(const_ref) => {
let decl = engines.pe().get_constant(&const_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.name.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand All @@ -1105,7 +1106,7 @@ impl TraitMap {
}
ImplItem::Type(type_ref) => {
let decl = engines.pe().get_trait_type(&type_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.name.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand All @@ -1120,7 +1121,7 @@ impl TraitMap {
ResolvedTraitImplItem::Typed(ty_impl_item) => match ty_impl_item {
ty::TyTraitItem::Fn(fn_ref) => {
let decl = engines.de().get_function(&fn_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.name.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand All @@ -1133,7 +1134,7 @@ impl TraitMap {
}
ty::TyTraitItem::Constant(const_ref) => {
let decl = engines.de().get_constant(&const_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.call_path.suffix.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand All @@ -1146,7 +1147,7 @@ impl TraitMap {
}
ty::TyTraitItem::Type(type_ref) => {
let decl = engines.de().get_type(&type_ref);
let trait_call_path_string = engines.help_out(trait_key.name).to_string();
let trait_call_path_string = engines.help_out(&*trait_key.name).to_string();
if decl.name.as_str() == symbol.as_str()
&& (as_trait.is_none()
|| as_trait.clone().unwrap().to_string() == trait_call_path_string)
Expand Down
14 changes: 8 additions & 6 deletions sway-types/src/ident.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::{
cmp::{Ord, Ordering},
fmt,
hash::{Hash, Hasher},
sync::Arc,
};

pub trait Named {
Expand All @@ -14,7 +15,7 @@ pub trait Named {

#[derive(Clone)]
pub struct BaseIdent {
name_override_opt: Option<String>,
name_override_opt: Option<Arc<String>>,
span: Span,
is_raw_ident: bool,
}
Expand All @@ -23,6 +24,7 @@ impl BaseIdent {
pub fn as_str(&self) -> &str {
self.name_override_opt
.as_deref()
.map(|x| x.as_str())
.unwrap_or_else(|| self.span.as_str())
}

Expand All @@ -31,7 +33,7 @@ impl BaseIdent {
}

pub fn name_override_opt(&self) -> Option<&str> {
self.name_override_opt.as_deref()
self.name_override_opt.as_deref().map(|x| x.as_str())
}

pub fn new(span: Span) -> Ident {
Expand Down Expand Up @@ -62,23 +64,23 @@ impl BaseIdent {

pub fn new_with_override(name_override: String, span: Span) -> Ident {
Ident {
name_override_opt: Some(name_override),
name_override_opt: Some(Arc::new(name_override)),
span,
is_raw_ident: false,
}
}

pub fn new_no_span(name: String) -> Ident {
Ident {
name_override_opt: Some(name),
name_override_opt: Some(Arc::new(name)),
span: Span::dummy(),
is_raw_ident: false,
}
}

pub fn dummy() -> Ident {
Ident {
name_override_opt: Some("foo".into()),
name_override_opt: Some(Arc::new("foo".into())),
span: Span::dummy(),
is_raw_ident: false,
}
Expand Down Expand Up @@ -168,7 +170,7 @@ impl From<&Ident> for IdentUnique {
impl From<&IdentUnique> for Ident {
fn from(item: &IdentUnique) -> Self {
Ident {
name_override_opt: item.0.name_override_opt().map(|s| s.to_string()),
name_override_opt: item.0.name_override_opt().map(|s| Arc::new(s.to_string())),
span: item.0.span(),
is_raw_ident: item.0.is_raw_ident(),
}
Expand Down

0 comments on commit 76c41c8

Please sign in to comment.