@@ -13,7 +13,8 @@ class Assignment extends Expr {
1313 Assignment ( ) {
1414 this instanceof AssignExpr or
1515 this instanceof AssignArithmeticOperationEx or
16- this instanceof AssignBitwiseOperationEx
16+ this instanceof AssignBitwiseOperationEx or
17+ this instanceof AssignPointwiseOperationEx
1718 }
1819
1920 /**
@@ -71,7 +72,8 @@ class AssignExpr extends Generated::AssignExpr {
7172class AssignOperation extends Assignment , BinaryExpr {
7273 AssignOperation ( ) {
7374 this instanceof AssignArithmeticOperationEx or
74- this instanceof AssignBitwiseOperationEx
75+ this instanceof AssignBitwiseOperationEx or
76+ this instanceof AssignPointwiseOperationEx
7577 }
7678}
7779
@@ -103,6 +105,19 @@ class AssignBitwiseOperation extends AssignOperation instanceof AssignBitwiseOpe
103105 */
104106abstract private class AssignBitwiseOperationEx extends BinaryExpr { }
105107
108+ /**
109+ * A pointwise assignment expression. For example:
110+ * ```
111+ * x .&= y
112+ * ```
113+ */
114+ class AssignPointwiseOperation extends AssignOperation instanceof AssignPointwiseOperationEx { }
115+
116+ /**
117+ * Private abstract class, extended to define the scope of `AssignPointwiseOperation`.
118+ */
119+ abstract private class AssignPointwiseOperationEx extends BinaryExpr { }
120+
106121/**
107122 * An addition assignment expression:
108123 * ```
@@ -227,3 +242,39 @@ class AssignXorExpr extends AssignBitwiseOperationEx {
227242
228243 override string toString ( ) { result = "... ^= ..." }
229244}
245+
246+ /**
247+ * A pointwise bitwise-and assignment expression:
248+ * ```
249+ * a .&= b
250+ * ```
251+ */
252+ class AssignPointwiseAndExpr extends AssignPointwiseOperationEx {
253+ AssignPointwiseAndExpr ( ) { this .getOperator ( ) .getName ( ) = ".&=(_:_:)" }
254+
255+ override string toString ( ) { result = "... .&= ..." }
256+ }
257+
258+ /**
259+ * A pointwise bitwise-or assignment expression:
260+ * ```
261+ * a .|= b
262+ * ```
263+ */
264+ class AssignPointwiseOrExpr extends AssignPointwiseOperationEx {
265+ AssignPointwiseOrExpr ( ) { this .getOperator ( ) .getName ( ) = ".|=(_:_:)" }
266+
267+ override string toString ( ) { result = "... .|= ..." }
268+ }
269+
270+ /**
271+ * A pointwise bitwise exclusive-or assignment expression:
272+ * ```
273+ * a .^= b
274+ * ```
275+ */
276+ class AssignPointwiseXorExpr extends AssignPointwiseOperationEx {
277+ AssignPointwiseXorExpr ( ) { this .getOperator ( ) .getName ( ) = ".^=(_:_:)" }
278+
279+ override string toString ( ) { result = "... .^= ..." }
280+ }
0 commit comments