Skip to content

Commit 9f43a4d

Browse files
lauraharkercopybara-github
authored andcommitted
Replace for-each loops with indexed loops when iterating over lists for performance
PiperOrigin-RevId: 850105478
1 parent 51d6869 commit 9f43a4d

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

src/com/google/javascript/jscomp/serialization/ColorPool.java

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,10 @@ private Color reconcileObjectProtos(ColorId id, Map<ShardView, TypeProto> viewTo
285285
checkState(proto.hasObject());
286286
ObjectTypeProto objProto = proto.getObject();
287287

288-
for (Integer p : objProto.getInstanceTypeList()) {
289-
instanceColors.add(this.lookupOrReconcileColor(shard.getId(p)));
288+
var instanceTypeIds = objProto.getInstanceTypeList();
289+
for (int i = 0; i < instanceTypeIds.size(); i++) {
290+
Integer instanceTypePointer = instanceTypeIds.get(i);
291+
instanceColors.add(this.lookupOrReconcileColor(shard.getId(instanceTypePointer)));
290292
}
291293

292294
boolean isClosureAssertBool = objProto.getClosureAssert();
@@ -299,8 +301,11 @@ private Color reconcileObjectProtos(ColorId id, Map<ShardView, TypeProto> viewTo
299301
isConstructor |= objProto.getMarkedConstructor();
300302
isInvalidating |= objProto.getIsInvalidating();
301303
propertiesKeepOriginalName |= objProto.getPropertiesKeepOriginalName();
302-
for (Integer p : objProto.getPrototypeList()) {
303-
prototypes.add(this.lookupOrReconcileColor(shard.getId(p)));
304+
305+
var prototypeIds = objProto.getPrototypeList();
306+
for (int i = 0; i < prototypeIds.size(); i++) {
307+
Integer prototypePointer = prototypeIds.get(i);
308+
prototypes.add(this.lookupOrReconcileColor(shard.getId(prototypePointer)));
304309
}
305310
for (int i = 0; i < objProto.getOwnPropertyCount(); i++) {
306311
ownProperties.add(shard.stringPool.get(objProto.getOwnProperty(i)));
@@ -324,7 +329,9 @@ private Color reconcileUnionProtos(ColorId id, Map<ShardView, TypeProto> viewToP
324329
viewToProto.forEach(
325330
(shard, proto) -> {
326331
checkState(proto.hasUnion(), proto);
327-
for (Integer memberPointer : proto.getUnion().getUnionMemberList()) {
332+
var unionMemberList = proto.getUnion().getUnionMemberList();
333+
for (int i = 0; i < unionMemberList.size(); i++) {
334+
Integer memberPointer = unionMemberList.get(i);
328335
ColorId memberId = shard.getId(memberPointer);
329336
Color member = this.lookupOrReconcileColor(memberId);
330337
checkWellFormed(!member.isUnion(), "Reconciling union with non-union", proto);
@@ -356,22 +363,7 @@ private static ImmutableList<ColorId> createTrimmedOffsetToId(TypePool typePool)
356363
TypeProto proto = typePool.getType(i);
357364
switch (proto.getKindCase()) {
358365
case OBJECT -> {}
359-
case UNION -> {
360-
{
361-
checkWellFormed(
362-
proto.getUnion().getUnionMemberCount() > 1, "Union has too few members", proto);
363-
LinkedHashSet<ColorId> members = new LinkedHashSet<>();
364-
for (Integer memberPointer : proto.getUnion().getUnionMemberList()) {
365-
ColorId memberId =
366-
isAxiomatic(memberPointer)
367-
? OFFSET_TO_AXIOMATIC_COLOR.get(memberPointer).getId()
368-
: ids[trimOffset(memberPointer)];
369-
checkWellFormed(memberId != null, "Union member not found", proto);
370-
members.add(memberId);
371-
}
372-
ids[i] = ColorId.union(members);
373-
}
374-
}
366+
case UNION -> ids[i] = createUnionColorId(proto, ids);
375367
default -> throw new AssertionError(proto);
376368
}
377369
}
@@ -385,6 +377,22 @@ private static ImmutableList<ColorId> createTrimmedOffsetToId(TypePool typePool)
385377
return ImmutableList.copyOf(ids);
386378
}
387379

380+
private static ColorId createUnionColorId(TypeProto proto, ColorId[] allObjectIds) {
381+
checkWellFormed(proto.getUnion().getUnionMemberCount() > 1, "Union has too few members", proto);
382+
LinkedHashSet<ColorId> members = new LinkedHashSet<>();
383+
var unionMemberList = proto.getUnion().getUnionMemberList();
384+
for (int i = 0; i < unionMemberList.size(); i++) {
385+
Integer memberPointer = unionMemberList.get(i);
386+
ColorId memberId =
387+
isAxiomatic(memberPointer)
388+
? OFFSET_TO_AXIOMATIC_COLOR.get(memberPointer).getId()
389+
: allObjectIds[trimOffset(memberPointer)];
390+
checkWellFormed(memberId != null, "Union member not found", proto);
391+
members.add(memberId);
392+
}
393+
return ColorId.union(members);
394+
}
395+
388396
private static int validatePointer(int offset, ShardView shard) {
389397
checkWellFormed(
390398
0 <= offset && offset < untrimOffset(shard.trimmedOffsetToId.size()),

src/com/google/javascript/jscomp/serialization/StringPool.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public static StringPool fromProto(StringPoolProto proto) {
4444

4545
ArrayList<String> pool = new ArrayList<>();
4646
pool.add("");
47-
for (ByteString s : proto.getStringsList()) {
47+
var stringsList = proto.getStringsList();
48+
for (int i = 0; i < stringsList.size(); i++) {
49+
ByteString s = stringsList.get(i);
4850
pool.add(decoder.decode(s));
4951
}
5052

src/com/google/javascript/jscomp/serialization/TypedAstDeserializer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,10 @@ private void deserializeTypedAst(
259259
}
260260
}
261261

262-
this.runtimeLibraries.addAll(typedAstProto.getRuntimeLibraryToInjectList());
262+
var runtimeLibraryList = typedAstProto.getRuntimeLibraryToInjectList();
263+
for (int i = 0; i < runtimeLibraryList.size(); i++) {
264+
this.runtimeLibraries.add(runtimeLibraryList.get(i));
265+
}
263266

264267
// TODO(b/248351234): can we avoid some of this work if the shard only contains weak srcs?
265268
// one risk: could checks passes synthesize new externProperties even for weak srcs?

0 commit comments

Comments
 (0)