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

Unified Diff: pkg/compiler/lib/src/js_backend/type_variable_handler.dart

Issue 2801873006: Use entities in TypeVariableResolutionAnalysis and TypeVariableCodegenAnalysis (Closed)
Patch Set: Created 3 years, 8 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 | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/kernel/world_builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_backend/type_variable_handler.dart
diff --git a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
index 996137d06c718aeb62d93b901c3a6ae9ebfcc1e4..617f8f5dd0ed9e3d788b4bef19b5468317d58551 100644
--- a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
+++ b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
@@ -5,8 +5,8 @@
import '../common_elements.dart';
import '../constants/expressions.dart';
import '../constants/values.dart';
-import '../elements/resolution_types.dart';
-import '../elements/elements.dart';
+import '../elements/entities.dart';
+import '../elements/types.dart';
import '../js/js.dart' as jsAst;
import '../js_emitter/js_emitter.dart'
show CodeEmitterTask, MetadataCollector, Placeholder;
@@ -43,7 +43,7 @@ class TypeVariableResolutionAnalysis {
return impactBuilder.flush();
}
- void registerClassWithTypeVariables(ClassElement cls) {
+ void registerClassWithTypeVariables(ClassEntity cls) {
// On first encounter, we have to ensure that the support classes get
// resolved.
if (!_seenClassesWithTypeVariables) {
@@ -57,6 +57,7 @@ class TypeVariableResolutionAnalysis {
/// Codegen handler that creates TypeVariable constants needed at runtime.
class TypeVariableCodegenAnalysis {
+ final ElementEnvironment _elementEnvironment;
final JavaScriptBackend _backend;
final BackendHelpers _helpers;
final MirrorsData _mirrorsData;
@@ -65,21 +66,22 @@ class TypeVariableCodegenAnalysis {
* Maps a class element to a list with indices that point to type variables
* constants for each of the class' type variables.
*/
- Map<ClassElement, List<jsAst.Expression>> _typeVariables =
- new Map<ClassElement, List<jsAst.Expression>>();
+ Map<ClassEntity, List<jsAst.Expression>> _typeVariables =
+ new Map<ClassEntity, List<jsAst.Expression>>();
/**
* Maps a TypeVariableType to the index pointing to the constant representing
* the corresponding type variable at runtime.
*/
- Map<TypeVariableElement, jsAst.Expression> _typeVariableConstants =
- new Map<TypeVariableElement, jsAst.Expression>();
+ Map<TypeVariableEntity, jsAst.Expression> _typeVariableConstants =
+ new Map<TypeVariableEntity, jsAst.Expression>();
/// Impact builder used for the codegen world computation.
final StagedWorldImpactBuilder _impactBuilder =
new StagedWorldImpactBuilder();
- TypeVariableCodegenAnalysis(this._backend, this._helpers, this._mirrorsData);
+ TypeVariableCodegenAnalysis(this._elementEnvironment, this._backend,
+ this._helpers, this._mirrorsData);
CodeEmitterTask get _task => _backend.emitter;
MetadataCollector get _metadataCollector => _task.metadataCollector;
@@ -90,32 +92,34 @@ class TypeVariableCodegenAnalysis {
return _impactBuilder.flush();
}
- void registerClassWithTypeVariables(ClassElement cls) {
+ void registerClassWithTypeVariables(ClassEntity cls) {
if (_mirrorsData.isClassAccessibleByReflection(cls)) {
processTypeVariablesOf(cls);
}
}
- void processTypeVariablesOf(ClassElement cls) {
+ void processTypeVariablesOf(ClassEntity cls) {
// Do not process classes twice.
if (_typeVariables.containsKey(cls)) return;
List<jsAst.Expression> constants = <jsAst.Expression>[];
- for (ResolutionTypeVariableType currentTypeVariable in cls.typeVariables) {
- TypeVariableElement typeVariableElement = currentTypeVariable.element;
+ InterfaceType thisType = _elementEnvironment.getThisType(cls);
+ for (TypeVariableType currentTypeVariable in thisType.typeArguments) {
+ TypeVariableEntity typeVariableElement = currentTypeVariable.element;
- jsAst.Expression boundIndex =
- _metadataCollector.reifyType(typeVariableElement.bound);
+ jsAst.Expression boundIndex = _metadataCollector.reifyType(
+ _elementEnvironment.getTypeVariableBound(typeVariableElement));
ConstantValue boundValue = new SyntheticConstantValue(
SyntheticConstantKind.TYPEVARIABLE_REFERENCE, boundIndex);
- ClassElement typeVariableClass = _helpers.typeVariableClass;
+ ClassEntity typeVariableClass = _helpers.typeVariableClass;
ConstantExpression constant = new ConstructedConstantExpression(
- typeVariableClass.thisType,
+ _elementEnvironment.getThisType(typeVariableClass),
_helpers.typeVariableConstructor,
const CallStructure.unnamed(3), [
- new TypeConstantExpression(cls.rawType, cls.name),
- new StringConstantExpression(currentTypeVariable.name),
+ new TypeConstantExpression(
+ _elementEnvironment.getRawType(cls), cls.name),
+ new StringConstantExpression(typeVariableElement.name),
new SyntheticConstantExpression(boundValue)
]);
@@ -138,7 +142,7 @@ class TypeVariableCodegenAnalysis {
* there, otherwise a new entry for [c] is created.
*/
jsAst.Expression _reifyTypeVariableConstant(
- ConstantValue c, TypeVariableElement variable) {
+ ConstantValue c, TypeVariableEntity variable) {
jsAst.Expression name = _task.constantReference(c);
jsAst.Expression result = _metadataCollector.reifyExpression(name);
if (_typeVariableConstants.containsKey(variable)) {
@@ -159,7 +163,7 @@ class TypeVariableCodegenAnalysis {
* [reifyTypeVariableConstant] will be called and the constant will be added
* on the allocated entry.
*/
- jsAst.Expression reifyTypeVariable(TypeVariableElement variable) {
+ jsAst.Expression reifyTypeVariable(TypeVariableEntity variable) {
if (_typeVariableConstants.containsKey(variable)) {
return _typeVariableConstants[variable];
}
@@ -169,7 +173,7 @@ class TypeVariableCodegenAnalysis {
return _typeVariableConstants[variable] = placeholder;
}
- List<jsAst.Expression> typeVariablesOf(ClassElement classElement) {
+ List<jsAst.Expression> typeVariablesOf(ClassEntity classElement) {
List<jsAst.Expression> result = _typeVariables[classElement];
if (result == null) {
result = const <jsAst.Expression>[];
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/kernel/world_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698