[Skylark] Size tuple slice sizes to avoid unnecessary allocations.

Closes #5698.

PiperOrigin-RevId: 206780174
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 15fb66a..541413f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -319,7 +319,7 @@
         for (Map.Entry<?, ?> entries : dict.entrySet()) {
           list.add(entries.getKey());
         }
-        return  ImmutableList.copyOf(list);
+        return ImmutableList.copyOf(list);
       }
       // For determinism, we sort the keys.
       try {
@@ -512,7 +512,10 @@
     }
     start = clampRangeEndpoint(start, length, step < 0);
     end = clampRangeEndpoint(end, length, step < 0);
-    ImmutableList.Builder<Integer> indices = ImmutableList.builder();
+    // precise computation is slightly more involved, but since it can overshoot only by a single
+    // element it's fine
+    final int expectedMaxSize = Math.abs(start - end) / Math.abs(step) + 1;
+    ImmutableList.Builder<Integer> indices = ImmutableList.builderWithExpectedSize(expectedMaxSize);
     for (int current = start; step > 0 ? current < end : current > end; current += step) {
       indices.add(current);
     }