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

Side by Side Diff: pkg/kernel/lib/type_environment.dart

Issue 2825053002: Add typedef AST node boilerplate. (Closed)
Patch Set: Update FastaVerifyingVisitor to work with the changes in VerifyingVisitor Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « pkg/kernel/lib/type_algebra.dart ('k') | pkg/kernel/lib/verifier.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 library kernel.type_environment; 4 library kernel.type_environment;
5 5
6 import 'ast.dart'; 6 import 'ast.dart';
7 import 'class_hierarchy.dart'; 7 import 'class_hierarchy.dart';
8 import 'core_types.dart'; 8 import 'core_types.dart';
9 import 'type_algebra.dart'; 9 import 'type_algebra.dart';
10 10
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 /// The part of [TypeEnvironment] that deals with subtype tests. 138 /// The part of [TypeEnvironment] that deals with subtype tests.
139 /// 139 ///
140 /// This lives in a separate class so it can be tested independently of the SDK. 140 /// This lives in a separate class so it can be tested independently of the SDK.
141 abstract class SubtypeTester { 141 abstract class SubtypeTester {
142 InterfaceType get objectType; 142 InterfaceType get objectType;
143 InterfaceType get rawFunctionType; 143 InterfaceType get rawFunctionType;
144 ClassHierarchy get hierarchy; 144 ClassHierarchy get hierarchy;
145 145
146 /// Returns true if [subtype] is a subtype of [supertype]. 146 /// Returns true if [subtype] is a subtype of [supertype].
147 bool isSubtypeOf(DartType subtype, DartType supertype) { 147 bool isSubtypeOf(DartType subtype, DartType supertype) {
148 subtype = subtype.unalias;
149 supertype = supertype.unalias;
148 if (identical(subtype, supertype)) return true; 150 if (identical(subtype, supertype)) return true;
149 if (subtype is BottomType) return true; 151 if (subtype is BottomType) return true;
150 if (supertype is DynamicType || 152 if (supertype is DynamicType ||
151 supertype is VoidType || 153 supertype is VoidType ||
152 supertype == objectType) { 154 supertype == objectType) {
153 return true; 155 return true;
154 } 156 }
155 if (subtype is InterfaceType && supertype is InterfaceType) { 157 if (subtype is InterfaceType && supertype is InterfaceType) {
156 var upcastType = 158 var upcastType =
157 hierarchy.getTypeAsInstanceOf(subtype, supertype.classNode); 159 hierarchy.getTypeAsInstanceOf(subtype, supertype.classNode);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 if (subtypeNameIndex == subtype.namedParameters.length) return false; 238 if (subtypeNameIndex == subtype.namedParameters.length) return false;
237 NamedType subtypeParameter = subtype.namedParameters[subtypeNameIndex]; 239 NamedType subtypeParameter = subtype.namedParameters[subtypeNameIndex];
238 // Termination: Both types shrink in size. 240 // Termination: Both types shrink in size.
239 if (!isSubtypeOf(supertypeParameter.type, subtypeParameter.type)) { 241 if (!isSubtypeOf(supertypeParameter.type, subtypeParameter.type)) {
240 return false; 242 return false;
241 } 243 }
242 } 244 }
243 return true; 245 return true;
244 } 246 }
245 } 247 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/type_algebra.dart ('k') | pkg/kernel/lib/verifier.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698