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

Unified Diff: lib/src/codegen/js_codegen.dart

Issue 1147143007: fixes #206, add checking for unary ops (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merged Created 5 years, 6 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/src/checker/checker.dart ('k') | test/checker/checker_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/codegen/js_codegen.dart
diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart
index f89564d9eaa16176e00d5161f22de7f2b3f3b6f6..95fcf811ffe8cdd8a3dd926da67403e1f569c24b 100644
--- a/lib/src/codegen/js_codegen.dart
+++ b/lib/src/codegen/js_codegen.dart
@@ -1798,8 +1798,16 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
}
DartType type = null;
if (expr is BinaryExpression) {
+ switch (expr.operator.type) {
+ case TokenType.EQ_EQ:
+ case TokenType.BANG_EQ:
+ case TokenType.AMPERSAND_AMPERSAND:
+ case TokenType.BAR_BAR:
+ return true;
+ }
type = getStaticType(expr.leftOperand);
} else if (expr is PrefixExpression) {
+ if (expr.operator.type == TokenType.BANG) return true;
type = getStaticType(expr.operand);
} else if (expr is PostfixExpression) {
type = getStaticType(expr.operand);
@@ -1835,11 +1843,10 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
}
JS.Expression notNull(Expression expr) {
- if (_isNonNullableExpression(expr)) {
- return _visit(expr);
- } else {
- return js.call('dart.notNull(#)', _visit(expr));
- }
+ if (expr == null) return null;
+ var jsExpr = _visit(expr);
+ if (_isNonNullableExpression(expr)) return jsExpr;
+ return js.call('dart.notNull(#)', jsExpr);
}
@override
@@ -2202,7 +2209,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
@override
visitConditionalExpression(ConditionalExpression node) {
return js.call('# ? # : #', [
- _visit(node.condition),
+ notNull(node.condition),
_visit(node.thenExpression),
_visit(node.elseExpression)
]);
@@ -2229,7 +2236,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
@override
JS.If visitIfStatement(IfStatement node) {
- return new JS.If(_visit(node.condition), _visit(node.thenStatement),
+ return new JS.If(notNull(node.condition), _visit(node.thenStatement),
_visit(node.elseStatement));
}
@@ -2239,17 +2246,17 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
if (init == null) init = _visit(node.variables);
var update = _visitListToBinary(node.updaters, ',');
if (update != null) update = update.toVoidExpression();
- return new JS.For(init, _visit(node.condition), update, _visit(node.body));
+ return new JS.For(init, notNull(node.condition), update, _visit(node.body));
}
@override
JS.While visitWhileStatement(WhileStatement node) {
- return new JS.While(_visit(node.condition), _visit(node.body));
+ return new JS.While(notNull(node.condition), _visit(node.body));
}
@override
JS.Do visitDoStatement(DoStatement node) {
- return new JS.Do(_visit(node.body), _visit(node.condition));
+ return new JS.Do(_visit(node.body), notNull(node.condition));
}
@override
@@ -2558,7 +2565,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
///
/// For user-defined operators the following names are allowed:
///
- /// <, >, <=, >=, ==, -, +, /, ˜/, *, %, |, ˆ, &, <<, >>, []=, [], ˜
+ /// <, >, <=, >=, ==, -, +, /, ~/, *, %, |, ^, &, <<, >>, []=, [], ~
///
/// They generate code like:
///
« no previous file with comments | « lib/src/checker/checker.dart ('k') | test/checker/checker_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698