Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart |
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart |
index 0151900afd6df6da23c1411172288eb7f688fbbf..75535faa7df093f1237ef6cac8eba245a83acf35 100644 |
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart |
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart |
@@ -3953,19 +3953,30 @@ class CodeGenerator extends Object |
@override |
JS.Statement visitAssertStatement(AssertStatement node) { |
// TODO(jmesserly): only emit in checked mode. |
+ var condition = node.condition; |
+ var conditionType = condition.staticType; |
+ JS.Expression jsCondition = _visit(condition); |
+ |
+ var assertHelper = 'assert'; |
+ if (conditionType is FunctionType && |
+ conditionType.parameters.isEmpty && |
+ conditionType.returnType == types.boolType) { |
+ jsCondition = new JS.Call(jsCondition, []); |
+ } else if (conditionType != types.boolType) { |
+ assertHelper = 'dassert'; |
+ } |
+ var args = [jsCondition]; |
if (node.message != null) { |
- return _callHelperStatement('assert(#, () => #);', |
- [_visit(node.condition), _visit(node.message)]); |
+ args.add(js.call('() => #', [_visit(node.message)])); |
} |
- |
- return _callHelperStatement('assert(#);', _visit(node.condition)); |
+ return _callHelperStatement('$assertHelper(#);', [args]); |
} |
@override |
JS.Statement visitReturnStatement(ReturnStatement node) { |
var e = node.expression; |
if (e == null) return new JS.Return(); |
- return (_visit(e) as JS.Expression).toReturn(); |
+ return _visit<JS.Expression>(e).toReturn(); |
} |
@override |
@@ -4977,8 +4988,8 @@ class CodeGenerator extends Object |
// dynamic dispatch |
var dynamicHelper = const {'[]': 'dindex', '[]=': 'dsetindex'}[name]; |
if (dynamicHelper != null) { |
- return _callHelper('$dynamicHelper(#, #)', |
- [_visit(target) as JS.Expression, _visitList(args)]); |
+ return _callHelper( |
+ '$dynamicHelper(#, #)', [_visit(target), _visitList(args)]); |
} else { |
return _callHelper( |
'dsend(#, #, #)', [_visit(target), memberName, _visitList(args)]); |