Skip to content

Commit ee57a8b

Browse files
committed
Avoid double hash lookup in Ptr::from_string_literal
1 parent 2165500 commit ee57a8b

1 file changed

Lines changed: 6 additions & 12 deletions

File tree

‎libcc2rs/src/rc.rs‎

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,19 +1002,13 @@ impl Ptr<u8> {
10021002
pub fn from_string_literal(s: &'static str) -> Self {
10031003
STRING_LITERALS.with(|literals| {
10041004
let mut literals = literals.borrow_mut();
1005-
if let Some(rc) = literals.get(s) {
1006-
return Ptr {
1007-
offset: 0,
1008-
kind: PtrKind::Vec(Rc::downgrade(rc)),
1009-
};
1010-
}
1011-
let rc = Rc::new(RefCell::new({
1012-
let mut v = s.as_bytes().to_vec();
1013-
v.push(0);
1014-
v
1005+
let weak = Rc::downgrade(literals.entry(s).or_insert_with(|| {
1006+
Rc::new(RefCell::new({
1007+
let mut v = s.as_bytes().to_vec();
1008+
v.push(0);
1009+
v
1010+
}))
10151011
}));
1016-
let weak = Rc::downgrade(&rc);
1017-
literals.insert(s, rc);
10181012
Ptr {
10191013
offset: 0,
10201014
kind: PtrKind::Vec(weak),

0 commit comments

Comments
 (0)