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;