aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_module.rs
diff options
context:
space:
mode:
authorCamelid <camelidcamel@gmail.com>2020-07-14 20:32:37 -0700
committerCamelid <camelidcamel@gmail.com>2020-07-14 20:34:01 -0700
commit69881e8b062f55b40ee0bb587b7478e46fc18674 (patch)
treedf127ea3d85f1336b89933541d7505605554e879 /components/script/script_module.rs
parent12d4c0d5eb029044b347765910a57236343641d7 (diff)
downloadservo-69881e8b062f55b40ee0bb587b7478e46fc18674.tar.gz
servo-69881e8b062f55b40ee0bb587b7478e46fc18674.zip
Use `Rc` instead of cloning the `DOMString`
Specifically, I changed the `text` field of `ScriptOrigin` from a `DOMString` to an `Rc<DOMString>`. Then I updated all the related code to work with an `Rc`. This is just a first pass to get the code to compile. There are probably more things I can do that will improve the code and further reduce cloning.
Diffstat (limited to 'components/script/script_module.rs')
-rw-r--r--components/script/script_module.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/components/script/script_module.rs b/components/script/script_module.rs
index 045c6225337..ad3d0720331 100644
--- a/components/script/script_module.rs
+++ b/components/script/script_module.rs
@@ -143,7 +143,7 @@ impl ModuleIdentity {
#[derive(JSTraceable)]
pub struct ModuleTree {
url: ServoUrl,
- text: DomRefCell<DOMString>,
+ text: DomRefCell<Rc<DOMString>>,
record: DomRefCell<Option<ModuleObject>>,
status: DomRefCell<ModuleStatus>,
// The spec maintains load order for descendants, so we use an indexset for descendants and
@@ -171,7 +171,7 @@ impl ModuleTree {
pub fn new(url: ServoUrl, external: bool, visited_urls: HashSet<ServoUrl>) -> Self {
ModuleTree {
url,
- text: DomRefCell::new(DOMString::new()),
+ text: DomRefCell::new(Rc::new(DOMString::new())),
record: DomRefCell::new(None),
status: DomRefCell::new(ModuleStatus::Initial),
parent_identities: DomRefCell::new(IndexSet::new()),
@@ -217,11 +217,11 @@ impl ModuleTree {
*self.network_error.borrow_mut() = Some(network_error);
}
- pub fn get_text(&self) -> &DomRefCell<DOMString> {
+ pub fn get_text(&self) -> &DomRefCell<Rc<DOMString>> {
&self.text
}
- pub fn set_text(&self, module_text: DOMString) {
+ pub fn set_text(&self, module_text: Rc<DOMString>) {
*self.text.borrow_mut() = module_text;
}
@@ -351,7 +351,7 @@ impl ModuleTree {
fn compile_module_script(
&self,
global: &GlobalScope,
- module_script_text: DOMString,
+ module_script_text: Rc<DOMString>,
url: ServoUrl,
) -> Result<ModuleObject, RethrowError> {
let module: Vec<u16> = module_script_text.encode_utf16().collect();
@@ -852,12 +852,12 @@ impl ModuleOwner {
Some(network_error) => Err(network_error.clone()),
None => match module_identity {
ModuleIdentity::ModuleUrl(script_src) => Ok(ScriptOrigin::external(
- module_tree.get_text().borrow().clone(),
+ Rc::clone(&module_tree.get_text().borrow()),
script_src.clone(),
ScriptType::Module,
)),
ModuleIdentity::ScriptId(_) => Ok(ScriptOrigin::internal(
- module_tree.get_text().borrow().clone(),
+ Rc::clone(&module_tree.get_text().borrow()),
document.base_url().clone(),
ScriptType::Module,
)),
@@ -980,7 +980,7 @@ impl FetchResponseListener for ModuleContext {
// Step 10.
let (source_text, _, _) = UTF_8.decode(&self.data);
Ok(ScriptOrigin::external(
- DOMString::from(source_text),
+ Rc::new(DOMString::from(source_text)),
meta.final_url,
ScriptType::Module,
))
@@ -1302,7 +1302,7 @@ pub fn fetch_single_module_script(
/// https://html.spec.whatwg.org/multipage/#fetch-an-inline-module-script-graph
pub fn fetch_inline_module_script(
owner: ModuleOwner,
- module_script_text: DOMString,
+ module_script_text: Rc<DOMString>,
url: ServoUrl,
script_id: ScriptId,
credentials_mode: CredentialsMode,