Bug 1504597 - Use NodeName::to_rc_string. r=Yoric

This commit is contained in:
Tooru Fujisawa 2018-11-07 15:14:29 +09:00
parent 1fd8fb9353
commit cbfb4c370e

View File

@ -519,14 +519,6 @@ const INTERFACE_ARGS: &str =
const TOPLEVEL_INTERFACE: &str =
"Program";
/// Get Rc<String> from NodeName.
///
/// FIXME: Do not clone the String itself, but just clone the Rc<String> inside
/// NodeName (Bug 1504597).
fn string_from_nodename(name: &NodeName) -> Rc<String> {
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<Rc<String>> = 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<Rc<String>> = HashSet::new();
for node in nodes {
@ -676,7 +668,7 @@ impl CPPExporter {
if is_implemented {
let mut edges: HashSet<Rc<String>> = 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<Rc<String>> = 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<Rc<String>> = 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;
}