Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 61ab8e7

Browse files
fishythefishcommit-bot@chromium.org
authored andcommitted
Add kernel and backend impacts for set literals.
Change-Id: Id4eca9807b8170ef9c81b7d66236530802a2960c Reviewed-on: https://dart-review.googlesource.com/c/92167 Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Sigmund Cherem <[email protected]>
1 parent d87482a commit 61ab8e7

File tree

6 files changed

+51
-1
lines changed

6 files changed

+51
-1
lines changed

pkg/compiler/lib/src/js_backend/backend_impact.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,15 @@ class BackendImpacts {
298298
]);
299299
}
300300

301+
BackendImpact _constantSetLiteral;
302+
303+
BackendImpact get constantSetLiteral =>
304+
_constantSetLiteral ??= new BackendImpact(instantiatedClasses: [
305+
_commonElements.constSetLiteralClass,
306+
], otherImpacts: [
307+
constantMapLiteral
308+
]);
309+
301310
BackendImpact _symbolConstructor;
302311

303312
BackendImpact get symbolConstructor {
@@ -570,6 +579,15 @@ class BackendImpacts {
570579
]);
571580
}
572581

582+
BackendImpact _setClass;
583+
584+
BackendImpact get setClass => _setClass ??= new BackendImpact(globalClasses: [
585+
// The backend will use a literal list to initialize the entries
586+
// of the set.
587+
_commonElements.listClass,
588+
_commonElements.setLiteralClass,
589+
]);
590+
573591
BackendImpact _boundClosureClass;
574592

575593
BackendImpact get boundClosureClass {
@@ -601,6 +619,16 @@ class BackendImpacts {
601619
]);
602620
}
603621

622+
BackendImpact _setLiteralClass;
623+
624+
BackendImpact get setLiteralClass =>
625+
_setLiteralClass ??= new BackendImpact(globalUses: [
626+
_commonElements.setLiteralConstructor,
627+
_commonElements.setLiteralConstructorEmpty,
628+
_commonElements.setLiteralUntypedMaker,
629+
_commonElements.setLiteralUntypedEmptyMaker,
630+
]);
631+
604632
BackendImpact _closureClass;
605633

606634
BackendImpact get closureClass {

pkg/compiler/lib/src/js_backend/backend_usage.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder {
165165
return true;
166166
} else if (element == _commonElements.listClass ||
167167
element == _commonElements.mapLiteralClass ||
168+
element == _commonElements.setLiteralClass ||
169+
element == _commonElements.unmodifiableSetClass ||
168170
element == _commonElements.functionClass ||
169171
element == _commonElements.stringClass) {
170172
// TODO(johnniwinther): Avoid these.

pkg/compiler/lib/src/js_backend/impact_transformer.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,15 @@ class JavaScriptImpactTransformer extends ImpactTransformer {
225225
}
226226
}
227227

228+
for (SetLiteralUse setLiteralUse in worldImpact.setLiterals) {
229+
if (setLiteralUse.isConstant) {
230+
registerImpact(_impacts.constantSetLiteral);
231+
} else {
232+
transformed
233+
.registerTypeUse(new TypeUse.instantiation(setLiteralUse.type));
234+
}
235+
}
236+
228237
for (ListLiteralUse listLiteralUse in worldImpact.listLiterals) {
229238
// TODO(johnniwinther): Use the [isConstant] and [isEmpty] property when
230239
// factory constructors are registered directly.

pkg/compiler/lib/src/js_backend/resolution_listener.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,16 @@ class ResolutionEnqueuerListener extends EnqueuerListener {
328328
_registerBackendImpact(impactBuilder, _impacts.functionClass);
329329
} else if (cls == _commonElements.mapClass) {
330330
_registerBackendImpact(impactBuilder, _impacts.mapClass);
331+
} else if (cls == _commonElements.setClass) {
332+
_registerBackendImpact(impactBuilder, _impacts.setClass);
331333
} else if (cls == _commonElements.boundClosureClass) {
332334
_registerBackendImpact(impactBuilder, _impacts.boundClosureClass);
333335
} else if (_nativeData.isNativeOrExtendsNative(cls)) {
334336
_registerBackendImpact(impactBuilder, _impacts.nativeOrExtendsClass);
335337
} else if (cls == _commonElements.mapLiteralClass) {
336338
_registerBackendImpact(impactBuilder, _impacts.mapLiteralClass);
339+
} else if (cls == _commonElements.setLiteralClass) {
340+
_registerBackendImpact(impactBuilder, _impacts.setLiteralClass);
337341
}
338342
if (cls == _commonElements.closureClass) {
339343
_registerBackendImpact(impactBuilder, _impacts.closureClass);

pkg/compiler/lib/src/js_backend/runtime_types.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,10 @@ class TypeVariableTests {
10471047
_getClassNode(commonElements.jsArrayClass)
10481048
.addDependency(_getClassNode(commonElements.listClass));
10491049
}
1050+
if (commonElements.setLiteralClass != null) {
1051+
_getClassNode(commonElements.setLiteralClass)
1052+
.addDependency(_getClassNode(commonElements.setClass));
1053+
}
10501054
if (commonElements.mapLiteralClass != null) {
10511055
_getClassNode(commonElements.mapLiteralClass)
10521056
.addDependency(_getClassNode(commonElements.mapClass));

pkg/compiler/lib/src/kernel/kernel_impact.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,10 @@ abstract class KernelImpactRegistryMixin implements ImpactRegistry {
231231
@override
232232
void registerSetLiteral(ir.DartType elementType,
233233
{bool isConst, bool isEmpty}) {
234-
// TODO(johnniwinther,fishythefish): Register set literals.
234+
impactBuilder.registerSetLiteral(new SetLiteralUse(
235+
commonElements.setType(elementMap.getDartType(elementType)),
236+
isConstant: isConst,
237+
isEmpty: isEmpty));
235238
}
236239

237240
@override

0 commit comments

Comments
 (0)