diff options
author | Taras Tsugrii <ttsugrii@fb.com> | 2018-07-31 10:04:51 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-31 10:11:53 -0700 |
commit | ab8a844240cf6ccb4ee46e6bb8795fcc2b3fe6be (patch) | |
tree | 7afd59450c95d53a7219ef15437fe7f373d53a9e /src/main/java/com/google/devtools/build/lib/syntax | |
parent | b292ad1fc288ec69f60478b57acd00dbe9ca1b58 (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.java | 7 |
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); } |