=== tests/cases/compiler/letDeclarations-validContexts.ts ===
// Control flow statements with blocks
if (true) { 
>true : true

    let l1 = 0;
>l1 : number
>0 : 0
}
else { 
    let l2 = 0;
>l2 : number
>0 : 0
}

while (true) { 
>true : true

    let l3 = 0;
>l3 : number
>0 : 0
}

do { 
    let l4 = 0;
>l4 : number
>0 : 0

} while (true);
>true : true

var obj;
>obj : any

with (obj) {
>obj : any

    let l5 = 0;
>l5 : any
>0 : any
}

for (var i = 0; i < 10; i++) {
>i : number
>0 : 0
>i < 10 : boolean
>i : number
>10 : 10
>i++ : number
>i : number

    let l6 = 0;
>l6 : number
>0 : 0
}

for (var i2 in {}) {
>i2 : string
>{} : {}

    let l7 = 0;
>l7 : number
>0 : 0
}

if (true) {
>true : true

    label: let l8 = 0;
>label : any
>l8 : number
>0 : 0
}

while (false) {
>false : false

    label2: label3: label4: let l9 = 0;
>label2 : any
>label3 : any
>label4 : any
>l9 : number
>0 : 0
}

// Try/catch/finally
try {
    let l10 = 0;
>l10 : number
>0 : 0
}
catch (e) {
>e : any

    let l11 = 0;
>l11 : number
>0 : 0
}
finally {
    let l12 = 0;
>l12 : number
>0 : 0
}

// Switch
switch (0) {
>0 : 0

    case 0:
>0 : 0

        let l13 = 0;
>l13 : number
>0 : 0

        break;
    default:
        let l14 = 0;
>l14 : number
>0 : 0

        break;
}

// blocks
{
    let l15 = 0;
>l15 : number
>0 : 0
    {
        let l16 = 0
>l16 : number
>0 : 0

        label17: let l17 = 0;
>label17 : any
>l17 : number
>0 : 0
    }
}

// global
let l18 = 0;
>l18 : number
>0 : 0

// functions
function F() {
>F : () => void

    let l19 = 0;
>l19 : number
>0 : 0
}

var F2 = () => {
>F2 : () => void
>() => {    let l20 = 0;} : () => void

    let l20 = 0;
>l20 : number
>0 : 0

};

var F3 = function () {
>F3 : () => void
>function () {    let l21 = 0;} : () => void

    let l21 = 0;
>l21 : number
>0 : 0

};

// modules
module m {
>m : typeof m

    let l22 = 0;
>l22 : number
>0 : 0

    {
          let l23 = 0;
>l23 : number
>0 : 0
    }
}

// methods
class C {
>C : C

    constructor() {
        let l24 = 0;
>l24 : number
>0 : 0
    }

    method() {
>method : () => void

        let l25 = 0;
>l25 : number
>0 : 0
    }

    get v() {
>v : number

        let l26 = 0;
>l26 : number
>0 : 0

        return l26; 
>l26 : number
    }

    set v(value) {
>v : number
>value : number

        let l27 = value;
>l27 : number
>value : number
    }
}

// object literals
var o = {
>o : { f(): void; f2: () => void; }
>{    f() {        let l28 = 0;    },    f2: () => {        let l29 = 0;    }} : { f(): void; f2: () => void; }

    f() {
>f : () => void

        let l28 = 0;
>l28 : number
>0 : 0

    },
    f2: () => {
>f2 : () => void
>() => {        let l29 = 0;    } : () => void

        let l29 = 0;
>l29 : number
>0 : 0
    }
}

// labels
label: let l30 = 0;
>label : any
>l30 : number
>0 : 0
{
    label2: let l31 = 0;
>label2 : any
>l31 : number
>0 : 0
}

function f3() {
>f3 : () => void

    label: let l32 = 0;
>label : any
>l32 : number
>0 : 0
    {
        label2: let l33 = 0;
>label2 : any
>l33 : number
>0 : 0
    }
}

module m3 {
>m3 : typeof m3

    label: let l34 = 0;
>label : any
>l34 : number
>0 : 0
    {
        label2: let l35 = 0;
>label2 : any
>l35 : number
>0 : 0
    }
}
