Skip to content

Commit

Permalink
Adding in unintern function (#1828)
Browse files Browse the repository at this point in the history
* Adding in unintern function

* Adding in some basic unit tests for interning and uninterning
  • Loading branch information
Pauan authored and alexcrichton committed Oct 22, 2019
1 parent 777a12d commit c1b4f67
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
21 changes: 21 additions & 0 deletions src/cache/intern.rs
Expand Up @@ -40,6 +40,14 @@ cfg_if! {
}
})
}

fn unintern_str(key: &str) {
CACHE.with(|cache| {
let mut cache = cache.entries.borrow_mut();

cache.remove(key);
})
}
}
}

Expand Down Expand Up @@ -80,3 +88,16 @@ pub fn intern(s: &str) -> &str {

s
}


/// Removes a Rust string from the intern cache.
///
/// This does the opposite of the [`intern`](fn.intern.html) function.
///
/// If the [`intern`](fn.intern.html) function is called again then it will re-intern the string.
#[allow(unused_variables)]
#[inline]
pub fn unintern(s: &str) {
#[cfg(feature = "enable-interning")]
unintern_str(s);
}
2 changes: 1 addition & 1 deletion src/lib.rs
Expand Up @@ -70,7 +70,7 @@ if_std! {
mod anyref;

mod cache;
pub use cache::intern::intern;
pub use cache::intern::{intern, unintern};
}

/// Representation of an object owned by JS.
Expand Down
5 changes: 4 additions & 1 deletion tests/wasm/simple.rs
@@ -1,5 +1,5 @@
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use wasm_bindgen::{JsCast, intern, unintern};
use wasm_bindgen_test::*;

#[wasm_bindgen(module = "tests/wasm/simple.js")]
Expand Down Expand Up @@ -157,6 +157,9 @@ fn binding_to_unimplemented_apis_doesnt_break_everything() {
fn optional_slices() {
optional_str_none(None);
optional_str_some(Some("x"));
optional_str_some(Some(intern("x")));
unintern("x");
optional_str_some(Some("x"));
optional_slice_none(None);
optional_slice_some(Some(&[1, 2, 3]));
optional_string_none(None);
Expand Down

0 comments on commit c1b4f67

Please sign in to comment.