Swift: Expand assignment operations.

This commit is contained in:
Geoffrey White
2023-02-23 13:36:18 +00:00
parent 71813fa0a7
commit 1d4925d7af
3 changed files with 120 additions and 1 deletions

View File

@@ -103,6 +103,54 @@ class AssignAddExpr extends AssignArithmeticOperationEx {
override string toString() { result = "... += ..." }
}
/**
* A subtraction assignment expression:
* ```
* a -= b
* ```
*/
class AssignSubExpr extends AssignArithmeticOperationEx {
AssignSubExpr() { this.getOperator().getName() = "-=(_:_:)" }
override string toString() { result = "... -= ..." }
}
/**
* A multiplication assignment expression:
* ```
* a *= b
* ```
*/
class AssignMulExpr extends AssignArithmeticOperationEx {
AssignMulExpr() { this.getOperator().getName() = "*=(_:_:)" }
override string toString() { result = "... *= ..." }
}
/**
* A division assignment expression:
* ```
* a /= b
* ```
*/
class AssignDivExpr extends AssignArithmeticOperationEx {
AssignDivExpr() { this.getOperator().getName() = "/=(_:_:)" }
override string toString() { result = "... /= ..." }
}
/**
* A remainder assignment expression:
* ```
* a %= b
* ```
*/
class AssignRemExpr extends AssignArithmeticOperationEx {
AssignRemExpr() { this.getOperator().getName() = "%=(_:_:)" }
override string toString() { result = "... %= ..." }
}
/**
* A left-shift assignment expression:
* ```
@@ -114,4 +162,51 @@ class AssignLShiftExpr extends AssignBitwiseOperationEx {
override string toString() { result = "... <<= ..." }
}
// TODO ...
/**
* A right-shift assignment expression:
* ```
* a >>= b
* ```
*/
class AssignRShiftExpr extends AssignBitwiseOperationEx {
AssignRShiftExpr() { this.getOperator().getName() = ">>=(_:_:)" }
override string toString() { result = "... >>= ..." }
}
/**
* A bitwise-and assignment expression:
* ```
* a &= b
* ```
*/
class AssignAndExpr extends AssignBitwiseOperationEx {
AssignAndExpr() { this.getOperator().getName() = "&=(_:_:)" }
override string toString() { result = "... &= ..." }
}
/**
* A bitwise-or assignment expression:
* ```
* a |= b
* ```
*/
class AssignOrExpr extends AssignBitwiseOperationEx {
AssignOrExpr() { this.getOperator().getName() = "|=(_:_:)" }
override string toString() { result = "... |= ..." }
}
/**
* A bitwise exclusive-or assignment expression:
* ```
* a ^= b
* ```
*/
class AssignXorExpr extends AssignBitwiseOperationEx {
AssignXorExpr() { this.getOperator().getName() = "^=(_:_:)" }
override string toString() { result = "... ^= ..." }
}

View File

@@ -1,4 +1,12 @@
| assignment.swift:6:2:6:6 | ... = ... | AssignExpr, Assignment | x | 1 |
| assignment.swift:9:2:9:7 | ... += ... | AssignAddExpr, AssignArithmeticOperation, AssignOperation, Assignment | &... | 1 |
| assignment.swift:10:2:10:7 | ... -= ... | AssignArithmeticOperation, AssignOperation, AssignSubExpr, Assignment | &... | 1 |
| assignment.swift:11:2:11:7 | ... *= ... | AssignArithmeticOperation, AssignMulExpr, AssignOperation, Assignment | &... | 1 |
| assignment.swift:12:2:12:7 | ... /= ... | AssignArithmeticOperation, AssignDivExpr, AssignOperation, Assignment | &... | 1 |
| assignment.swift:13:2:13:7 | ... %= ... | AssignArithmeticOperation, AssignOperation, AssignRemExpr, Assignment | &... | 1 |
| assignment.swift:16:2:16:7 | ... &= ... | AssignAndExpr, AssignBitwiseOperation, AssignOperation, Assignment | &... | 1 |
| assignment.swift:17:2:17:7 | ... \|= ... | AssignBitwiseOperation, AssignOperation, AssignOrExpr, Assignment | &... | 1 |
| assignment.swift:18:2:18:7 | ... ^= ... | AssignBitwiseOperation, AssignOperation, AssignXorExpr, Assignment | &... | 1 |
| assignment.swift:19:2:19:8 | ... <<= ... | AssignBitwiseOperation, AssignLShiftExpr, AssignOperation, Assignment | &... | 1 |
| assignment.swift:20:2:20:8 | ... >>= ... | AssignBitwiseOperation, AssignOperation, AssignRShiftExpr, Assignment | &... | 1 |
| assignment.swift:33:2:33:6 | ... = ... | AssignExpr, Assignment | y | z |

View File

@@ -13,7 +13,23 @@ string describe(Expr e) {
or
e instanceof AssignAddExpr and result = "AssignAddExpr"
or
e instanceof AssignSubExpr and result = "AssignSubExpr"
or
e instanceof AssignMulExpr and result = "AssignMulExpr"
or
e instanceof AssignDivExpr and result = "AssignDivExpr"
or
e instanceof AssignRemExpr and result = "AssignRemExpr"
or
e instanceof AssignLShiftExpr and result = "AssignLShiftExpr"
or
e instanceof AssignRShiftExpr and result = "AssignRShiftExpr"
or
e instanceof AssignAndExpr and result = "AssignAndExpr"
or
e instanceof AssignOrExpr and result = "AssignOrExpr"
or
e instanceof AssignXorExpr and result = "AssignXorExpr"
}
from Assignment e