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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2971243003: fix #30094, assert should work with a function (Closed)
Patch Set: fix Created 3 years, 5 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
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)]);

Powered by Google App Engine
This is Rietveld 408576698