enumertion: Add a using declaration rather than qualifying all branches.
This commit is contained in:
@@ -759,6 +759,17 @@ impl Source for Enum {
|
||||
);
|
||||
|
||||
out.open_brace();
|
||||
if is_tagged {
|
||||
// C++ name resolution rules are weird.
|
||||
write!(
|
||||
out,
|
||||
"using {} = {}::{};",
|
||||
enum_name,
|
||||
self.export_name(),
|
||||
enum_name
|
||||
);
|
||||
out.new_line();
|
||||
}
|
||||
write!(out, "switch ({})", instance);
|
||||
out.open_brace();
|
||||
let vec: Vec<_> = self
|
||||
@@ -766,13 +777,8 @@ impl Source for Enum {
|
||||
.iter()
|
||||
.map(|x| {
|
||||
format!(
|
||||
"case {}{}{}::{}: {} << \"{}\"; break;",
|
||||
if is_tagged { self.export_name() } else { "" },
|
||||
if is_tagged { "::" } else { "" },
|
||||
enum_name,
|
||||
x.export_name,
|
||||
stream,
|
||||
x.export_name
|
||||
"case {}::{}: {} << \"{}\"; break;",
|
||||
enum_name, x.export_name, stream, x.export_name
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
@@ -797,6 +803,17 @@ impl Source for Enum {
|
||||
);
|
||||
|
||||
out.open_brace();
|
||||
|
||||
// C++ name resolution rules are weird.
|
||||
write!(
|
||||
out,
|
||||
"using {} = {}::{};",
|
||||
enum_name,
|
||||
self.export_name(),
|
||||
enum_name
|
||||
);
|
||||
out.new_line();
|
||||
|
||||
write!(out, "switch ({}.tag)", instance);
|
||||
out.open_brace();
|
||||
let vec: Vec<_> = self
|
||||
@@ -806,8 +823,7 @@ impl Source for Enum {
|
||||
let tag_str = format!("\"{}\"", x.export_name);
|
||||
if let VariantBody::Body { ref name, .. } = x.body {
|
||||
format!(
|
||||
"case {}::{}::{}: {} << {}{}{}.{}; break;",
|
||||
self.export_name(),
|
||||
"case {}::{}: {} << {}{}{}.{}; break;",
|
||||
enum_name,
|
||||
x.export_name,
|
||||
stream,
|
||||
@@ -818,12 +834,8 @@ impl Source for Enum {
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"case {}::{}::{}: {} << {}; break;",
|
||||
self.export_name(),
|
||||
enum_name,
|
||||
x.export_name,
|
||||
stream,
|
||||
tag_str,
|
||||
"case {}::{}: {} << {}; break;",
|
||||
enum_name, x.export_name, stream, tag_str,
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -55,19 +55,21 @@ union F {
|
||||
};
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
|
||||
using Tag = F::Tag;
|
||||
switch (instance) {
|
||||
case F::Tag::Foo: stream << "Foo"; break;
|
||||
case F::Tag::Bar: stream << "Bar"; break;
|
||||
case F::Tag::Baz: stream << "Baz"; break;
|
||||
case Tag::Foo: stream << "Foo"; break;
|
||||
case Tag::Bar: stream << "Bar"; break;
|
||||
case Tag::Baz: stream << "Baz"; break;
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& stream, const F& instance) {
|
||||
using Tag = F::Tag;
|
||||
switch (instance.tag) {
|
||||
case F::Tag::Foo: stream << instance.foo; break;
|
||||
case F::Tag::Bar: stream << instance.bar; break;
|
||||
case F::Tag::Baz: stream << "Baz"; break;
|
||||
case Tag::Foo: stream << instance.foo; break;
|
||||
case Tag::Bar: stream << instance.bar; break;
|
||||
case Tag::Baz: stream << "Baz"; break;
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
@@ -109,19 +111,21 @@ struct H {
|
||||
};
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
|
||||
using Tag = H::Tag;
|
||||
switch (instance) {
|
||||
case H::Tag::Hello: stream << "Hello"; break;
|
||||
case H::Tag::There: stream << "There"; break;
|
||||
case H::Tag::Everyone: stream << "Everyone"; break;
|
||||
case Tag::Hello: stream << "Hello"; break;
|
||||
case Tag::There: stream << "There"; break;
|
||||
case Tag::Everyone: stream << "Everyone"; break;
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& stream, const H& instance) {
|
||||
using Tag = H::Tag;
|
||||
switch (instance.tag) {
|
||||
case H::Tag::Hello: stream << "Hello" << instance.hello; break;
|
||||
case H::Tag::There: stream << "There" << instance.there; break;
|
||||
case H::Tag::Everyone: stream << "Everyone"; break;
|
||||
case Tag::Hello: stream << "Hello" << instance.hello; break;
|
||||
case Tag::There: stream << "There" << instance.there; break;
|
||||
case Tag::Everyone: stream << "Everyone"; break;
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user