mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
(function() {
|
|
var o1 = {
|
|
m1: function(){ return {}; },
|
|
m2: function(){ return {}; },
|
|
m3: function(){ return {}; },
|
|
m4: function(){ return {}; }
|
|
};
|
|
o1.m1(); // analyzed precisely
|
|
o1.m2(); // analyzed precisely
|
|
unknown(o1.m2);
|
|
var o = unknown? o1: {};
|
|
o.m3(); // not analyzed precisely: `o1` is not the only receiver.
|
|
var m4 = o.m4;
|
|
m4(); // (not a method call)
|
|
|
|
var o2 = {};
|
|
o2.m = function() { return {}; };
|
|
// not analyzed precisely: `m` may be in the prototype since `m`
|
|
// is not in the initializer, and we do not attempt to reason flow
|
|
// sensitively beyond that at the moment
|
|
o2.m();
|
|
});
|
|
(function(){
|
|
function f1(){return {};}
|
|
var v1 = {m: f1}.m(); // analyzed precisely
|
|
v1 === true;
|
|
|
|
function f2(){return {};}
|
|
var o2 = {m: f2};
|
|
var v2 = o2.m(); // analyzed precisely
|
|
v2 === true;
|
|
|
|
function f3(){return {};}
|
|
var v3 = ({m: f3}).m(); // analyzed precisely
|
|
v3 === true;
|
|
|
|
function f4(){return {};}
|
|
var { o4 } = {m: f4};
|
|
// not analyzed precisely: o4 is from a destructuring assignment
|
|
// (and it is even `undefined` in this case)
|
|
var v4 = o4.m();
|
|
v4 === true;
|
|
});
|
|
|
|
(function(){
|
|
(function(o = {m: () => 42}){
|
|
var v1 = o.m(); // not analyzed precisely: `o` may be `unknown`
|
|
})(unknown);
|
|
|
|
function f(o = {m: () => 42}){
|
|
var v2 = o.m(); // not analyzed precisely: `o` may be `unknown`
|
|
};
|
|
f(unknown);
|
|
(function(o = {m: () => 42}){
|
|
var v3 = o.m(); // not analyzed precisely: `o.m` may be `unknown`
|
|
})({m: unknown});
|
|
(function(o = {m: () => 42}){
|
|
// not analyzed precisely: we only support unique receivers at
|
|
// the moment
|
|
var v4 = o.m();
|
|
})({m: () => true});
|
|
|
|
});
|