Merge pull request #1175 from psygnisfive/NullSensitiveContext

[JS] Null Sensitive Context (new library)
This commit is contained in:
Max Schaefer
2019-04-15 08:50:14 +01:00
committed by GitHub
5 changed files with 946 additions and 0 deletions

View File

@@ -161,6 +161,66 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode {
* file that was extracted without type information.
*/
Type getType() { ast_node_type(this, result) }
/**
* Holds if the syntactic context that the expression appears in relies on the expression
* being non-null/non-undefined.
*
* A context relies on the subexpression being non-null/non-undefined if either...
*
* * Using null or undefined would cause a runtime error
* * Using null or undefined would cause no error due to type conversion, but the
* behavior in the broader context is sufficiently non-obvious to warrant explicitly
* converting to ensure that readers understand the intent
*/
predicate inNullSensitiveContext() {
exists(ExprOrStmt ctx |
// bases cases
this = ctx.(PropAccess).getBase()
or
this = ctx.(IndexExpr).getPropertyNameExpr()
or
this = ctx.(InvokeExpr).getCallee()
or
this = ctx.(BinaryExpr).getAnOperand() and
not ctx instanceof LogicalBinaryExpr and // x LOGOP y is fine because of implicit conversion
not ctx instanceof EqualityTest and // x EQOP y is fine because of implicit conversion and lack thereof
not ctx.(BitOrExpr).getAnOperand().(NumberLiteral).getIntValue() = 0 and // x | 0 is fine because it's used to convert to numbers
not ctx.(RShiftExpr).getRightOperand().(NumberLiteral).getIntValue() = 0 and // x >> 0 is fine because it's used to convert to numbers
not ctx.(URShiftExpr).getRightOperand().(NumberLiteral).getIntValue() = 0 // x >>> 0 is fine because it's used to convert to numbers
or
this = ctx.(UnaryExpr).getOperand() and
not ctx instanceof LogNotExpr and // !x is fine because of implicit conversion
not ctx instanceof PlusExpr and // +x is fine because of implicit conversion
not ctx instanceof VoidExpr // void x is fine because it explicitly is for capturing void things
or
this = ctx.(UpdateExpr).getOperand()
or
this = ctx.(CompoundAssignExpr).getLhs()
or
this = ctx.(CompoundAssignExpr).getRhs()
or
this = ctx.(AssignExpr).getRhs() and
ctx.(AssignExpr).getLhs() instanceof DestructuringPattern
or
this = ctx.(SpreadElement).getOperand()
or
this = ctx.(ForOfStmt).getIterationDomain()
or
// recursive cases
this = ctx.(ParExpr).getExpression() and
ctx.(ParExpr).inNullSensitiveContext()
or
this = ctx.(SeqExpr).getLastOperand() and
ctx.(SeqExpr).inNullSensitiveContext()
or
this = ctx.(LogicalBinaryExpr).getRightOperand() and
ctx.(LogicalBinaryExpr).inNullSensitiveContext()
or
this = ctx.(ConditionalExpr).getABranch() and
ctx.(ConditionalExpr).inNullSensitiveContext()
)
}
}
/** An identifier. */

View File

@@ -0,0 +1,60 @@
///////////////////
// //
// SHOULD FIND //
// //
///////////////////
foo[bar];
foo.bar;
new Foo;
new Foo();
foo.bar = 5;
foo(bar);
x + y;
x - y;
x * y;
x / y;
x % y;
+x;
-x;
++x;
x++;
--x;
x--;
x += y;
x -= y;
x *= y;
x /= y;
x %= y;
[x , y] = p;
//[1,2,...xs]
x & y;
x | y;
x ^ y;
x << y;
x >> y;
x >>> y;
~x;
x &= y;
x |= y;
x ^= y;
x <<= y;
x >>= y;
x >>>= y;
for (let x of y) { }
///////////////////////
// //
// SHOULD NOT FIND //
// //
///////////////////////
x && y;
x || y;
!x;
if (x) { }
while (x) { }
for (; y; z) { }
for (let x in y) { }

View File

@@ -0,0 +1,3 @@
import javascript
query predicate test_inNullSensitiveContext(Expr e) { e.inNullSensitiveContext() }

View File

