8000 Adds transforms for NonNullExpression · sweshgit/TypeScript@0d6ff81 · GitHub
[go: up one dir, main page]

Skip to content 10000

Commit 0d6ff81

Browse files
committed
Adds transforms for NonNullExpression
1 parent 8954599 commit 0d6ff81

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

src/compiler/binder.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,7 @@ namespace ts {
18831883
case SyntaxKind.EnumMember:
18841884
case SyntaxKind.TypeAssertionExpression:
18851885
case SyntaxKind.AsExpression:
1886+
case SyntaxKind.NonNullExpression:
18861887
case SyntaxKind.ReadonlyKeyword:
18871888
// These nodes are TypeScript syntax.
18881889
transformFlags = TransformFlags.AssertTypeScript;

src/compiler/printer.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,8 @@ const _super = (function (geti, seti) {
751751
return;
752752
case SyntaxKind.AsExpression:
753753
return emitAsExpression(<AsExpression>node);
754+
case SyntaxKind.NonNullExpression:
755+
return emitNonNullExpression(<NonNullExpression>node);
754756

755757
// JSX
756758
case SyntaxKind.JsxElement:
@@ -1286,6 +1288,11 @@ const _super = (function (geti, seti) {
12861288
}
12871289
}
12881290

1291+
function emitNonNullExpression(node: NonNullExpression) {
1292+
emitExpression(node.expression);
1293+
write("!");
1294+
}
1295+
12891296
//
12901297
// Misc
12911298
//

src/compiler/transformers/ts.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,10 @@ namespace ts {
371371
// TypeScript type assertions are removed, but their subtrees are preserved.
372372
return visitAssertionExpression(<AssertionExpression>node);
373373

374+
case SyntaxKind.NonNullExpression:
375+
// TypeScript non-null expressions are removed, but their subtrees are preserved.
376+
return visitNonNullExpression(<NonNullExpression>node);
377+
374378
case SyntaxKind.EnumDeclaration:
375379
// TypeScript enum declarations do not exist in ES6 and must be rewritten.
376380
return visitEnumDeclaration(<EnumDeclaration>node);
@@ -2228,7 +2232,12 @@ namespace ts {
22282232
}
22292233

22302234
function visitAssertionExpression(node: AssertionExpression): Expression {
2231-
const expression = visitNode((<TypeAssertion | AsExpression>node).expression, visitor, isExpression);
2235+
const expression = visitNode(node.expression, visitor, isExpression);
2236+
return createPartiallyEmittedExpression(expression, node);
2237+
}
2238+
2239+
function visitNonNullExpression(node: NonNullExpression): Expression {
2240+
const expression = visitNode(node.expression, visitor, isLeftHandSideExpression);
22322241
return createPartiallyEmittedExpression(expression, node);
22332242
}
22342243

src/compiler/visitor.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ namespace ts {
219219
{ name: "expression", test: isExpression },
220220
{ name: "type", test: isTypeNode }
221221
],
222+
[SyntaxKind.NonNullExpression]: [
223+
{ name: "expression", test: isLeftHandSideExpression }
224+
],
222225
[SyntaxKind.TemplateSpan]: [
223226
{ name: "expression", test: isExpression },
224227
{ name: "literal", test: isTemplateLiteralFragment }

0 commit comments

Comments
 (0)
0