Adds transforms for NonNullExpression

This commit is contained in:
Ron Buckton 2016-04-19 18:16:46 -07:00
parent 8954599592
commit 0d6ff81d5a
4 changed files with 21 additions and 1 deletions

View File

@ -1883,6 +1883,7 @@ namespace ts {
case SyntaxKind.EnumMember:
case SyntaxKind.TypeAssertionExpression:
case SyntaxKind.AsExpression:
case SyntaxKind.NonNullExpression:
case SyntaxKind.ReadonlyKeyword:
// These nodes are TypeScript syntax.
transformFlags = TransformFlags.AssertTypeScript;

View File

@ -751,6 +751,8 @@ const _super = (function (geti, seti) {
return;
case SyntaxKind.AsExpression:
return emitAsExpression(<AsExpression>node);
case SyntaxKind.NonNullExpression:
return emitNonNullExpression(<NonNullExpression>node);
// JSX
case SyntaxKind.JsxElement:
@ -1286,6 +1288,11 @@ const _super = (function (geti, seti) {
}
}
function emitNonNullExpression(node: NonNullExpression) {
emitExpression(node.expression);
write("!");
}
//
// Misc
//

View File

@ -371,6 +371,10 @@ namespace ts {
// TypeScript type assertions are removed, but their subtrees are preserved.
return visitAssertionExpression(<AssertionExpression>node);
case SyntaxKind.NonNullExpression:
// TypeScript non-null expressions are removed, but their subtrees are preserved.
return visitNonNullExpression(<NonNullExpression>node);
case SyntaxKind.EnumDeclaration:
// TypeScript enum declarations do not exist in ES6 and must be rewritten.
return visitEnumDeclaration(<EnumDeclaration>node);
@ -2228,7 +2232,12 @@ namespace ts {
}
function visitAssertionExpression(node: AssertionExpression): Expression {
const expression = visitNode((<TypeAssertion | AsExpression>node).expression, visitor, isExpression);
const expression = visitNode(node.expression, visitor, isExpression);
return createPartiallyEmittedExpression(expression, node);
}
function visitNonNullExpression(node: NonNullExpression): Expression {
const expression = visitNode(node.expression, visitor, isLeftHandSideExpression);
return createPartiallyEmittedExpression(expression, node);
}

View File

@ -219,6 +219,9 @@ namespace ts {
{ name: "expression", test: isExpression },
{ name: "type", test: isTypeNode }
],
[SyntaxKind.NonNullExpression]: [
{ name: "expression", test: isLeftHandSideExpression }
],
[SyntaxKind.TemplateSpan]: [
{ name: "expression", test: isExpression },
{ name: "literal", test: isTemplateLiteralFragment }