diff --git a/js/src/frontend/binsource/src/main.rs b/js/src/frontend/binsource/src/main.rs index 4cdce8beeb84..723d01a2215c 100644 --- a/js/src/frontend/binsource/src/main.rs +++ b/js/src/frontend/binsource/src/main.rs @@ -519,14 +519,6 @@ const INTERFACE_ARGS: &str = const TOPLEVEL_INTERFACE: &str = "Program"; -/// Get Rc from NodeName. -/// -/// FIXME: Do not clone the String itself, but just clone the Rc inside -/// NodeName (Bug 1504597). -fn string_from_nodename(name: &NodeName) -> Rc { - Rc::new(name.to_string().clone()) -} - /// The actual exporter. struct CPPExporter { /// The syntax to export. @@ -647,7 +639,7 @@ impl CPPExporter { let mut edges: HashSet> = HashSet::new(); edges.insert(Rc::new(format!("Sum{}", name))); - refgraph.insert(string_from_nodename(name), edges); + refgraph.insert(name.to_rc_string().clone(), edges); let mut sum_edges: HashSet> = HashSet::new(); for node in nodes { @@ -676,7 +668,7 @@ impl CPPExporter { if is_implemented { let mut edges: HashSet> = HashSet::new(); edges.insert(Rc::new(format!("Interface{}", name))); - refgraph.insert(string_from_nodename(name), edges); + refgraph.insert(name.to_rc_string().clone(), edges); } let mut interface_edges: HashSet> = HashSet::new(); @@ -705,7 +697,7 @@ impl CPPExporter { // 3. String Enums for (kind, _) in self.syntax.string_enums_by_name() { - refgraph.insert(string_from_nodename(kind), HashSet::new()); + refgraph.insert(kind.to_rc_string().clone(), HashSet::new()); } // 4. Lists @@ -720,8 +712,8 @@ impl CPPExporter { } let mut edges: HashSet> = HashSet::new(); - edges.insert(string_from_nodename(&parser.elements)); - refgraph.insert(string_from_nodename(name), edges); + edges.insert(parser.elements.to_rc_string().clone()); + refgraph.insert(name.to_rc_string().clone(), edges); } // 5. Optional values @@ -756,7 +748,7 @@ impl CPPExporter { }, _ => {} } - refgraph.insert(string_from_nodename(&parser.name), edges); + refgraph.insert(parser.name.to_rc_string().clone(), edges); } // 6. Primitive values. @@ -1017,7 +1009,7 @@ enum class BinVariant { buffer.push_str("// Implementations are autogenerated\n"); buffer.push_str("// `ParseNode*` may never be nullptr\n"); for &(ref name, _) in &sums_of_interfaces { - if !self.refgraph.is_used(string_from_nodename(&name)) { + if !self.refgraph.is_used(name.to_rc_string().clone()) { continue; } @@ -1059,7 +1051,7 @@ enum class BinVariant { let rules_for_this_interface = self.rules.get(name); let extra_params = rules_for_this_interface.extra_params; - if self.refgraph.is_used(string_from_nodename(name)) { + if self.refgraph.is_used(name.to_rc_string().clone()) { let outer = self.get_method_signature(name, "", "", &extra_params); outer_parsers.push(outer.reindent("")); } @@ -1092,7 +1084,7 @@ enum class BinVariant { .iter() .sorted_by(|a, b| str::cmp(a.0.to_str(), b.0.to_str())); for (kind, _) in string_enums_by_name { - if !self.refgraph.is_used(string_from_nodename(kind)) { + if !self.refgraph.is_used(kind.to_rc_string().clone()) { continue; } @@ -1106,7 +1098,7 @@ enum class BinVariant { buffer.push_str("\n\n// ----- Lists (by lexicographical order)\n"); buffer.push_str("// Implementations are autogenerated\n"); for parser in &self.list_parsers_to_generate { - if !self.refgraph.is_used(string_from_nodename(&parser.name)) { + if !self.refgraph.is_used(parser.name.to_rc_string().clone()) { continue; } @@ -1123,7 +1115,7 @@ enum class BinVariant { buffer.push_str("\n\n// ----- Default values (by lexicographical order)\n"); buffer.push_str("// Implementations are autogenerated\n"); for parser in &self.option_parsers_to_generate { - if !self.refgraph.is_used(string_from_nodename(&parser.name)) { + if !self.refgraph.is_used(parser.name.to_rc_string().clone()) { continue; } @@ -1185,7 +1177,7 @@ impl CPPExporter { .sorted(); let kind = name.to_class_cases(); - if self.refgraph.is_used(string_from_nodename(name)) { + if self.refgraph.is_used(name.to_rc_string().clone()) { let rendered_bnf = format!("/*\n{name} ::= {nodes}\n*/", nodes = nodes.iter() .format("\n "), @@ -1273,7 +1265,7 @@ impl CPPExporter { /// Generate the implementation of a single list parser fn generate_implement_list(&self, buffer: &mut String, parser: &ListParserData) { - if !self.refgraph.is_used(string_from_nodename(&parser.name)) { + if !self.refgraph.is_used(parser.name.to_rc_string().clone()) { return; } @@ -1366,7 +1358,7 @@ impl CPPExporter { debug!(target: "generate_spidermonkey", "Implementing optional value {} backed by {}", parser.name.to_str(), parser.elements.to_str()); - if !self.refgraph.is_used(string_from_nodename(&parser.name)) { + if !self.refgraph.is_used(parser.name.to_rc_string().clone()) { return; } @@ -1617,7 +1609,7 @@ impl CPPExporter { } } - if self.refgraph.is_used(string_from_nodename(name)) { + if self.refgraph.is_used(name.to_rc_string().clone()) { // Generate comments let comment = format!("\n/*\n{}*/\n", ToWebidl::interface(interface, "", " ")); buffer.push_str(&comment); @@ -1899,7 +1891,7 @@ impl CPPExporter { .iter() .sorted_by(|a, b| str::cmp(a.0.to_str(), b.0.to_str())); for (kind, enum_) in string_enums_by_name { - if !self.refgraph.is_used(string_from_nodename(kind)) { + if !self.refgraph.is_used(kind.to_rc_string().clone()) { continue; }