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

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

Issue 1808123006: Tweaks to compile against latest analyzer. Also changes the travis (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 9 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: lib/src/codegen/reify_coercions.dart
diff --git a/lib/src/codegen/reify_coercions.dart b/lib/src/codegen/reify_coercions.dart
index b72144152b0eb56fa3026fffa48ddb30cce74ed7..4ed5003fdbf6ab9e0cc53a63cbc53a8a342f273d 100644
--- a/lib/src/codegen/reify_coercions.dart
+++ b/lib/src/codegen/reify_coercions.dart
@@ -7,13 +7,10 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/utilities.dart' show NodeReplacer;
-import 'package:analyzer/src/generated/type_system.dart'
- show StrongTypeSystemImpl;
import 'package:analyzer/src/task/strong/info.dart';
import 'package:logging/logging.dart' as logger;
import 'ast_builder.dart';
-import '../utils.dart' show getStaticType;
final _log = new logger.Logger('dev_compiler.reify_coercions');
@@ -33,9 +30,8 @@ class NewTypeIdDesc {
// This class implements a pass which modifies (in place) the ast replacing
// abstract coercion nodes with their dart implementations.
class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
- final StrongTypeSystemImpl _typeSystem;
- CoercionReifier(this._typeSystem);
+ CoercionReifier();
/// This should be the entry point for this class.
///
@@ -50,9 +46,7 @@ class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
@override
Object visitExpression(Expression node) {
var info = CoercionInfo.get(node);
- if (info is InferredTypeBase) {
- return _visitInferredTypeBase(info, node);
- } else if (info is DownCast) {
+ if (info is DownCast) {
return _visitDownCast(info, node);
}
return super.visitExpression(node);
@@ -60,23 +54,10 @@ class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
///////////////// Private //////////////////////////////////
- Object _visitInferredTypeBase(InferredTypeBase node, Expression expr) {
- DartType t = node.type;
- if (!_typeSystem.isSubtypeOf(getStaticType(expr), t)) {
- if (getStaticType(expr).isDynamic) {
- var cast = Coercion.cast(expr.staticType, t);
- var info = new DynamicCast(_typeSystem, expr, cast);
- CoercionInfo.set(expr, info);
- }
- }
- expr.visitChildren(this);
- return null;
- }
-
Object _visitDownCast(DownCast node, Expression expr) {
var parent = expr.parent;
expr.visitChildren(this);
- Expression newE = coerceExpression(expr, node.cast);
+ Expression newE = coerceExpression(expr, node);
if (!identical(expr, newE)) {
var replaced = parent.accept(new NodeReplacer(expr, newE));
// It looks like NodeReplacer will always return true.
@@ -87,27 +68,23 @@ class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
}
/// Coerce [e] using [c], returning a new expression.
- Expression coerceExpression(Expression e, Coercion c) {
- assert(c != null);
- assert(c is! CoercionError);
+ Expression coerceExpression(Expression e, DownCast node) {
if (e is NamedExpression) {
- Expression inner = coerceExpression(e.expression, c);
+ Expression inner = coerceExpression(e.expression, node);
return new NamedExpression(e.name, inner);
}
- if (c is Cast) return _castExpression(e, c);
- assert(c is Identity);
- return e;
+ return _castExpression(e, node.convertedType);
}
///////////////// Private //////////////////////////////////
- Expression _castExpression(Expression e, Cast c) {
+ Expression _castExpression(Expression e, DartType toType) {
// We use an empty name in the AST, because the JS code generator only cares
// about the target type. It does not look at the AST name.
var typeName = new TypeName(AstBuilder.identifierFromString(''), null);
- typeName.type = c.toType;
+ typeName.type = toType;
var cast = AstBuilder.asExpression(e, typeName);
- cast.staticType = c.toType;
+ cast.staticType = toType;
return cast;
}
}

Powered by Google App Engine
This is Rietveld 408576698