@@ -6471,29 +6471,37 @@ defmodule Kernel do
64716471 """
64726472 defmacro sigil_r ( term , modifiers )
64736473
6474- defmacro sigil_r ( { :<<>> , _meta , [ string ] } , options ) when is_binary ( string ) do
6475- binary = :elixir_interpolation . unescape_string ( string , & regex_unescape_map / 1 )
6476- regex = Regex . compile! ( binary , :binary . list_to_bin ( options ) )
6477- Macro . escape ( regex )
6474+ defmacro sigil_r ( { :<<>> , _meta , [ binary ] } , options ) when is_binary ( binary ) do
6475+ binary = :elixir_interpolation . unescape_string ( binary , & regex_unescape_map / 1 )
6476+ compile_regex ( binary , options )
64786477 end
64796478
64806479 defmacro sigil_r ( { :<<>> , meta , pieces } , options ) do
6481- binary = { :<<>> , meta , unescape_tokens ( pieces , & regex_unescape_map / 1 ) }
6482- quote ( do: Regex . compile! ( unquote ( binary ) , unquote ( :binary . list_to_bin ( options ) ) ) )
6480+ tuple = { :<<>> , meta , unescape_tokens ( pieces , & regex_unescape_map / 1 ) }
6481+ compile_regex ( tuple , options )
64836482 end
64846483
64856484 defp regex_unescape_map ( :newline ) , do: true
64866485 defp regex_unescape_map ( _ ) , do: false
64876486
64886487 @ doc false
6489- defmacro sigil_R ( { :<<>> , _meta , [ string ] } , options ) when is_binary ( string ) do
6488+ defmacro sigil_R ( { :<<>> , _meta , [ binary ] } , options ) when is_binary ( binary ) do
64906489 IO . warn (
64916490 "~R/.../ is deprecated, use ~r/.../ instead" ,
64926491 Macro.Env . stacktrace ( __CALLER__ )
64936492 )
64946493
6495- regex = Regex . compile! ( string , :binary . list_to_bin ( options ) )
6496- Macro . escape ( regex )
6494+ compile_regex ( binary , options )
6495+ end
6496+
6497+ defp compile_regex ( binary_or_tuple , options ) do
6498+ case is_binary ( binary_or_tuple ) and :erlang . system_info ( :otp_release ) < [ ?2 , ?8 ] do
6499+ true ->
6500+ Macro . escape ( Regex . compile! ( binary_or_tuple , :binary . list_to_bin ( options ) ) )
6501+
6502+ false ->
6503+ quote ( do: Regex . compile! ( unquote ( binary_or_tuple ) , unquote ( :binary . list_to_bin ( options ) ) ) )
6504+ end
64976505 end
64986506
64996507 @ doc ~S"""
0 commit comments