mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
add support for the new assign expression in TypeScript 4
This commit is contained in:
@@ -77,6 +77,9 @@ public class ExprKinds {
|
|||||||
binOpKinds.put("**", 87);
|
binOpKinds.put("**", 87);
|
||||||
binOpKinds.put("**=", 88);
|
binOpKinds.put("**=", 88);
|
||||||
binOpKinds.put("??", 107);
|
binOpKinds.put("??", 107);
|
||||||
|
binOpKinds.put("&&=", 116);
|
||||||
|
binOpKinds.put("||=", 117);
|
||||||
|
binOpKinds.put("??=", 118);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Map<String, Integer> unOpKinds = new LinkedHashMap<String, Integer>();
|
private static final Map<String, Integer> unOpKinds = new LinkedHashMap<String, Integer>();
|
||||||
|
|||||||
@@ -1851,7 +1851,7 @@ class AssignExpr extends @assignexpr, Assignment {
|
|||||||
private class TCompoundAssignExpr =
|
private class TCompoundAssignExpr =
|
||||||
@assignaddexpr or @assignsubexpr or @assignmulexpr or @assigndivexpr or @assignmodexpr or
|
@assignaddexpr or @assignsubexpr or @assignmulexpr or @assigndivexpr or @assignmodexpr or
|
||||||
@assignexpexpr or @assignlshiftexpr or @assignrshiftexpr or @assignurshiftexpr or
|
@assignexpexpr or @assignlshiftexpr or @assignrshiftexpr or @assignurshiftexpr or
|
||||||
@assignorexpr or @assignxorexpr or @assignandexpr;
|
@assignorexpr or @assignxorexpr or @assignandexpr or @assignlogandexpr or @assignlogorexpr or @assignnullishcoalescingexpr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A compound assign expression.
|
* A compound assign expression.
|
||||||
@@ -1997,6 +1997,39 @@ class AssignXOrExpr extends @assignxorexpr, CompoundAssignExpr { }
|
|||||||
*/
|
*/
|
||||||
class AssignAndExpr extends @assignandexpr, CompoundAssignExpr { }
|
class AssignAndExpr extends @assignandexpr, CompoundAssignExpr { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A logical-'or'-assign expression.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* x ||= y
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
class AssignLogOrExpr extends @assignlogandexpr, CompoundAssignExpr { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A logical-'and'-assign expression.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* x &&= y
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
class AssignLogAndExpr extends @assignlogorexpr, CompoundAssignExpr { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A 'nullish-coalescing'-assign expression.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* x ??= y
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
class AssignNullishCoalescingExpr extends @assignnullishcoalescingexpr, CompoundAssignExpr { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An update expression, that is, an increment or decrement expression.
|
* An update expression, that is, an increment or decrement expression.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -351,6 +351,9 @@ case @expr.kind of
|
|||||||
| 113 = @e4x_xml_dynamic_qualident
|
| 113 = @e4x_xml_dynamic_qualident
|
||||||
| 114 = @e4x_xml_dotdotexpr
|
| 114 = @e4x_xml_dotdotexpr
|
||||||
| 115 = @importmetaexpr
|
| 115 = @importmetaexpr
|
||||||
|
| 116 = @assignlogandexpr
|
||||||
|
| 117 = @assignlogorexpr
|
||||||
|
| 118 = @assignnullishcoalescingexpr
|
||||||
;
|
;
|
||||||
|
|
||||||
@varaccess = @proper_varaccess | @export_varaccess;
|
@varaccess = @proper_varaccess | @export_varaccess;
|
||||||
@@ -372,7 +375,7 @@ case @expr.kind of
|
|||||||
|
|
||||||
@binaryexpr = @comparison | @lshiftexpr | @rshiftexpr | @urshiftexpr | @addexpr | @subexpr | @mulexpr | @divexpr | @modexpr | @expexpr | @bitorexpr | @xorexpr | @bitandexpr | @inexpr | @instanceofexpr | @logandexpr | @logorexpr | @nullishcoalescingexpr;
|
@binaryexpr = @comparison | @lshiftexpr | @rshiftexpr | @urshiftexpr | @addexpr | @subexpr | @mulexpr | @divexpr | @modexpr | @expexpr | @bitorexpr | @xorexpr | @bitandexpr | @inexpr | @instanceofexpr | @logandexpr | @logorexpr | @nullishcoalescingexpr;
|
||||||
|
|
||||||
@assignment = @assignexpr | @assignaddexpr | @assignsubexpr | @assignmulexpr | @assigndivexpr | @assignmodexpr | @assignexpexpr | @assignlshiftexpr | @assignrshiftexpr | @assignurshiftexpr | @assignorexpr | @assignxorexpr | @assignandexpr;
|
@assignment = @assignexpr | @assignaddexpr | @assignsubexpr | @assignmulexpr | @assigndivexpr | @assignmodexpr | @assignexpexpr | @assignlshiftexpr | @assignrshiftexpr | @assignurshiftexpr | @assignorexpr | @assignxorexpr | @assignandexpr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr;
|
||||||
|
|
||||||
@updateexpr = @preincexpr | @postincexpr | @predecexpr | @postdecexpr;
|
@updateexpr = @preincexpr | @postincexpr | @predecexpr | @postdecexpr;
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,9 @@ test_VariableTypes
|
|||||||
| tst.ts:164:56:164:59 | arr2 | arr2 | tst.ts:164:62:164:62 | U |
|
| tst.ts:164:56:164:59 | arr2 | arr2 | tst.ts:164:62:164:62 | U |
|
||||||
| tst.ts:169:31:169:31 | x | x | tst.ts:169:34:169:64 | [first: ... number] |
|
| tst.ts:169:31:169:31 | x | x | tst.ts:169:34:169:64 | [first: ... number] |
|
||||||
| tst.ts:180:5:180:7 | foo | foo | tst.ts:180:10:180:21 | StrStrNumNum |
|
| tst.ts:180:5:180:7 | foo | foo | tst.ts:180:10:180:21 | StrStrNumNum |
|
||||||
|
| tst.ts:184:7:184:8 | a1 | a1 | tst.ts:184:12:184:17 | number |
|
||||||
|
| tst.ts:185:7:185:8 | a2 | a2 | tst.ts:185:12:185:17 | number |
|
||||||
|
| tst.ts:186:7:186:8 | a3 | a3 | tst.ts:186:12:186:17 | number |
|
||||||
test_QualifiedTypeAccess
|
test_QualifiedTypeAccess
|
||||||
| tst.ts:63:19:63:21 | N.I | tst.ts:63:19:63:19 | N | tst.ts:63:21:63:21 | I |
|
| tst.ts:63:19:63:21 | N.I | tst.ts:63:19:63:19 | N | tst.ts:63:21:63:21 | I |
|
||||||
| tst.ts:64:20:64:24 | N.M.I | tst.ts:64:20:64:22 | N.M | tst.ts:64:24:64:24 | I |
|
| tst.ts:64:20:64:24 | N.M.I | tst.ts:64:20:64:22 | N.M | tst.ts:64:24:64:24 | I |
|
||||||
|
|||||||
@@ -177,4 +177,13 @@ type Numbers = [number, number];
|
|||||||
|
|
||||||
// [string, string, number, number]
|
// [string, string, number, number]
|
||||||
type StrStrNumNum = [...Strings, ...Numbers];
|
type StrStrNumNum = [...Strings, ...Numbers];
|
||||||
var foo: StrStrNumNum;
|
var foo: StrStrNumNum;
|
||||||
|
|
||||||
|
// Short-Circuiting Assignment Operators
|
||||||
|
function shortAssignment() {
|
||||||
|
let a1 : number = parseInt("foo");
|
||||||
|
let a2 : number = parseInt("bar");
|
||||||
|
let a3 : number = a1 ||= a2;
|
||||||
|
let a4 = a2 &&= a3;
|
||||||
|
let a5 = a3 ??= a4;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user