Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(595)

Unified Diff: lib/expression.ts

Issue 2225953002: Strip more unused features. (Closed) Base URL: git@github.com:dart-lang/js_facade_gen.git@master
Patch Set: Fix types Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/declaration.ts ('k') | lib/facade_converter.ts » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/expression.ts
diff --git a/lib/expression.ts b/lib/expression.ts
deleted file mode 100644
index 5c42d68df1ccf6f50adfa6e020b0b69b68a0ba21..0000000000000000000000000000000000000000
--- a/lib/expression.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-import * as ts from 'typescript';
-import * as base from './base';
-import {Transpiler} from './main';
-import {FacadeConverter} from './facade_converter';
-
-export default class ExpressionTranspiler extends base.TranspilerBase {
- constructor(tr: Transpiler, private fc: FacadeConverter) { super(tr); }
-
- visitNode(node: ts.Node): boolean {
- switch (node.kind) {
- case ts.SyntaxKind.BinaryExpression:
- let binExpr = <ts.BinaryExpression>node;
- let operatorKind = binExpr.operatorToken.kind;
- let tokenStr = ts.tokenToString(operatorKind);
- switch (operatorKind) {
- case ts.SyntaxKind.EqualsEqualsEqualsToken:
- case ts.SyntaxKind.ExclamationEqualsEqualsToken:
- if (operatorKind === ts.SyntaxKind.ExclamationEqualsEqualsToken) this.emit('!');
- this.emit('identical (');
- this.visit(binExpr.left);
- this.emit(',');
- this.visit(binExpr.right);
- this.emit(')');
- break;
- case ts.SyntaxKind.CaretToken:
- case ts.SyntaxKind.BarToken:
- case ts.SyntaxKind.AmpersandToken:
- case ts.SyntaxKind.GreaterThanGreaterThanToken:
- case ts.SyntaxKind.LessThanLessThanToken:
- case ts.SyntaxKind.CaretEqualsToken:
- case ts.SyntaxKind.BarEqualsToken:
- case ts.SyntaxKind.AmpersandEqualsToken:
- case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken:
- case ts.SyntaxKind.LessThanLessThanEqualsToken:
- // In Dart, the bitwise operators are only available on int, so the number types ts2dart
- // deals with have to be converted to int explicitly to match JS's semantics in Dart.
- if (tokenStr[tokenStr.length - 1] === '=') {
- // For assignments, strip the trailing `=` sign to emit just the operator itself.
- this.visit(binExpr.left);
- this.emit('=');
- this.visitAndWrapAsInt(binExpr.left);
- this.emit(tokenStr.slice(0, -1));
- } else {
- // normal case (LHS [op])
- this.visitAndWrapAsInt(binExpr.left);
- this.emit(tokenStr);
- }
- this.visitAndWrapAsInt(binExpr.right);
- break;
- case ts.SyntaxKind.InKeyword:
- this.reportError(node, 'in operator is unsupported');
- break;
- case ts.SyntaxKind.InstanceOfKeyword:
- this.visit(binExpr.left);
- this.emit('is');
- this.fc.visitTypeName(<ts.Identifier>binExpr.right);
- break;
- default:
- this.visit(binExpr.left);
- this.emit(tokenStr);
- this.visit(binExpr.right);
- break;
- }
- break;
- case ts.SyntaxKind.PrefixUnaryExpression:
- let prefixUnary = <ts.PrefixUnaryExpression>node;
- let operator = ts.tokenToString(prefixUnary.operator);
- this.emit(operator);
-
- if (prefixUnary.operator === ts.SyntaxKind.TildeToken) {
- this.visitAndWrapAsInt(prefixUnary.operand);
- } else {
- this.visit(prefixUnary.operand);
- }
- break;
- case ts.SyntaxKind.PostfixUnaryExpression:
- let postfixUnary = <ts.PostfixUnaryExpression>node;
- this.visit(postfixUnary.operand);
- this.emit(ts.tokenToString(postfixUnary.operator));
- break;
- case ts.SyntaxKind.ConditionalExpression:
- let conditional = <ts.ConditionalExpression>node;
- this.visit(conditional.condition);
- this.emit('?');
- this.visit(conditional.whenTrue);
- this.emit(':');
- this.visit(conditional.whenFalse);
- break;
- case ts.SyntaxKind.DeleteExpression:
- this.reportError(node, 'delete operator is unsupported');
- break;
- case ts.SyntaxKind.VoidExpression:
- this.reportError(node, 'void operator is unsupported');
- break;
- case ts.SyntaxKind.TypeOfExpression:
- this.reportError(node, 'typeof operator is unsupported');
- break;
-
- case ts.SyntaxKind.ParenthesizedExpression:
- let parenExpr = <ts.ParenthesizedExpression>node;
- this.emit('(');
- this.visit(parenExpr.expression);
- this.emit(')');
- break;
-
- case ts.SyntaxKind.PropertyAccessExpression:
- let propAccess = <ts.PropertyAccessExpression>node;
- if (propAccess.name.text === 'stack' &&
- this.hasAncestor(propAccess, ts.SyntaxKind.CatchClause)) {
- // Handle `e.stack` accesses in catch clauses by mangling to `e_stack`.
- // FIXME: Use type checker/FacadeConverter to make sure this is actually Error.stack.
- this.visit(propAccess.expression);
- this.emitNoSpace('_stack');
- } else {
- if (this.fc.handlePropertyAccess(propAccess)) break;
- this.visit(propAccess.expression);
- this.emit('.');
- this.visit(propAccess.name);
- }
- break;
- case ts.SyntaxKind.ElementAccessExpression:
- let elemAccess = <ts.ElementAccessExpression>node;
- this.visit(elemAccess.expression);
- this.emit('[');
- this.visit(elemAccess.argumentExpression);
- this.emit(']');
- break;
-
- default:
- return false;
- }
- return true;
- }
-
- visitAndWrapAsInt(n: ts.Expression) {
- let lhsIsHexLit = n.kind === ts.SyntaxKind.NumericLiteral;
- if (lhsIsHexLit) {
- this.visit(n);
- return;
- }
- this.emit('(');
- this.visit(n);
- this.emit('as int)');
- }
-}
« no previous file with comments | « lib/declaration.ts ('k') | lib/facade_converter.ts » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698