diff options
author | Camelid <camelidcamel@gmail.com> | 2020-07-14 20:32:37 -0700 |
---|---|---|
committer | Camelid <camelidcamel@gmail.com> | 2020-07-14 20:34:01 -0700 |
commit | 69881e8b062f55b40ee0bb587b7478e46fc18674 (patch) | |
tree | df127ea3d85f1336b89933541d7505605554e879 /components/script/script_module.rs | |
parent | 12d4c0d5eb029044b347765910a57236343641d7 (diff) | |
download | servo-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.rs | 18 |
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, |