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

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

Issue 2981113002: Use entities in constant_emitter (Closed)
Patch Set: 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_backend/constant_emitter.dart
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index f1528f4f9fa533889c6ccce063b468f789672465..5e5ac5c365f8f4dca748da3b8fbc540d08d0576e 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -5,10 +5,9 @@
import '../common.dart';
import '../common_elements.dart';
import '../constants/values.dart';
-import '../elements/elements.dart';
-import '../elements/types.dart' show TypeVariableType;
import '../elements/entities.dart';
-import '../elements/resolution_types.dart';
+import '../elements/resolution_types.dart' show ResolutionTypedefType;
+import '../elements/types.dart';
import '../io/code_output.dart';
import '../js/js.dart' as jsAst;
import '../js/js.dart' show js;
@@ -225,7 +224,7 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
return new jsAst.ArrayInitializer(data);
}
- ClassElement classElement = constant.type.element;
+ ClassEntity classElement = constant.type.element;
String className = classElement.name;
List<jsAst.Expression> arguments = <jsAst.Expression>[];
@@ -233,8 +232,8 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
// The arguments of the JavaScript constructor for any given Dart class
// are in the same order as the members of the class element.
int emittedArgumentCount = 0;
- classElement.implementation.forEachInstanceField(
- (ClassElement enclosing, Element field) {
+ _worldBuilder.forEachInstanceField(classElement,
+ (ClassEntity enclosing, FieldEntity field) {
if (field.name == JavaScriptMapConstant.LENGTH_NAME) {
arguments
.add(new jsAst.LiteralNumber('${constant.keyList.entries.length}'));
@@ -252,7 +251,7 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
"Compiler has unexpected field ${field.name} for ${className}.");
}
emittedArgumentCount++;
- }, includeSuperAndInjectedMembers: true);
+ });
if ((className == JavaScriptMapConstant.DART_STRING_CLASS &&
emittedArgumentCount != 3) ||
(className == JavaScriptMapConstant.DART_PROTO_CLASS &&
@@ -272,14 +271,24 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
return value;
}
- jsAst.PropertyAccess getHelperProperty(MethodElement helper) {
+ jsAst.PropertyAccess getHelperProperty(FunctionEntity helper) {
return _emitter.staticFunctionAccess(helper);
}
@override
jsAst.Expression visitType(TypeConstantValue constant, [_]) {
- ResolutionDartType type = constant.representedType;
- jsAst.Name typeName = _namer.runtimeTypeName(type.element);
+ DartType type = constant.representedType;
+ jsAst.Name typeName;
+ Entity element;
+ if (type is InterfaceType) {
+ element = type.element;
+ } else if (type is ResolutionTypedefType) {
+ // TODO(redemption): Handle typedef type literals from .dill.
+ element = type.element;
+ } else {
+ assert(type is DynamicType);
+ }
+ typeName = _namer.runtimeTypeName(element);
return new jsAst.Call(getHelperProperty(_commonElements.createRuntimeType),
[js.quoteName(typeName)]);
}
@@ -331,8 +340,8 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
}
jsAst.Expression maybeAddTypeArguments(
- ResolutionInterfaceType type, jsAst.Expression value) {
- if (type is ResolutionInterfaceType &&
+ InterfaceType type, jsAst.Expression value) {
+ if (type is InterfaceType &&
!type.treatAsRaw &&
_rtiNeed.classNeedsRti(type.element)) {
return new jsAst.Call(
@@ -342,17 +351,17 @@ class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
return value;
}
- jsAst.Expression _reifiedTypeArguments(ResolutionInterfaceType type) {
+ jsAst.Expression _reifiedTypeArguments(InterfaceType type) {
jsAst.Expression unexpected(TypeVariableType _variable) {
- ResolutionTypeVariableType variable = _variable;
+ TypeVariableType variable = _variable;
throw failedAt(
NO_LOCATION_SPANNABLE,
- "Unexpected type variable '${variable.getStringAsDeclared(null)}'"
- " in constant type '${type.getStringAsDeclared(null)}'");
+ "Unexpected type variable '${variable}'"
+ " in constant type '${type}'");
}
List<jsAst.Expression> arguments = <jsAst.Expression>[];
- for (ResolutionDartType argument in type.typeArguments) {
+ for (DartType argument in type.typeArguments) {
arguments.add(
_rtiEncoder.getTypeRepresentation(_emitter, argument, unexpected));
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698