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

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

Issue 2150333002: Serialize this-types in NativeBehavior separately. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 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
Index: pkg/compiler/lib/src/js_backend/backend_serialization.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend_serialization.dart b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
index 97da2f5a2d2a8cf30bfbbe5acaca1a35511243f3..019152f280d94b83a567d9ffc90c65edb42d2bb4 100644
--- a/pkg/compiler/lib/src/js_backend/backend_serialization.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
@@ -18,8 +18,10 @@ import 'js_backend.dart';
const String _BACKEND_DATA_TAG = 'jsBackendData';
const Key DART_TYPES_RETURNED = const Key('dartTypesReturned');
+const Key THIS_TYPES_RETURNED = const Key('thisTypesReturned');
const Key SPECIAL_TYPES_RETURNED = const Key('specialTypesReturned');
const Key DART_TYPES_INSTANTIATED = const Key('dartTypesInstantiated');
+const Key THIS_TYPES_INSTANTIATED = const Key('thisTypesInstantiated');
const Key SPECIAL_TYPES_INSTANTIATED = const Key('specialTypesInstantiated');
const Key CODE_TEMPLATE = const Key('codeTemplate');
const Key SIDE_EFFECTS = const Key('sideEffects');
@@ -150,9 +152,39 @@ class JavaScriptBackendDeserializer implements DeserializerPlugin {
}
class NativeBehaviorSerialization {
- /// Returns a list of the [DartType]s in [types].
+ /// Returns a list of the non-this-type [DartType]s in [types].
static List<DartType> filterDartTypes(List types) {
- return types.where((type) => type is DartType).toList();
+ return types.where((type) {
+ if (type is DartType) {
+ // TODO(johnniwinther): Remove this when annotation are no longer resolved
Harry Terkelsen 2016/07/15 16:03:10 nit: long line
Johnni Winther 2016/07/18 10:44:17 Done.
+ // to this-types.
+ if (type is GenericType &&
+ type.isGeneric &&
+ type == type.element.thisType) {
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }).toList();
+ }
+
+ // TODO(johnniwinther): Remove this when annotation are no longer resolved
+ // to this-types.
+ /// Returns a list of the classes of this-types in [types].
+ static List<Element> filterThisTypes(List types) {
+ return types.where((type) {
Harry Terkelsen 2016/07/15 16:03:10 maybe move this filter function to it's own local
Johnni Winther 2016/07/18 10:44:17 Done.
+ if (type is DartType) {
+ if (type is GenericType &&
+ type.isGeneric &&
+ type == type.element.thisType) {
+ return true;
+ }
+ }
+ return false;
+ }).map((type) {
+ return type.element;
+ }).toList();
}
/// Returns a list of the names of the [SpecialType]s in [types].
@@ -167,11 +199,15 @@ class NativeBehaviorSerialization {
NativeBehavior behavior, ObjectEncoder encoder) {
encoder.setTypes(
DART_TYPES_RETURNED, filterDartTypes(behavior.typesReturned));
+ encoder.setElements(
+ THIS_TYPES_RETURNED, filterThisTypes(behavior.typesReturned));
encoder.setStrings(
SPECIAL_TYPES_RETURNED, filterSpecialTypes(behavior.typesReturned));
encoder.setTypes(
DART_TYPES_INSTANTIATED, filterDartTypes(behavior.typesInstantiated));
+ encoder.setElements(
+ THIS_TYPES_INSTANTIATED, filterThisTypes(behavior.typesInstantiated));
encoder.setStrings(SPECIAL_TYPES_INSTANTIATED,
filterSpecialTypes(behavior.typesInstantiated));
@@ -193,12 +229,20 @@ class NativeBehaviorSerialization {
behavior.typesReturned
.addAll(decoder.getTypes(DART_TYPES_RETURNED, isOptional: true));
behavior.typesReturned.addAll(decoder
+ .getElements(THIS_TYPES_RETURNED, isOptional: true)
+ .map((element) => element.thisType)
+ .toList());
+ behavior.typesReturned.addAll(decoder
.getStrings(SPECIAL_TYPES_RETURNED, isOptional: true)
.map(SpecialType.fromName));
behavior.typesInstantiated
.addAll(decoder.getTypes(DART_TYPES_INSTANTIATED, isOptional: true));
behavior.typesInstantiated.addAll(decoder
+ .getElements(THIS_TYPES_INSTANTIATED, isOptional: true)
+ .map((element) => element.thisType)
+ .toList());
+ behavior.typesInstantiated.addAll(decoder
.getStrings(SPECIAL_TYPES_INSTANTIATED, isOptional: true)
.map(SpecialType.fromName));
« no previous file with comments | « pkg/compiler/lib/src/helpers/debug_collection.dart ('k') | pkg/compiler/lib/src/serialization/serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698