From 66c3f1182b64aae0029b70016148681a421f5377 Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Thu, 28 Aug 2025 07:03:56 -0500 Subject: [PATCH 1/3] Minor optimizations for `Range.shift/2` --- lib/elixir/lib/range.ex | 11 ++++++++--- lib/elixir/test/elixir/range_test.exs | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/elixir/lib/range.ex b/lib/elixir/lib/range.ex index 9e207def402..f36fe696efa 100644 --- a/lib/elixir/lib/range.ex +++ b/lib/elixir/lib/range.ex @@ -290,9 +290,14 @@ defmodule Range do """ @doc since: "1.14.0" @spec shift(t, integer) :: t - def shift(first..last//step, steps_to_shift) - when is_integer(steps_to_shift) do - new(first + steps_to_shift * step, last + steps_to_shift * step, step) + def shift(range, steps_to_shift) + + def shift(range, 0) when is_struct(range, Range), do: range + + def shift(first..last//step, steps_to_shift) when is_integer(steps_to_shift) do + shift = steps_to_shift * step + + new(first + shift, last + shift, step) end @doc """ diff --git a/lib/elixir/test/elixir/range_test.exs b/lib/elixir/test/elixir/range_test.exs index d273c992019..9c961343872 100644 --- a/lib/elixir/test/elixir/range_test.exs +++ b/lib/elixir/test/elixir/range_test.exs @@ -60,6 +60,7 @@ defmodule RangeTest do test "shift" do assert Range.shift(0..10//2, 2) == 4..14//2 + assert Range.shift(0..10//2, 0) == 0..10//2 assert Range.shift(10..0//-2, 2) == 6..-4//-2 assert Range.shift(10..0//-2, -2) == 14..4//-2 end From f9cb623258ab2b276a9d8164f701e8b4166bb0bd Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Thu, 28 Aug 2025 07:12:59 -0500 Subject: [PATCH 2/3] Remove unnecessary function head in `Range.shift/2` --- lib/elixir/lib/range.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/elixir/lib/range.ex b/lib/elixir/lib/range.ex index f36fe696efa..0fa768a3d9c 100644 --- a/lib/elixir/lib/range.ex +++ b/lib/elixir/lib/range.ex @@ -290,8 +290,6 @@ defmodule Range do """ @doc since: "1.14.0" @spec shift(t, integer) :: t - def shift(range, steps_to_shift) - def shift(range, 0) when is_struct(range, Range), do: range def shift(first..last//step, steps_to_shift) when is_integer(steps_to_shift) do From 33ce63f693e2f6eb9cd610bf3fbc283855ec24c8 Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Thu, 28 Aug 2025 07:13:43 -0500 Subject: [PATCH 3/3] Update lib/elixir/lib/range.ex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: José Valim --- lib/elixir/lib/range.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elixir/lib/range.ex b/lib/elixir/lib/range.ex index 0fa768a3d9c..dd068b7e547 100644 --- a/lib/elixir/lib/range.ex +++ b/lib/elixir/lib/range.ex @@ -290,7 +290,7 @@ defmodule Range do """ @doc since: "1.14.0" @spec shift(t, integer) :: t - def shift(range, 0) when is_struct(range, Range), do: range + def shift(%Range{} = range, 0), do: range def shift(first..last//step, steps_to_shift) when is_integer(steps_to_shift) do shift = steps_to_shift * step