mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-15 17:50:51 +00:00
Adding in unintern function (#1828)
* Adding in unintern function * Adding in some basic unit tests for interning and uninterning
This commit is contained in:
parent
777a12dc70
commit
c1b4f67444
21
src/cache/intern.rs
vendored
21
src/cache/intern.rs
vendored
@ -40,6 +40,14 @@ cfg_if! {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn unintern_str(key: &str) {
|
||||||
|
CACHE.with(|cache| {
|
||||||
|
let mut cache = cache.entries.borrow_mut();
|
||||||
|
|
||||||
|
cache.remove(key);
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,3 +88,16 @@ pub fn intern(s: &str) -> &str {
|
|||||||
|
|
||||||
s
|
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);
|
||||||
|
}
|
||||||
|
@ -70,7 +70,7 @@ if_std! {
|
|||||||
mod anyref;
|
mod anyref;
|
||||||
|
|
||||||
mod cache;
|
mod cache;
|
||||||
pub use cache::intern::intern;
|
pub use cache::intern::{intern, unintern};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Representation of an object owned by JS.
|
/// Representation of an object owned by JS.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
use wasm_bindgen::JsCast;
|
use wasm_bindgen::{JsCast, intern, unintern};
|
||||||
use wasm_bindgen_test::*;
|
use wasm_bindgen_test::*;
|
||||||
|
|
||||||
#[wasm_bindgen(module = "tests/wasm/simple.js")]
|
#[wasm_bindgen(module = "tests/wasm/simple.js")]
|
||||||
@ -157,6 +157,9 @@ fn binding_to_unimplemented_apis_doesnt_break_everything() {
|
|||||||
fn optional_slices() {
|
fn optional_slices() {
|
||||||
optional_str_none(None);
|
optional_str_none(None);
|
||||||
optional_str_some(Some("x"));
|
optional_str_some(Some("x"));
|
||||||
|
optional_str_some(Some(intern("x")));
|
||||||
|
unintern("x");
|
||||||
|
optional_str_some(Some("x"));
|
||||||
optional_slice_none(None);
|
optional_slice_none(None);
|
||||||
optional_slice_some(Some(&[1, 2, 3]));
|
optional_slice_some(Some(&[1, 2, 3]));
|
||||||
optional_string_none(None);
|
optional_string_none(None);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user