Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/namer.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart |
| index 541aa7b1b3fbfe3ddf29a745bf0b4628d339b962..a4c34af139ed9a48ba44dd9f09420181eac193a9 100644 |
| --- a/pkg/compiler/lib/src/js_backend/namer.dart |
| +++ b/pkg/compiler/lib/src/js_backend/namer.dart |
| @@ -1710,11 +1710,13 @@ class ConstantNamingVisitor implements ConstantValueVisitor { |
| @override |
| void visitType(TypeConstantValue constant, [_]) { |
| + // Generates something like 'Type_String_k8F', using the simple name of the |
| + // type and a hash to disambiguate the same name in different libraries. |
| addRoot('Type'); |
| DartType type = constant.representedType; |
| - JavaScriptBackend backend = compiler.backend; |
| - String name = backend.rti.getTypeRepresentationForTypeConstant(type); |
| - addIdentifier(name); |
| + String simpleName = type.element.name; |
| + addIdentifier(simpleName); |
| + add(getHashTag(constant, 3)); |
| } |
| @override |
| @@ -1730,7 +1732,7 @@ class ConstantNamingVisitor implements ConstantValueVisitor { |
| add('dummy_receiver'); |
| break; |
| case SyntheticConstantKind.TYPEVARIABLE_REFERENCE: |
| - add('type_variable_reference'); |
| + // Omit. These are opaque deferred indexes with nothing helpful to add. |
| break; |
| case SyntheticConstantKind.NAME: |
| add('name'); |
| @@ -1829,6 +1831,7 @@ class ConstantCanonicalHasher implements ConstantValueVisitor<int, Null> { |
| int visitType(TypeConstantValue constant, [_]) { |
| DartType type = constant.representedType; |
| JavaScriptBackend backend = compiler.backend; |
| + // This name includes the library name and type parameters. |
| String name = backend.rti.getTypeRepresentationForTypeConstant(type); |
| return _hashString(4, name); |
| } |
| @@ -1840,15 +1843,18 @@ class ConstantCanonicalHasher implements ConstantValueVisitor<int, Null> { |
| } |
| @override |
| - visitSynthetic(SyntheticConstantValue constant, [_]) { |
| + int visitSynthetic(SyntheticConstantValue constant, [_]) { |
|
Harry Terkelsen
2015/09/23 17:36:25
this would be clearer if it was:
if (constant.kind
sra1
2015/09/23 22:52:05
I'd like to keep it as-is since other visitSynthet
|
| switch (constant.kind) { |
| case SyntheticConstantKind.TYPEVARIABLE_REFERENCE: |
| - return constant.payload.hashCode; |
| + // These contain a deferred opaque index into metadata. There is nothing |
| + // we can access that is stable between compiles. Luckily, since they |
| + // resolve to integer indexes, they always part of a larger constant. |
|
Harry Terkelsen
2015/09/23 17:36:25
nit: they always -> they're always
sra1
2015/09/23 22:52:05
Done.
|
| + return 0; |
| default: |
| compiler.internalError(NO_LOCATION_SPANNABLE, |
| 'SyntheticConstantValue should never be named and ' |
| 'never be subconstant'); |
| - return null; |
| + return 0; |
| } |
| } |