@@ -220,6 +220,127 @@ test_getParent
| mozextensions.js:1:23:1:23 | x | mozextensions.js:1:23:1:25 | x+1 |
| mozextensions.js:1:23:1:25 | x+1 | mozextensions.js:1:11:1:25 | function(x) x+1 |
| mozextensions.js:1:25:1:25 | 1 | mozextensions.js:1:23:1:25 | x+1 |
| nullSensitiveContexts.js:7:1:7:3 | foo | nullSensitiveContexts.js:7:1:7:8 | foo[bar] |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | nullSensitiveContexts.js:7:1:7:9 | foo[bar]; |
| nullSensitiveContexts.js:7:5:7:7 | bar | nullSensitiveContexts.js:7:1:7:8 | foo[bar] |
| nullSensitiveContexts.js:8:1:8:3 | foo | nullSensitiveContexts.js:8:1:8:7 | foo.bar |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | nullSensitiveContexts.js:8:1:8:8 | foo.bar; |
| nullSensitiveContexts.js:8:5:8:7 | bar | nullSensitiveContexts.js:8:1:8:7 | foo.bar |
| nullSensitiveContexts.js:9:1:9:7 | new Foo | nullSensitiveContexts.js:9:1:9:8 | new Foo; |
| nullSensitiveContexts.js:9:5:9:7 | Foo | nullSensitiveContexts.js:9:1:9:7 | new Foo |
| nullSensitiveContexts.js:10:1:10:9 | new Foo() | nullSensitiveContexts.js:10:1:10:10 | new Foo(); |
| nullSensitiveContexts.js:10:5:10:7 | Foo | nullSensitiveContexts.js:10:1:10:9 | new Foo() |
| nullSensitiveContexts.js:11:1:11:3 | foo | nullSensitiveContexts.js:11:1:11:7 | foo.bar |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:11:5:11:7 | bar | nullSensitiveContexts.js:11:1:11:7 | foo.bar |
| nullSensitiveContexts.js:11:11:11:11 | 5 | nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 |
| nullSensitiveContexts.js:12:1:12:3 | foo | nullSensitiveContexts.js:12:1:12:8 | foo(bar) |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | nullSensitiveContexts.js:12:1:12:9 | foo(bar); |
| nullSensitiveContexts.js:12:5:12:7 | bar | nullSensitiveContexts.js:12:1:12:8 | foo(bar) |
| nullSensitiveContexts.js:13:1:13:1 | x | nullSensitiveContexts.js:13:1:13:5 | x + y |
| nullSensitiveContexts.js:13:1:13:5 | x + y | nullSensitiveContexts.js:13:1:13:6 | x + y; |
| nullSensitiveContexts.js:13:5:13:5 | y | nullSensitiveContexts.js:13:1:13:5 | x + y |
| nullSensitiveContexts.js:14:1:14:1 | x | nullSensitiveContexts.js:14:1:14:5 | x - y |
| nullSensitiveContexts.js:14:1:14:5 | x - y | nullSensitiveContexts.js:14:1:14:6 | x - y; |
| nullSensitiveContexts.js:14:5:14:5 | y | nullSensitiveContexts.js:14:1:14:5 | x - y |
| nullSensitiveContexts.js:15:1:15:1 | x | nullSensitiveContexts.js:15:1:15:5 | x * y |
| nullSensitiveContexts.js:15:1:15:5 | x * y | nullSensitiveContexts.js:15:1:15:6 | x * y; |
| nullSensitiveContexts.js:15:5:15:5 | y | nullSensitiveContexts.js:15:1:15:5 | x * y |
| nullSensitiveContexts.js:16:1:16:1 | x | nullSensitiveContexts.js:16:1:16:5 | x / y |
| nullSensitiveContexts.js:16:1:16:5 | x / y | nullSensitiveContexts.js:16:1:16:6 | x / y; |
| nullSensitiveContexts.js:16:5:16:5 | y | nullSensitiveContexts.js:16:1:16:5 | x / y |
| nullSensitiveContexts.js:17:1:17:1 | x | nullSensitiveContexts.js:17:1:17:5 | x % y |
| nullSensitiveContexts.js:17:1:17:5 | x % y | nullSensitiveContexts.js:17:1:17:6 | x % y; |
| nullSensitiveContexts.js:17:5:17:5 | y | nullSensitiveContexts.js:17:1:17:5 | x % y |
| nullSensitiveContexts.js:18:1:18:2 | +x | nullSensitiveContexts.js:18:1:18:3 | +x; |
| nullSensitiveContexts.js:18:2:18:2 | x | nullSensitiveContexts.js:18:1:18:2 | +x |
| nullSensitiveContexts.js:19:1:19:2 | -x | nullSensitiveContexts.js:19:1:19:3 | -x; |
| nullSensitiveContexts.js:19:2:19:2 | x | nullSensitiveContexts.js:19:1:19:2 | -x |
| nullSensitiveContexts.js:20:1:20:3 | ++x | nullSensitiveContexts.js:20:1:20:4 | ++x; |
| nullSensitiveContexts.js:20:3:20:3 | x | nullSensitiveContexts.js:20:1:20:3 | ++x |
| nullSensitiveContexts.js:21:1:21:1 | x | nullSensitiveContexts.js:21:1:21:3 | x++ |
| nullSensitiveContexts.js:21:1:21:3 | x++ | nullSensitiveContexts.js:21:1:21:4 | x++; |
| nullSensitiveContexts.js:22:1:22:3 | --x | nullSensitiveContexts.js:22:1:22:4 | --x; |
| nullSensitiveContexts.js:22:3:22:3 | x | nullSensitiveContexts.js:22:1:22:3 | --x |
| nullSensitiveContexts.js:23:1:23:1 | x | nullSensitiveContexts.js:23:1:23:3 | x-- |
| nullSensitiveContexts.js:23:1:23:3 | x-- | nullSensitiveContexts.js:23:1:23:4 | x--; |
| nullSensitiveContexts.js:24:1:24:1 | x | nullSensitiveContexts.js:24:1:24:6 | x += y |
| nullSensitiveContexts.js:24:1:24:6 | x += y | nullSensitiveContexts.js:24:1:24:7 | x += y; |
| nullSensitiveContexts.js:24:6:24:6 | y | nullSensitiveContexts.js:24:1:24:6 | x += y |
| nullSensitiveContexts.js:25:1:25:1 | x | nullSensitiveContexts.js:25:1:25:6 | x -= y |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | nullSensitiveContexts.js:25:1:25:7 | x -= y; |
| nullSensitiveContexts.js:25:6:25:6 | y | nullSensitiveContexts.js:25:1:25:6 | x -= y |
| nullSensitiveContexts.js:26:1:26:1 | x | nullSensitiveContexts.js:26:1:26:6 | x *= y |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | nullSensitiveContexts.js:26:1:26:7 | x *= y; |
| nullSensitiveContexts.js:26:6:26:6 | y | nullSensitiveContexts.js:26:1:26:6 | x *= y |
| nullSensitiveContexts.js:27:1:27:1 | x | nullSensitiveContexts.js:27:1:27:6 | x /= y |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | nullSensitiveContexts.js:27:1:27:7 | x /= y; |
| nullSensitiveContexts.js:27:6:27:6 | y | nullSensitiveContexts.js:27:1:27:6 | x /= y |
| nullSensitiveContexts.js:28:1:28:1 | x | nullSensitiveContexts.js:28:1:28:6 | x %= y |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | nullSensitiveContexts.js:28:1:28:7 | x %= y; |
| nullSensitiveContexts.js:28:6:28:6 | y | nullSensitiveContexts.js:28:1:28:6 | x %= y |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | nullSensitiveContexts.js:29:1:29:11 | [x , y] = p |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:29:2:29:2 | x | nullSensitiveContexts.js:29:1:29:7 | [x , y] |
| nullSensitiveContexts.js:29:6:29:6 | y | nullSensitiveContexts.js:29:1:29:7 | [x , y] |
| nullSensitiveContexts.js:29:11:29:11 | p | nullSensitiveContexts.js:29:1:29:11 | [x , y] = p |
| nullSensitiveContexts.js:31:1:31:1 | x | nullSensitiveContexts.js:31:1:31:5 | x & y |
| nullSensitiveContexts.js:31:1:31:5 | x & y | nullSensitiveContexts.js:31:1:31:6 | x & y; |
| nullSensitiveContexts.js:31:5:31:5 | y | nullSensitiveContexts.js:31:1:31:5 | x & y |
| nullSensitiveContexts.js:32:1:32:1 | x | nullSensitiveContexts.js:32:1:32:5 | x \| y |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | nullSensitiveContexts.js:32:1:32:6 | x \| y; |
| nullSensitiveContexts.js:32:5:32:5 | y | nullSensitiveContexts.js:32:1:32:5 | x \| y |
| nullSensitiveContexts.js:33:1:33:1 | x | nullSensitiveContexts.js:33:1:33:5 | x ^ y |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | nullSensitiveContexts.js:33:1:33:6 | x ^ y; |
| nullSensitiveContexts.js:33:5:33:5 | y | nullSensitiveContexts.js:33:1:33:5 | x ^ y |
| nullSensitiveContexts.js:34:1:34:1 | x | nullSensitiveContexts.js:34:1:34:6 | x << y |
| nullSensitiveContexts.js:34:1:34:6 | x << y | nullSensitiveContexts.js:34:1:34:7 | x << y; |
| nullSensitiveContexts.js:34:6:34:6 | y | nullSensitiveContexts.js:34:1:34:6 | x << y |
| nullSensitiveContexts.js:35:1:35:1 | x | nullSensitiveContexts.js:35:1:35:6 | x >> y |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | nullSensitiveContexts.js:35:1:35:7 | x >> y; |
| nullSensitiveContexts.js:35:6:35:6 | y | nullSensitiveContexts.js:35:1:35:6 | x >> y |
| nullSensitiveContexts.js:36:1:36:1 | x | nullSensitiveContexts.js:36:1:36:7 | x >>> y |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | nullSensitiveContexts.js:36:1:36:8 | x >>> y; |
| nullSensitiveContexts.js:36:7:36:7 | y | nullSensitiveContexts.js:36:1:36:7 | x >>> y |
| nullSensitiveContexts.js:37:1:37:2 | ~x | nullSensitiveContexts.js:37:1:37:3 | ~x; |
| nullSensitiveContexts.js:37:2:37:2 | x | nullSensitiveContexts.js:37:1:37:2 | ~x |
| nullSensitiveContexts.js:38:1:38:1 | x | nullSensitiveContexts.js:38:1:38:6 | x &= y |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | nullSensitiveContexts.js:38:1:38:7 | x &= y; |
| nullSensitiveContexts.js:38:6:38:6 | y | nullSensitiveContexts.js:38:1:38:6 | x &= y |
| nullSensitiveContexts.js:39:1:39:1 | x | nullSensitiveContexts.js:39:1:39:6 | x \|= y |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | nullSensitiveContexts.js:39:1:39:7 | x \|= y; |
| nullSensitiveContexts.js:39:6:39:6 | y | nullSensitiveContexts.js:39:1:39:6 | x \|= y |
| nullSensitiveContexts.js:40:1:40:1 | x | nullSensitiveContexts.js:40:1:40:6 | x ^= y |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | nullSensitiveContexts.js:40:1:40:7 | x ^= y; |
| nullSensitiveContexts.js:40:6:40:6 | y | nullSensitiveContexts.js:40:1:40:6 | x ^= y |
| nullSensitiveContexts.js:41:1:41:1 | x | nullSensitiveContexts.js:41:1:41:7 | x <<= y |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | nullSensitiveContexts.js:41:1:41:8 | x <<= y; |
| nullSensitiveContexts.js:41:7:41:7 | y | nullSensitiveContexts.js:41:1:41:7 | x <<= y |
| nullSensitiveContexts.js:42:1:42:1 | x | nullSensitiveContexts.js:42:1:42:7 | x >>= y |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | nullSensitiveContexts.js:42:1:42:8 | x >>= y; |
| nullSensitiveContexts.js:42:7:42:7 | y | nullSensitiveContexts.js:42:1:42:7 | x >>= y |
| nullSensitiveContexts.js:43:1:43:1 | x | nullSensitiveContexts.js:43:1:43:8 | x >>>= y |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | nullSensitiveContexts.js:43:1:43:9 | x >>>= y; |
| nullSensitiveContexts.js:43:8:43:8 | y | nullSensitiveContexts.js:43:1:43:8 | x >>>= y |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:44:6:44:10 | let x |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:44:10:44:10 | x |
| nullSensitiveContexts.js:44:15:44:15 | y | nullSensitiveContexts.js:44:1:44:20 | for (let x of y) { } |
| nullSensitiveContexts.js:54:1:54:1 | x | nullSensitiveContexts.js:54:1:54:6 | x && y |
| nullSensitiveContexts.js:54:1:54:6 | x && y | nullSensitiveContexts.js:54:1:54:7 | x && y; |
| nullSensitiveContexts.js:54:6:54:6 | y | nullSensitiveContexts.js:54:1:54:6 | x && y |
| nullSensitiveContexts.js:55:1:55:1 | x | nullSensitiveContexts.js:55:1:55:6 | x \|\| y |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | nullSensitiveContexts.js:55:1:55:7 | x \|\| y; |
| nullSensitiveContexts.js:55:6:55:6 | y | nullSensitiveContexts.js:55:1:55:6 | x \|\| y |
| nullSensitiveContexts.js:56:1:56:2 | !x | nullSensitiveContexts.js:56:1:56:3 | !x; |
| nullSensitiveContexts.js:56:2:56:2 | x | nullSensitiveContexts.js:56:1:56:2 | !x |
| nullSensitiveContexts.js:57:5:57:5 | x | nullSensitiveContexts.js:57:1:57:10 | if (x) { } |
| nullSensitiveContexts.js:58:8:58:8 | x | nullSensitiveContexts.js:58:1:58:13 | while (x) { } |
| nullSensitiveContexts.js:59:8:59:8 | y | nullSensitiveContexts.js:59:1:59:16 | for (; y; z) { } |
| nullSensitiveContexts.js:59:11:59:11 | z | nullSensitiveContexts.js:59:1:59:16 | for (; y; z) { } |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:60:6:60:10 | let x |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:60:10:60:10 | x |
| nullSensitiveContexts.js:60:15:60:15 | y | nullSensitiveContexts.js:60:1:60:20 | for (let x in y) { } |
| others.js:1:1:1:2 | 23 | others.js:1:1:1:6 | 23, 42 |
| others.js:1:1:1:6 | 23, 42 | others.js:1:1:1:7 | 23, 42; |
| others.js:1:5:1:6 | 42 | others.js:1:1:1:6 | 23, 42 |
@@ -552,6 +673,127 @@ test_getTopLevel
| mozextensions.js:1:23:1:23 | x | mozextensions.js:1:1:3:42 | <toplevel> |
| mozextensions.js:1:23:1:25 | x+1 | mozextensions.js:1:1:3:42 | <toplevel> |
| mozextensions.js:1:25:1:25 | 1 | mozextensions.js:1:1:3:42 | <toplevel> |
| nullSensitiveContexts.js:7:1:7:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:7:5:7:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:1:8:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:5:8:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:9:1:9:7 | new Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:9:5:9:7 | Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:10:1:10:9 | new Foo() | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:10:5:10:7 | Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:5:11:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:11:11:11 | 5 | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:1:12:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:5:12:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:1:13:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:1:13:5 | x + y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:5:13:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:1:14:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:1:14:5 | x - y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:5:14:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:1:15:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:1:15:5 | x * y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:5:15:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:1:16:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:1:16:5 | x / y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:5:16:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:1:17:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:1:17:5 | x % y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:5:17:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:18:1:18:2 | +x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:18:2:18:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:19:1:19:2 | -x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:19:2:19:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:20:1:20:3 | ++x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:20:3:20:3 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:21:1:21:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:21:1:21:3 | x++ | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:22:1:22:3 | --x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:22:3:22:3 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:23:1:23:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:23:1:23:3 | x-- | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:1:24:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:1:24:6 | x += y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:6:24:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:1:25:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:6:25:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:1:26:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:6:26:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:1:27:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:6:27:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:1:28:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:6:28:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:2:29:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:6:29:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:11:29:11 | p | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:1:31:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:1:31:5 | x & y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:5:31:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:1:32:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:5:32:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:1:33:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:5:33:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:1:34:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:1:34:6 | x << y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:6:34:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:1:35:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:6:35:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:1:36:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:7:36:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:37:1:37:2 | ~x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:37:2:37:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:1:38:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:6:38:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:1:39:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:6:39:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:1:40:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:6:40:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:1:41:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:7:41:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:1:42:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:7:42:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:1:43:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:8:43:8 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:15:44:15 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:1:54:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:1:54:6 | x && y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:6:54:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:1:55:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:6:55:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:56:1:56:2 | !x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:56:2:56:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:57:5:57:5 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:58:8:58:8 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:59:8:59:8 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:59:11:59:11 | z | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:15:60:15 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| others.js:1:1:1:2 | 23 | others.js:1:1:5:2 | <toplevel> |
| others.js:1:1:1:6 | 23, 42 | others.js:1:1:5:2 | <toplevel> |
| others.js:1:5:1:6 | 42 | others.js:1:1:5:2 | <toplevel> |
@@ -808,6 +1050,80 @@ test_getChild
| mozextensions.js:1:11:1:25 | function(x) x+1 | -2 | mozextensions.js:1:23:1:25 | x+1 |
| mozextensions.js:1:23:1:25 | x+1 | 0 | mozextensions.js:1:23:1:23 | x |
| mozextensions.js:1:23:1:25 | x+1 | 1 | mozextensions.js:1:25:1:25 | 1 |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | 0 | nullSensitiveContexts.js:7:1:7:3 | foo |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | 1 | nullSensitiveContexts.js:7:5:7:7 | bar |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | 0 | nullSensitiveContexts.js:8:1:8:3 | foo |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | 1 | nullSensitiveContexts.js:8:5:8:7 | bar |
| nullSensitiveContexts.js:9:1:9:7 | new Foo | -1 | nullSensitiveContexts.js:9:5:9:7 | Foo |
| nullSensitiveContexts.js:10:1:10:9 | new Foo() | -1 | nullSensitiveContexts.js:10:5:10:7 | Foo |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | 0 | nullSensitiveContexts.js:11:1:11:3 | foo |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | 1 | nullSensitiveContexts.js:11:5:11:7 | bar |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | 0 | nullSensitiveContexts.js:11:1:11:7 | foo.bar |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | 1 | nullSensitiveContexts.js:11:11:11:11 | 5 |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | 0 | nullSensitiveContexts.js:12:5:12:7 | bar |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | -1 | nullSensitiveContexts.js:12:1:12:3 | foo |
| nullSensitiveContexts.js:13:1:13:5 | x + y | 0 | nullSensitiveContexts.js:13:1:13:1 | x |
| nullSensitiveContexts.js:13:1:13:5 | x + y | 1 | nullSensitiveContexts.js:13:5:13:5 | y |
| nullSensitiveContexts.js:14:1:14:5 | x - y | 0 | nullSensitiveContexts.js:14:1:14:1 | x |
| nullSensitiveContexts.js:14:1:14:5 | x - y | 1 | nullSensitiveContexts.js:14:5:14:5 | y |
| nullSensitiveContexts.js:15:1:15:5 | x * y | 0 | nullSensitiveContexts.js:15:1:15:1 | x |
| nullSensitiveContexts.js:15:1:15:5 | x * y | 1 | nullSensitiveContexts.js:15:5:15:5 | y |
| nullSensitiveContexts.js:16:1:16:5 | x / y | 0 | nullSensitiveContexts.js:16:1:16:1 | x |
| nullSensitiveContexts.js:16:1:16:5 | x / y | 1 | nullSensitiveContexts.js:16:5:16:5 | y |
| nullSensitiveContexts.js:17:1:17:5 | x % y | 0 | nullSensitiveContexts.js:17:1:17:1 | x |
| nullSensitiveContexts.js:17:1:17:5 | x % y | 1 | nullSensitiveContexts.js:17:5:17:5 | y |
| nullSensitiveContexts.js:18:1:18:2 | +x | 0 | nullSensitiveContexts.js:18:2:18:2 | x |
| nullSensitiveContexts.js:19:1:19:2 | -x | 0 | nullSensitiveContexts.js:19:2:19:2 | x |
| nullSensitiveContexts.js:20:1:20:3 | ++x | 0 | nullSensitiveContexts.js:20:3:20:3 | x |
| nullSensitiveContexts.js:21:1:21:3 | x++ | 0 | nullSensitiveContexts.js:21:1:21:1 | x |
| nullSensitiveContexts.js:22:1:22:3 | --x | 0 | nullSensitiveContexts.js:22:3:22:3 | x |
| nullSensitiveContexts.js:23:1:23:3 | x-- | 0 | nullSensitiveContexts.js:23:1:23:1 | x |
| nullSensitiveContexts.js:24:1:24:6 | x += y | 0 | nullSensitiveContexts.js:24:1:24:1 | x |
| nullSensitiveContexts.js:24:1:24:6 | x += y | 1 | nullSensitiveContexts.js:24:6:24:6 | y |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | 0 | nullSensitiveContexts.js:25:1:25:1 | x |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | 1 | nullSensitiveContexts.js:25:6:25:6 | y |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | 0 | nullSensitiveContexts.js:26:1:26:1 | x |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | 1 | nullSensitiveContexts.js:26:6:26:6 | y |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | 0 | nullSensitiveContexts.js:27:1:27:1 | x |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | 1 | nullSensitiveContexts.js:27:6:27:6 | y |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | 0 | nullSensitiveContexts.js:28:1:28:1 | x |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | 1 | nullSensitiveContexts.js:28:6:28:6 | y |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | 0 | nullSensitiveContexts.js:29:2:29:2 | x |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | 1 | nullSensitiveContexts.js:29:6:29:6 | y |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | 0 | nullSensitiveContexts.js:29:1:29:7 | [x , y] |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | 1 | nullSensitiveContexts.js:29:11:29:11 | p |
| nullSensitiveContexts.js:31:1:31:5 | x & y | 0 | nullSensitiveContexts.js:31:1:31:1 | x |
| nullSensitiveContexts.js:31:1:31:5 | x & y | 1 | nullSensitiveContexts.js:31:5:31:5 | y |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | 0 | nullSensitiveContexts.js:32:1:32:1 | x |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | 1 | nullSensitiveContexts.js:32:5:32:5 | y |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | 0 | nullSensitiveContexts.js:33:1:33:1 | x |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | 1 | nullSensitiveContexts.js:33:5:33:5 | y |
| nullSensitiveContexts.js:34:1:34:6 | x << y | 0 | nullSensitiveContexts.js:34:1:34:1 | x |
| nullSensitiveContexts.js:34:1:34:6 | x << y | 1 | nullSensitiveContexts.js:34:6:34:6 | y |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | 0 | nullSensitiveContexts.js:35:1:35:1 | x |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | 1 | nullSensitiveContexts.js:35:6:35:6 | y |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | 0 | nullSensitiveContexts.js:36:1:36:1 | x |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | 1 | nullSensitiveContexts.js:36:7:36:7 | y |
| nullSensitiveContexts.js:37:1:37:2 | ~x | 0 | nullSensitiveContexts.js:37:2:37:2 | x |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | 0 | nullSensitiveContexts.js:38:1:38:1 | x |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | 1 | nullSensitiveContexts.js:38:6:38:6 | y |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | 0 | nullSensitiveContexts.js:39:1:39:1 | x |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | 1 | nullSensitiveContexts.js:39:6:39:6 | y |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | 0 | nullSensitiveContexts.js:40:1:40:1 | x |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | 1 | nullSensitiveContexts.js:40:6:40:6 | y |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | 0 | nullSensitiveContexts.js:41:1:41:1 | x |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | 1 | nullSensitiveContexts.js:41:7:41:7 | y |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | 0 | nullSensitiveContexts.js:42:1:42:1 | x |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | 1 | nullSensitiveContexts.js:42:7:42:7 | y |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | 0 | nullSensitiveContexts.js:43:1:43:1 | x |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | 1 | nullSensitiveContexts.js:43:8:43:8 | y |
| nullSensitiveContexts.js:44:10:44:10 | x | 0 | nullSensitiveContexts.js:44:10:44:10 | x |
| nullSensitiveContexts.js:54:1:54:6 | x && y | 0 | nullSensitiveContexts.js:54:1:54:1 | x |
| nullSensitiveContexts.js:54:1:54:6 | x && y | 1 | nullSensitiveContexts.js:54:6:54:6 | y |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | 0 | nullSensitiveContexts.js:55:1:55:1 | x |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | 1 | nullSensitiveContexts.js:55:6:55:6 | y |
| nullSensitiveContexts.js:56:1:56:2 | !x | 0 | nullSensitiveContexts.js:56:2:56:2 | x |
| nullSensitiveContexts.js:60:10:60:10 | x | 0 | nullSensitiveContexts.js:60:10:60:10 | x |
| others.js:1:1:1:6 | 23, 42 | 0 | others.js:1:1:1:2 | 23 |
| others.js:1:1:1:6 | 23, 42 | 1 | others.js:1:5:1:6 | 42 |
| others.js:2:1:2:10 | 23, 42, 56 | 0 | others.js:2:1:2:2 | 23 |
@@ -1050,6 +1366,105 @@ test_isPure
| mozextensions.js:1:23:1:23 | x |
| mozextensions.js:1:23:1:25 | x+1 |
| mozextensions.js:1:25:1:25 | 1 |
| nullSensitiveContexts.js:7:1:7:3 | foo |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] |
| nullSensitiveContexts.js:7:5:7:7 | bar |
| nullSensitiveContexts.js:8:1:8:3 | foo |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar |
| nullSensitiveContexts.js:8:5:8:7 | bar |
| nullSensitiveContexts.js:9:5:9:7 | Foo |
| nullSensitiveContexts.js:10:5:10:7 | Foo |
| nullSensitiveContexts.js:11:1:11:3 | foo |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar |
| nullSensitiveContexts.js:11:5:11:7 | bar |
| nullSensitiveContexts.js:11:11:11:11 | 5 |
| nullSensitiveContexts.js:12:1:12:3 | foo |
| nullSensitiveContexts.js:12:5:12:7 | bar |
| nullSensitiveContexts.js:13:1:13:1 | x |
| nullSensitiveContexts.js:13:1:13:5 | x + y |
| nullSensitiveContexts.js:13:5:13:5 | y |
| nullSensitiveContexts.js:14:1:14:1 | x |
| nullSensitiveContexts.js:14:1:14:5 | x - y |
| nullSensitiveContexts.js:14:5:14:5 | y |
| nullSensitiveContexts.js:15:1:15:1 | x |
| nullSensitiveContexts.js:15:1:15:5 | x * y |
| nullSensitiveContexts.js:15:5:15:5 | y |
| nullSensitiveContexts.js:16:1:16:1 | x |
| nullSensitiveContexts.js:16:1:16:5 | x / y |
| nullSensitiveContexts.js:16:5:16:5 | y |
| nullSensitiveContexts.js:17:1:17:1 | x |
| nullSensitiveContexts.js:17:1:17:5 | x % y |
| nullSensitiveContexts.js:17:5:17:5 | y |
| nullSensitiveContexts.js:18:1:18:2 | +x |
| nullSensitiveContexts.js:18:2:18:2 | x |
| nullSensitiveContexts.js:19:1:19:2 | -x |
| nullSensitiveContexts.js:19:2:19:2 | x |
| nullSensitiveContexts.js:20:3:20:3 | x |
| nullSensitiveContexts.js:21:1:21:1 | x |
| nullSensitiveContexts.js:22:3:22:3 | x |
| nullSensitiveContexts.js:23:1:23:1 | x |
| nullSensitiveContexts.js:24:1:24:1 | x |
| nullSensitiveContexts.js:24:6:24:6 | y |
| nullSensitiveContexts.js:25:1:25:1 | x |
| nullSensitiveContexts.js:25:6:25:6 | y |
| nullSensitiveContexts.js:26:1:26:1 | x |
| nullSensitiveContexts.js:26:6:26:6 | y |
| nullSensitiveContexts.js:27:1:27:1 | x |
| nullSensitiveContexts.js:27:6:27:6 | y |
| nullSensitiveContexts.js:28:1:28:1 | x |
| nullSensitiveContexts.js:28:6:28:6 | y |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] |
| nullSensitiveContexts.js:29:2:29:2 | x |
| nullSensitiveContexts.js:29:6:29:6 | y |
| nullSensitiveContexts.js:29:11:29:11 | p |
| nullSensitiveContexts.js:31:1:31:1 | x |
| nullSensitiveContexts.js:31:1:31:5 | x & y |
| nullSensitiveContexts.js:31:5:31:5 | y |
| nullSensitiveContexts.js:32:1:32:1 | x |
| nullSensitiveContexts.js:32:1:32:5 | x \| y |
| nullSensitiveContexts.js:32:5:32:5 | y |
| nullSensitiveContexts.js:33:1:33:1 | x |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y |
| nullSensitiveContexts.js:33:5:33:5 | y |
| nullSensitiveContexts.js:34:1:34:1 | x |
| nullSensitiveContexts.js:34:1:34:6 | x << y |
| nullSensitiveContexts.js:34:6:34:6 | y |
| nullSensitiveContexts.js:35:1:35:1 | x |
| nullSensitiveContexts.js:35:1:35:6 | x >> y |
| nullSensitiveContexts.js:35:6:35:6 | y |
| nullSensitiveContexts.js:36:1:36:1 | x |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y |
| nullSensitiveContexts.js:36:7:36:7 | y |
| nullSensitiveContexts.js:37:1:37:2 | ~x |
| nullSensitiveContexts.js:37:2:37:2 | x |
| nullSensitiveContexts.js:38:1:38:1 | x |
| nullSensitiveContexts.js:38:6:38:6 | y |
| nullSensitiveContexts.js:39:1:39:1 | x |
| nullSensitiveContexts.js:39:6:39:6 | y |
| nullSensitiveContexts.js:40:1:40:1 | x |
| nullSensitiveContexts.js:40:6:40:6 | y |
| nullSensitiveContexts.js:41:1:41:1 | x |
| nullSensitiveContexts.js:41:7:41:7 | y |
| nullSensitiveContexts.js:42:1:42:1 | x |
| nullSensitiveContexts.js:42:7:42:7 | y |
| nullSensitiveContexts.js:43:1:43:1 | x |
| nullSensitiveContexts.js:43:8:43:8 | y |
| nullSensitiveContexts.js:44:10:44:10 | x |
| nullSensitiveContexts.js:44:15:44:15 | y |
| nullSensitiveContexts.js:54:1:54:1 | x |
| nullSensitiveContexts.js:54:1:54:6 | x && y |
| nullSensitiveContexts.js:54:6:54:6 | y |
| nullSensitiveContexts.js:55:1:55:1 | x |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y |
| nullSensitiveContexts.js:55:6:55:6 | y |
| nullSensitiveContexts.js:56:1:56:2 | !x |
| nullSensitiveContexts.js:56:2:56:2 | x |
| nullSensitiveContexts.js:57:5:57:5 | x |
| nullSensitiveContexts.js:58:8:58:8 | x |
| nullSensitiveContexts.js:59:8:59:8 | y |
| nullSensitiveContexts.js:59:11:59:11 | z |
| nullSensitiveContexts.js:60:10:60:10 | x |
| nullSensitiveContexts.js:60:15:60:15 | y |
| others.js:1:1:1:2 | 23 |
| others.js:1:1:1:6 | 23, 42 |
| others.js:1:5:1:6 | 42 |
@@ -1460,6 +1875,127 @@ test_getContainer
| mozextensions.js:1:23:1:23 | x | mozextensions.js:1:11:1:25 | function(x) x+1 |
| mozextensions.js:1:23:1:25 | x+1 | mozextensions.js:1:11:1:25 | function(x) x+1 |
| mozextensions.js:1:25:1:25 | 1 | mozextensions.js:1:11:1:25 | function(x) x+1 |
| nullSensitiveContexts.js:7:1:7:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:7:5:7:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:1:8:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:8:5:8:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:9:1:9:7 | new Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:9:5:9:7 | Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:10:1:10:9 | new Foo() | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:10:5:10:7 | Foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:5:11:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:11:11:11:11 | 5 | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:1:12:3 | foo | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:12:5:12:7 | bar | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:1:13:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:1:13:5 | x + y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:13:5:13:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:1:14:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:1:14:5 | x - y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:14:5:14:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:1:15:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:1:15:5 | x * y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:15:5:15:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:1:16:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:1:16:5 | x / y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:16:5:16:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:1:17:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:1:17:5 | x % y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:17:5:17:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:18:1:18:2 | +x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:18:2:18:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:19:1:19:2 | -x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:19:2:19:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:20:1:20:3 | ++x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:20:3:20:3 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:21:1:21:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:21:1:21:3 | x++ | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:22:1:22:3 | --x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:22:3:22:3 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:23:1:23:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:23:1:23:3 | x-- | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:1:24:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:1:24:6 | x += y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:24:6:24:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:1:25:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:25:6:25:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:1:26:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:26:6:26:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:1:27:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:27:6:27:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:1:28:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:28:6:28:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:2:29:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:6:29:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:29:11:29:11 | p | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:1:31:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:1:31:5 | x & y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:31:5:31:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:1:32:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:32:5:32:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:1:33:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:33:5:33:5 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:1:34:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:1:34:6 | x << y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:34:6:34:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:1:35:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:35:6:35:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:1:36:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:36:7:36:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:37:1:37:2 | ~x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:37:2:37:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:1:38:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:38:6:38:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:1:39:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:39:6:39:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:1:40:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:40:6:40:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:1:41:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:41:7:41:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:1:42:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:42:7:42:7 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:1:43:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:43:8:43:8 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:44:15:44:15 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:1:54:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:1:54:6 | x && y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:54:6:54:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:1:55:1 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:55:6:55:6 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:56:1:56:2 | !x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:56:2:56:2 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:57:5:57:5 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:58:8:58:8 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:59:8:59:8 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:59:11:59:11 | z | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| nullSensitiveContexts.js:60:15:60:15 | y | nullSensitiveContexts.js:1:1:61:0 | <toplevel> |
| others.js:1:1:1:2 | 23 | others.js:1:1:5:2 | <toplevel> |
| others.js:1:1:1:6 | 23, 42 | others.js:1:1:5:2 | <toplevel> |
| others.js:1:5:1:6 | 42 | others.js:1:1:5:2 | <toplevel> |
@@ -1763,6 +2299,127 @@ test_getEnclosingStmt
| mozextensions.js:1:1:1:26 | array.m ... x) x+1) | mozextensions.js:1:1:1:27 | array.m ... ) x+1); |
| mozextensions.js:1:7:1:9 | map | mozextensions.js:1:1:1:27 | array.m ... ) x+1); |
| mozextensions.js:1:11:1:25 | function(x) x+1 | mozextensions.js:1:1:1:27 | array.m ... ) x+1); |
| nullSensitiveContexts.js:7:1:7:3 | foo | nullSensitiveContexts.js:7:1:7:9 | foo[bar]; |
| nullSensitiveContexts.js:7:1:7:8 | foo[bar] | nullSensitiveContexts.js:7:1:7:9 | foo[bar]; |
| nullSensitiveContexts.js:7:5:7:7 | bar | nullSensitiveContexts.js:7:1:7:9 | foo[bar]; |
| nullSensitiveContexts.js:8:1:8:3 | foo | nullSensitiveContexts.js:8:1:8:8 | foo.bar; |
| nullSensitiveContexts.js:8:1:8:7 | foo.bar | nullSensitiveContexts.js:8:1:8:8 | foo.bar; |
| nullSensitiveContexts.js:8:5:8:7 | bar | nullSensitiveContexts.js:8:1:8:8 | foo.bar; |
| nullSensitiveContexts.js:9:1:9:7 | new Foo | nullSensitiveContexts.js:9:1:9:8 | new Foo; |
| nullSensitiveContexts.js:9:5:9:7 | Foo | nullSensitiveContexts.js:9:1:9:8 | new Foo; |
| nullSensitiveContexts.js:10:1:10:9 | new Foo() | nullSensitiveContexts.js:10:1:10:10 | new Foo(); |
| nullSensitiveContexts.js:10:5:10:7 | Foo | nullSensitiveContexts.js:10:1:10:10 | new Foo(); |
| nullSensitiveContexts.js:11:1:11:3 | foo | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:11:1:11:7 | foo.bar | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:11:1:11:11 | foo.bar = 5 | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:11:5:11:7 | bar | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:11:11:11:11 | 5 | nullSensitiveContexts.js:11:1:11:12 | foo.bar = 5; |
| nullSensitiveContexts.js:12:1:12:3 | foo | nullSensitiveContexts.js:12:1:12:9 | foo(bar); |
| nullSensitiveContexts.js:12:1:12:8 | foo(bar) | nullSensitiveContexts.js:12:1:12:9 | foo(bar); |
| nullSensitiveContexts.js:12:5:12:7 | bar | nullSensitiveContexts.js:12:1:12:9 | foo(bar); |
| nullSensitiveContexts.js:13:1:13:1 | x | nullSensitiveContexts.js:13:1:13:6 | x + y; |
| nullSensitiveContexts.js:13:1:13:5 | x + y | nullSensitiveContexts.js:13:1:13:6 | x + y; |
| nullSensitiveContexts.js:13:5:13:5 | y | nullSensitiveContexts.js:13:1:13:6 | x + y; |
| nullSensitiveContexts.js:14:1:14:1 | x | nullSensitiveContexts.js:14:1:14:6 | x - y; |
| nullSensitiveContexts.js:14:1:14:5 | x - y | nullSensitiveContexts.js:14:1:14:6 | x - y; |
| nullSensitiveContexts.js:14:5:14:5 | y | nullSensitiveContexts.js:14:1:14:6 | x - y; |
| nullSensitiveContexts.js:15:1:15:1 | x | nullSensitiveContexts.js:15:1:15:6 | x * y; |
| nullSensitiveContexts.js:15:1:15:5 | x * y | nullSensitiveContexts.js:15:1:15:6 | x * y; |
| nullSensitiveContexts.js:15:5:15:5 | y | nullSensitiveContexts.js:15:1:15:6 | x * y; |
| nullSensitiveContexts.js:16:1:16:1 | x | nullSensitiveContexts.js:16:1:16:6 | x / y; |
| nullSensitiveContexts.js:16:1:16:5 | x / y | nullSensitiveContexts.js:16:1:16:6 | x / y; |
| nullSensitiveContexts.js:16:5:16:5 | y | nullSensitiveContexts.js:16:1:16:6 | x / y; |
| nullSensitiveContexts.js:17:1:17:1 | x | nullSensitiveContexts.js:17:1:17:6 | x % y; |
| nullSensitiveContexts.js:17:1:17:5 | x % y | nullSensitiveContexts.js:17:1:17:6 | x % y; |
| nullSensitiveContexts.js:17:5:17:5 | y | nullSensitiveContexts.js:17:1:17:6 | x % y; |
| nullSensitiveContexts.js:18:1:18:2 | +x | nullSensitiveContexts.js:18:1:18:3 | +x; |
| nullSensitiveContexts.js:18:2:18:2 | x | nullSensitiveContexts.js:18:1:18:3 | +x; |
| nullSensitiveContexts.js:19:1:19:2 | -x | nullSensitiveContexts.js:19:1:19:3 | -x; |
| nullSensitiveContexts.js:19:2:19:2 | x | nullSensitiveContexts.js:19:1:19:3 | -x; |
| nullSensitiveContexts.js:20:1:20:3 | ++x | nullSensitiveContexts.js:20:1:20:4 | ++x; |
| nullSensitiveContexts.js:20:3:20:3 | x | nullSensitiveContexts.js:20:1:20:4 | ++x; |
| nullSensitiveContexts.js:21:1:21:1 | x | nullSensitiveContexts.js:21:1:21:4 | x++; |
| nullSensitiveContexts.js:21:1:21:3 | x++ | nullSensitiveContexts.js:21:1:21:4 | x++; |
| nullSensitiveContexts.js:22:1:22:3 | --x | nullSensitiveContexts.js:22:1:22:4 | --x; |
| nullSensitiveContexts.js:22:3:22:3 | x | nullSensitiveContexts.js:22:1:22:4 | --x; |
| nullSensitiveContexts.js:23:1:23:1 | x | nullSensitiveContexts.js:23:1:23:4 | x--; |
| nullSensitiveContexts.js:23:1:23:3 | x-- | nullSensitiveContexts.js:23:1:23:4 | x--; |
| nullSensitiveContexts.js:24:1:24:1 | x | nullSensitiveContexts.js:24:1:24:7 | x += y; |
| nullSensitiveContexts.js:24:1:24:6 | x += y | nullSensitiveContexts.js:24:1:24:7 | x += y; |
| nullSensitiveContexts.js:24:6:24:6 | y | nullSensitiveContexts.js:24:1:24:7 | x += y; |
| nullSensitiveContexts.js:25:1:25:1 | x | nullSensitiveContexts.js:25:1:25:7 | x -= y; |
| nullSensitiveContexts.js:25:1:25:6 | x -= y | nullSensitiveContexts.js:25:1:25:7 | x -= y; |
| nullSensitiveContexts.js:25:6:25:6 | y | nullSensitiveContexts.js:25:1:25:7 | x -= y; |
| nullSensitiveContexts.js:26:1:26:1 | x | nullSensitiveContexts.js:26:1:26:7 | x *= y; |
| nullSensitiveContexts.js:26:1:26:6 | x *= y | nullSensitiveContexts.js:26:1:26:7 | x *= y; |
| nullSensitiveContexts.js:26:6:26:6 | y | nullSensitiveContexts.js:26:1:26:7 | x *= y; |
| nullSensitiveContexts.js:27:1:27:1 | x | nullSensitiveContexts.js:27:1:27:7 | x /= y; |
| nullSensitiveContexts.js:27:1:27:6 | x /= y | nullSensitiveContexts.js:27:1:27:7 | x /= y; |
| nullSensitiveContexts.js:27:6:27:6 | y | nullSensitiveContexts.js:27:1:27:7 | x /= y; |
| nullSensitiveContexts.js:28:1:28:1 | x | nullSensitiveContexts.js:28:1:28:7 | x %= y; |
| nullSensitiveContexts.js:28:1:28:6 | x %= y | nullSensitiveContexts.js:28:1:28:7 | x %= y; |
| nullSensitiveContexts.js:28:6:28:6 | y | nullSensitiveContexts.js:28:1:28:7 | x %= y; |
| nullSensitiveContexts.js:29:1:29:7 | [x , y] | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:29:1:29:11 | [x , y] = p | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:29:2:29:2 | x | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:29:6:29:6 | y | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:29:11:29:11 | p | nullSensitiveContexts.js:29:1:29:12 | [x , y] = p; |
| nullSensitiveContexts.js:31:1:31:1 | x | nullSensitiveContexts.js:31:1:31:6 | x & y; |
| nullSensitiveContexts.js:31:1:31:5 | x & y | nullSensitiveContexts.js:31:1:31:6 | x & y; |
| nullSensitiveContexts.js:31:5:31:5 | y | nullSensitiveContexts.js:31:1:31:6 | x & y; |
| nullSensitiveContexts.js:32:1:32:1 | x | nullSensitiveContexts.js:32:1:32:6 | x \| y; |
| nullSensitiveContexts.js:32:1:32:5 | x \| y | nullSensitiveContexts.js:32:1:32:6 | x \| y; |
| nullSensitiveContexts.js:32:5:32:5 | y | nullSensitiveContexts.js:32:1:32:6 | x \| y; |
| nullSensitiveContexts.js:33:1:33:1 | x | nullSensitiveContexts.js:33:1:33:6 | x ^ y; |
| nullSensitiveContexts.js:33:1:33:5 | x ^ y | nullSensitiveContexts.js:33:1:33:6 | x ^ y; |
| nullSensitiveContexts.js:33:5:33:5 | y | nullSensitiveContexts.js:33:1:33:6 | x ^ y; |
| nullSensitiveContexts.js:34:1:34:1 | x | nullSensitiveContexts.js:34:1:34:7 | x << y; |
| nullSensitiveContexts.js:34:1:34:6 | x << y | nullSensitiveContexts.js:34:1:34:7 | x << y; |
| nullSensitiveContexts.js:34:6:34:6 | y | nullSensitiveContexts.js:34:1:34:7 | x << y; |
| nullSensitiveContexts.js:35:1:35:1 | x | nullSensitiveContexts.js:35:1:35:7 | x >> y; |
| nullSensitiveContexts.js:35:1:35:6 | x >> y | nullSensitiveContexts.js:35:1:35:7 | x >> y; |
| nullSensitiveContexts.js:35:6:35:6 | y | nullSensitiveContexts.js:35:1:35:7 | x >> y; |
| nullSensitiveContexts.js:36:1:36:1 | x | nullSensitiveContexts.js:36:1:36:8 | x >>> y; |
| nullSensitiveContexts.js:36:1:36:7 | x >>> y | nullSensitiveContexts.js:36:1:36:8 | x >>> y; |
| nullSensitiveContexts.js:36:7:36:7 | y | nullSensitiveContexts.js:36:1:36:8 | x >>> y; |
| nullSensitiveContexts.js:37:1:37:2 | ~x | nullSensitiveContexts.js:37:1:37:3 | ~x; |
| nullSensitiveContexts.js:37:2:37:2 | x | nullSensitiveContexts.js:37:1:37:3 | ~x; |
| nullSensitiveContexts.js:38:1:38:1 | x | nullSensitiveContexts.js:38:1:38:7 | x &= y; |
| nullSensitiveContexts.js:38:1:38:6 | x &= y | nullSensitiveContexts.js:38:1:38:7 | x &= y; |
| nullSensitiveContexts.js:38:6:38:6 | y | nullSensitiveContexts.js:38:1:38:7 | x &= y; |
| nullSensitiveContexts.js:39:1:39:1 | x | nullSensitiveContexts.js:39:1:39:7 | x \|= y; |
| nullSensitiveContexts.js:39:1:39:6 | x \|= y | nullSensitiveContexts.js:39:1:39:7 | x \|= y; |
| nullSensitiveContexts.js:39:6:39:6 | y | nullSensitiveContexts.js:39:1:39:7 | x \|= y; |
| nullSensitiveContexts.js:40:1:40:1 | x | nullSensitiveContexts.js:40:1:40:7 | x ^= y; |
| nullSensitiveContexts.js:40:1:40:6 | x ^= y | nullSensitiveContexts.js:40:1:40:7 | x ^= y; |
| nullSensitiveContexts.js:40:6:40:6 | y | nullSensitiveContexts.js:40:1:40:7 | x ^= y; |
| nullSensitiveContexts.js:41:1:41:1 | x | nullSensitiveContexts.js:41:1:41:8 | x <<= y; |
| nullSensitiveContexts.js:41:1:41:7 | x <<= y | nullSensitiveContexts.js:41:1:41:8 | x <<= y; |
| nullSensitiveContexts.js:41:7:41:7 | y | nullSensitiveContexts.js:41:1:41:8 | x <<= y; |
| nullSensitiveContexts.js:42:1:42:1 | x | nullSensitiveContexts.js:42:1:42:8 | x >>= y; |
| nullSensitiveContexts.js:42:1:42:7 | x >>= y | nullSensitiveContexts.js:42:1:42:8 | x >>= y; |
| nullSensitiveContexts.js:42:7:42:7 | y | nullSensitiveContexts.js:42:1:42:8 | x >>= y; |
| nullSensitiveContexts.js:43:1:43:1 | x | nullSensitiveContexts.js:43:1:43:9 | x >>>= y; |
| nullSensitiveContexts.js:43:1:43:8 | x >>>= y | nullSensitiveContexts.js:43:1:43:9 | x >>>= y; |
| nullSensitiveContexts.js:43:8:43:8 | y | nullSensitiveContexts.js:43:1:43:9 | x >>>= y; |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:44:6:44:10 | let x |
| nullSensitiveContexts.js:44:10:44:10 | x | nullSensitiveContexts.js:44:6:44:10 | let x |
| nullSensitiveContexts.js:44:15:44:15 | y | nullSensitiveContexts.js:44:1:44:20 | for (let x of y) { } |
| nullSensitiveContexts.js:54:1:54:1 | x | nullSensitiveContexts.js:54:1:54:7 | x && y; |
| nullSensitiveContexts.js:54:1:54:6 | x && y | nullSensitiveContexts.js:54:1:54:7 | x && y; |
| nullSensitiveContexts.js:54:6:54:6 | y | nullSensitiveContexts.js:54:1:54:7 | x && y; |
| nullSensitiveContexts.js:55:1:55:1 | x | nullSensitiveContexts.js:55:1:55:7 | x \|\| y; |
| nullSensitiveContexts.js:55:1:55:6 | x \|\| y | nullSensitiveContexts.js:55:1:55:7 | x \|\| y; |
| nullSensitiveContexts.js:55:6:55:6 | y | nullSensitiveContexts.js:55:1:55:7 | x \|\| y; |
| nullSensitiveContexts.js:56:1:56:2 | !x | nullSensitiveContexts.js:56:1:56:3 | !x; |
| nullSensitiveContexts.js:56:2:56:2 | x | nullSensitiveContexts.js:56:1:56:3 | !x; |
| nullSensitiveContexts.js:57:5:57:5 | x | nullSensitiveContexts.js:57:1:57:10 | if (x) { } |
| nullSensitiveContexts.js:58:8:58:8 | x | nullSensitiveContexts.js:58:1:58:13 | while (x) { } |
| nullSensitiveContexts.js:59:8:59:8 | y | nullSensitiveContexts.js:59:1:59:16 | for (; y; z) { } |
| nullSensitiveContexts.js:59:11:59:11 | z | nullSensitiveContexts.js:59:1:59:16 | for (; y; z) { } |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:60:6:60:10 | let x |
| nullSensitiveContexts.js:60:10:60:10 | x | nullSensitiveContexts.js:60:6:60:10 | let x |
| nullSensitiveContexts.js:60:15:60:15 | y | nullSensitiveContexts.js:60:1:60:20 | for (let x in y) { } |
| others.js:1:1:1:2 | 23 | others.js:1:1:1:7 | 23, 42; |
| others.js:1:1:1:6 | 23, 42 | others.js:1:1:1:7 | 23, 42; |
| others.js:1:5:1:6 | 42 | others.js:1:1:1:7 | 23, 42; |
@@ -1872,3 +2529,168 @@ test_getEnclosingStmt
| update.js:3:3:3:3 | b | update.js:3:1:3:4 | --b; |
| update.js:4:1:4:1 | b | update.js:4:1:4:4 | b--; |
| update.js:4:1:4:3 | b-- | update.js:4:1:4:4 | b--; |
test_inNullSensitiveContext
| assignment.js:2:1:2:1 | a |
| assignment.js:2:6:2:7 | 19 |
| assignment.js:3:1:3:1 | a |
| assignment.js:3:6:3:6 | 9 |
| assignment.js:4:1:4:1 | a |
| assignment.js:4:6:4:6 | b |
| assignment.js:5:1:5:1 | a |
| assignment.js:5:6:5:6 | 2 |
| assignment.js:6:1:6:1 | a |
| assignment.js:6:6:6:6 | 2 |
| assignment.js:7:1:7:1 | a |
| assignment.js:7:7:7:7 | 8 |
| assignment.js:8:1:8:1 | a |
| assignment.js:8:7:8:7 | 7 |
| assignment.js:9:1:9:1 | a |
| assignment.js:9:8:9:8 | 2 |
| assignment.js:10:1:10:1 | a |
| assignment.js:10:6:10:6 | 2 |
| assignment.js:11:1:11:1 | a |
| assignment.js:11:6:11:6 | 1 |
| assignment.js:12:1:12:1 | a |
| assignment.js:12:6:12:6 | 3 |
| binary.js:1:1:1:1 | 1 |
| binary.js:1:6:1:6 | 2 |
| binary.js:2:1:2:1 | 2 |
| binary.js:2:6:2:6 | 1 |
| binary.js:3:1:3:1 | 2 |
| binary.js:3:7:3:7 | 1 |
| binary.js:4:1:4:2 | 23 |
| binary.js:4:6:4:7 | 19 |
| binary.js:5:1:5:2 | 42 |
| binary.js:5:6:5:7 | 19 |
| binary.js:6:1:6:1 | 2 |
| binary.js:6:5:6:5 | 3 |
| binary.js:7:1:7:1 | 8 |
| binary.js:7:5:7:5 | 5 |
| binary.js:8:1:8:1 | 2 |
| binary.js:8:5:8:5 | 1 |
| binary.js:9:1:9:1 | 2 |
| binary.js:9:5:9:5 | 3 |
| binary.js:10:1:10:1 | 2 |
| binary.js:10:5:10:5 | 3 |
| binary.js:11:1:11:1 | 2 |
| binary.js:11:5:11:5 | 3 |
| binary.js:12:1:12:11 | 'prototype' |
| binary.js:12:16:12:21 | Object |
| binary.js:13:1:13:2 | [] |
| binary.js:13:15:13:19 | Array |
| comparison.js:5:1:5:1 | 1 |
| comparison.js:5:5:5:5 | 2 |
| comparison.js:6:1:6:1 | 1 |
| comparison.js:6:6:6:6 | 2 |
| comparison.js:7:1:7:1 | 2 |
| comparison.js:7:5:7:5 | 1 |
| comparison.js:8:1:8:1 | 2 |
| comparison.js:8:6:8:6 | 1 |
| es2015.js:1:1:1:18 | ["a", "ab", "abc"] |
| es2015.js:1:1:1:22 | ["a", " ... c"].map |
| es2015.js:1:29:1:29 | s |
| es2015.js:2:1:2:11 | setInterval |
| es2015.js:2:21:2:23 | cnt |
| es2015.js:3:1:3:10 | setTimeout |
| es2015.js:3:20:3:24 | alert |
| es2015.js:5:8:5:9 | as |
| es2015.js:6:5:6:9 | Array |
| es2015.js:6:14:6:17 | elts |
| es2015.js:13:3:13:9 | console |
| es2015.js:13:3:13:13 | console.log |
| es2015.js:23:8:23:8 | n |
| es2015.js:23:8:23:10 | n-- |
| es2015.js:23:12:23:12 | 0 |
| es2015.js:25:9:25:11 | foo |
| es2015.js:28:19:28:19 | x |
| es2015.js:28:21:28:22 | 19 |
| functions.js:4:3:6:4 | (functi ... f;\\n\\t\\t}) |
| functions.js:4:4:6:3 | functio ... _f;\\n\\t\\t} |
| legacyletexpr.js:1:1:1:7 | console |
| legacyletexpr.js:1:1:1:11 | console.log |
| legacyletexpr.js:1:34:1:34 | x |
| legacyletexpr.js:1:38:1:38 | y |
| mozextensions.js:1:1:1:5 | array |
| mozextensions.js:1:1:1:9 | array.map |
| mozextensions.js:1:23:1:23 | x |
| mozextensions.js:1:25:1:25 | 1 |
| nullSensitiveContexts.js:7:1:7:3 | foo |
| nullSensitiveContexts.js:7:5:7:7 | bar |
| nullSensitiveContexts.js:8:1:8:3 | foo |
| nullSensitiveContexts.js:9:5:9:7 | Foo |
| nullSensitiveContexts.js:10:5:10:7 | Foo |
| nullSensitiveContexts.js:11:1:11:3 | foo |
| nullSensitiveContexts.js:12:1:12:3 | foo |
| nullSensitiveContexts.js:13:1:13:1 | x |
| nullSensitiveContexts.js:13:5:13:5 | y |
| nullSensitiveContexts.js:14:1:14:1 | x |
| nullSensitiveContexts.js:14:5:14:5 | y |
| nullSensitiveContexts.js:15:1:15:1 | x |
| nullSensitiveContexts.js:15:5:15:5 | y |
| nullSensitiveContexts.js:16:1:16:1 | x |
| nullSensitiveContexts.js:16:5:16:5 | y |
| nullSensitiveContexts.js:17:1:17:1 | x |
| nullSensitiveContexts.js:17:5:17:5 | y |
| nullSensitiveContexts.js:19:2:19:2 | x |
| nullSensitiveContexts.js:20:3:20:3 | x |
| nullSensitiveContexts.js:21:1:21:1 | x |
| nullSensitiveContexts.js:22:3:22:3 | x |
| nullSensitiveContexts.js:23:1:23:1 | x |
| nullSensitiveContexts.js:24:1:24:1 | x |
| nullSensitiveContexts.js:24:6:24:6 | y |
| nullSensitiveContexts.js:25:1:25:1 | x |
| nullSensitiveContexts.js:25:6:25:6 | y |
| nullSensitiveContexts.js:26:1:26:1 | x |
| nullSensitiveContexts.js:26:6:26:6 | y |
| nullSensitiveContexts.js:27:1:27:1 | x |
| nullSensitiveContexts.js:27:6:27:6 | y |
| nullSensitiveContexts.js:28:1:28:1 | x |
| nullSensitiveContexts.js:28:6:28:6 | y |
| nullSensitiveContexts.js:29:11:29:11 | p |
| nullSensitiveContexts.js:31:1:31:1 | x |
| nullSensitiveContexts.js:31:5:31:5 | y |
| nullSensitiveContexts.js:32:1:32:1 | x |
| nullSensitiveContexts.js:32:5:32:5 | y |
| nullSensitiveContexts.js:33:1:33:1 | x |
| nullSensitiveContexts.js:33:5:33:5 | y |
| nullSensitiveContexts.js:34:1:34:1 | x |
| nullSensitiveContexts.js:34:6:34:6 | y |
| nullSensitiveContexts.js:35:1:35:1 | x |
| nullSensitiveContexts.js:35:6:35:6 | y |
| nullSensitiveContexts.js:36:1:36:1 | x |
| nullSensitiveContexts.js:36:7:36:7 | y |
| nullSensitiveContexts.js:37:2:37:2 | x |
| nullSensitiveContexts.js:38:1:38:1 | x |
| nullSensitiveContexts.js:38:6:38:6 | y |
| nullSensitiveContexts.js:39:1:39:1 | x |
| nullSensitiveContexts.js:39:6:39:6 | y |
| nullSensitiveContexts.js:40:1:40:1 | x |
| nullSensitiveContexts.js:40:6:40:6 | y |
| nullSensitiveContexts.js:41:1:41:1 | x |
| nullSensitiveContexts.js:41:7:41:7 | y |
| nullSensitiveContexts.js:42:1:42:1 | x |
| nullSensitiveContexts.js:42:7:42:7 | y |
| nullSensitiveContexts.js:43:1:43:1 | x |
| nullSensitiveContexts.js:43:8:43:8 | y |
| nullSensitiveContexts.js:44:15:44:15 | y |
| primaries.js:22:5:22:9 | Array |
| primaries.js:23:5:23:10 | Object |
| primaries.js:24:5:24:10 | String |
| primaries.js:25:1:25:6 | String |
| primaries.js:26:1:26:6 | Object |
| primaries.js:26:1:26:13 | Object.create |
| primaries.js:27:1:27:6 | String |
| primaries.js:27:8:27:18 | 'epytotorp' |
| primaries.js:27:8:27:26 | 'epytotorp'.reverse |
| primaries.js:27:8:27:28 | 'epytot ... verse() |
| surrogates.js:2:1:2:8 | /\\uD800/ |
| surrogates.js:2:1:2:13 | /\\uD800/.test |
| unary.js:1:2:1:3 | 23 |
| unary.js:4:2:4:2 | 2 |
| unary.js:5:8:5:13 | Object |
| unary.js:7:8:7:13 | Object |
| unary.js:7:8:7:23 | Object.prototype |
| update.js:1:3:1:3 | a |
| update.js:2:1:2:1 | a |
| update.js:3:3:3:3 | b |
| update.js:4:1:4:1 | b |

View File

@@ -9,3 +9,4 @@ import LetExpr
import stripParens
import getContainer
import getEnclosingStmt
import nullSensitiveContexts