Merge "emitEnumBitwiseOperator takes operator parameter."
diff --git a/EnumType.cpp b/EnumType.cpp
index 99f1b63..97b806f 100644
--- a/EnumType.cpp
+++ b/EnumType.cpp
@@ -182,16 +182,20 @@
return OK;
}
-void EnumType::emitEnumBitwiseOrOperator(Formatter &out, bool mutating) const {
+void EnumType::emitEnumBitwiseOperator(
+ Formatter &out,
+ bool mutating,
+ const std::string &op) const {
const ScalarType *scalarType = mStorageType->resolveToScalarType();
CHECK(scalarType != nullptr);
const std::string storageType = scalarType->getCppStackType();
out << "inline "
- << fullName()
+ << (mutating ? fullName() : storageType)
<< (mutating ? " &" : "")
- << " operator|"
+ << " operator"
+ << op
<< (mutating ? "=" : "")
<< "(\n";
@@ -211,13 +215,15 @@
out << "return ";
}
out << "static_cast<"
- << fullName()
+ << (mutating ? fullName() : storageType)
<< ">(\n";
out.indent();
out.indent();
out << "static_cast<"
<< storageType
- << ">(lhs) | static_cast<"
+ << ">(lhs) "
+ << op
+ <<" static_cast<"
<< storageType
<< ">(rhs));\n";
out.unindent();
@@ -233,8 +239,10 @@
}
status_t EnumType::emitGlobalTypeDeclarations(Formatter &out) const {
- emitEnumBitwiseOrOperator(out, false /* mutating */);
- emitEnumBitwiseOrOperator(out, true /* mutating */);
+ emitEnumBitwiseOperator(out, false /* mutating */, "|");
+ emitEnumBitwiseOperator(out, true /* mutating */, "|");
+ emitEnumBitwiseOperator(out, false /* mutating */, "&");
+ emitEnumBitwiseOperator(out, true /* mutating */, "&");
return OK;
}
diff --git a/EnumType.h b/EnumType.h
index 8cb7e54..36ac968 100644
--- a/EnumType.h
+++ b/EnumType.h
@@ -90,7 +90,10 @@
void getTypeChain(std::vector<const EnumType *> *out) const;
const Annotation *findExportAnnotation() const;
- void emitEnumBitwiseOrOperator(Formatter &out, bool mutating) const;
+ void emitEnumBitwiseOperator(
+ Formatter &out,
+ bool mutating,
+ const std::string &op) const;
std::vector<EnumValue *> mValues;
Type *mStorageType;