Skip to content

Incorrect try/catch transformation to es3/es5 when using asyncIterator #14334

Description

@gcnew

TypeScript Version: nightly (2.2.0-dev.20170227)

Sample code:

async function* asyncGen() {
    yield 1;
    throw 'nope';
}

(async () => {
    for await (let n of asyncGen()) {
        console.log(n);
    }
})();

The transformed await function:

(function () { return __awaiter(_this, void 0, void 0, function () {
    var _a, _b, n, _c, e_1, _d;
    return __generator(this, function (_e) {
        switch (_e.label) {
            case 0:
                _e.trys.push([0, 6, 7, 12]);
                _a = __asyncValues(asyncGen());
                return [4 /*yield*/, _a.next()];
            case 1:
                _b = _e.sent();
                _e.label = 2;
            case 2:
                if (!!_b.done) return [3 /*break*/, 5];
                n = _b.value;
                console.log(n);
                _e.label = 3;
            case 3: return [4 /*yield*/, _a.next()];
            case 4:
                _b = _e.sent();
                return [3 /*break*/, 2];
            case 5: return [3 /*break*/, 12];
            case 6:
                _c = _e.sent();
                e_1 = { error: e_1_1 };   // <------ ReferenceError: e_1_1 is not defined
                return [3 /*break*/, 12];
            case 7:
                _e.trys.push([7, , 10, 11]);
                if (!(_b && !_b.done && (_d = _a.return))) return [3 /*break*/, 9];
                return [4 /*yield*/, _d.call(_a)];
            case 8:
                _e.sent();
                _e.label = 9;
            case 9: return [3 /*break*/, 11];
            case 10:
                if (e_1) throw e_1.error;
                return [7 /*endfinally*/];
            case 11: return [7 /*endfinally*/];
            case 12: return [2 /*return*/];
        }
    });
}); })();

Expected behavior:
case 6 is currently referencing the undeclared variable e_1_1 in e_1 = { error: e_1_1 };. I think the correct transpilation is e_1 = { error: _c };

Actual behavior:
case 6 is transformed with an undeclared variable.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions