108 lines
1.9 KiB
TypeScript
108 lines
1.9 KiB
TypeScript
// @allowJs: true
|
|
// @Filename: controlFlowJavascript.js
|
|
// @out: out.js
|
|
|
|
let cond = true;
|
|
|
|
// CFA for 'let' and no initializer
|
|
function f1() {
|
|
let x;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
}
|
|
|
|
// CFA for 'let' and 'undefined' initializer
|
|
function f2() {
|
|
let x = undefined;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
}
|
|
|
|
// CFA for 'let' and 'null' initializer
|
|
function f3() {
|
|
let x = null;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | null
|
|
}
|
|
|
|
// CFA for 'var' with no initializer
|
|
function f5() {
|
|
var x;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
}
|
|
|
|
// CFA for 'var' with 'undefined' initializer
|
|
function f6() {
|
|
var x = undefined;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
}
|
|
|
|
// CFA for 'var' with 'null' initializer
|
|
function f7() {
|
|
var x = null;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | null
|
|
}
|
|
|
|
// No CFA for captured outer variables
|
|
function f9() {
|
|
let x;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
function f() {
|
|
const z = x; // any
|
|
}
|
|
}
|
|
|
|
// No CFA for captured outer variables
|
|
function f10() {
|
|
let x;
|
|
if (cond) {
|
|
x = 1;
|
|
}
|
|
if (cond) {
|
|
x = "hello";
|
|
}
|
|
const y = x; // string | number | undefined
|
|
const f = () => {
|
|
const z = x; // any
|
|
};
|
|
}
|