aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar Taras Tsugrii <ttsugrii@fb.com>2018-07-31 10:04:51 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-31 10:11:53 -0700
commitab8a844240cf6ccb4ee46e6bb8795fcc2b3fe6be (patch)
tree7afd59450c95d53a7219ef15437fe7f373d53a9e /src/main/java/com/google/devtools/build/lib/syntax
parentb292ad1fc288ec69f60478b57acd00dbe9ca1b58 (diff)
[Skylark] Size tuple slice sizes to avoid unnecessary allocations.
Closes #5698. PiperOrigin-RevId: 206780174
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java7
1 files changed, 5 insertions, 2 deletions
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 15fb66abd4..541413f4c1 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 @@ public final class EvalUtils {
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 @@ public final class EvalUtils {
}
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);
}