@@ -3723,26 +3723,29 @@ defmodule Kernel do
37233723
37243724    case  function?  do 
37253725      true  -> 
3726-         value  = 
3727-           case  Module . __get_attribute__ ( env . module ,  name ,  line ,  false )  do 
3728-             { _ ,  doc }  when  doc_attr?  ->  doc 
3729-             other  ->  other 
3730-           end 
3731- 
3732-         try  do 
3733-           :elixir_quote . escape ( value ,  :none ,  false ) 
3734-         rescue 
3735-           ex  in  [ ArgumentError ]  -> 
3736-             raise  ArgumentError , 
3737-                   "cannot inject attribute @#{ name }   <> 
3738-                     Exception . message ( ex ) 
3726+         case  Module . __get_attribute__ ( env . module ,  name ,  line ,  false )  do 
3727+           { _ ,  doc }  when  doc_attr?  -> 
3728+             do_at_escape ( name ,  doc ) 
3729+ 
3730+           % { __struct__:  Regex ,  source:  source ,  opts:  opts }  -> 
3731+             # TODO: Remove this in Elixir v2.0 
3732+             IO . warn ( 
3733+               "storing and reading regexes from module attributes is deprecated, "  <> 
3734+                 "inline the regex inside the function definition instead" , 
3735+               env 
3736+             ) 
3737+ 
3738+             quote ( do:  Regex . compile! ( unquote ( source ) ,  unquote ( opts ) ) ) 
3739+ 
3740+           value  -> 
3741+             do_at_escape ( name ,  value ) 
37393742        end 
37403743
37413744      false  when  doc_attr?  -> 
37423745        quote  do 
37433746          case  Module . __get_attribute__ ( __MODULE__ ,  unquote ( name ) ,  unquote ( line ) ,  false )  do 
37443747            { _ ,  doc }  ->  doc 
3745-             other  ->  other 
3748+             value  ->  value 
37463749          end 
37473750        end 
37483751
@@ -3777,6 +3780,17 @@ defmodule Kernel do
37773780    raise  ArgumentError ,  "expected 0 or 1 argument for @#{ name } #{ length ( args ) }  
37783781  end 
37793782
3783+   defp  do_at_escape ( name ,  value )  do 
3784+     try  do 
3785+       :elixir_quote . escape ( value ,  :none ,  false ) 
3786+     rescue 
3787+       ex  in  [ ArgumentError ]  -> 
3788+         raise  ArgumentError , 
3789+               "cannot inject attribute @#{ name }   <> 
3790+                 Exception . message ( ex ) 
3791+     end 
3792+   end 
3793+ 
37803794  # Those are always compile-time dependencies, so we can skip the trace. 
37813795  defp  collect_traces ( :before_compile ,  arg ,  _env ) ,  do:  { arg ,  [ ] } 
37823796  defp  collect_traces ( :after_compile ,  arg ,  _env ) ,  do:  { arg ,  [ ] } 
@@ -6500,6 +6514,7 @@ defmodule Kernel do
65006514  end 
65016515
65026516  defp  compile_regex ( binary_or_tuple ,  options )  do 
6517+     # TODO: Remove this when we require Erlang/OTP 28+ 
65036518    case  is_binary ( binary_or_tuple )  and  :erlang . system_info ( :otp_release )  <  [ ?2 ,  ?8 ]  do 
65046519      true  -> 
65056520        Macro . escape ( Regex . compile! ( binary_or_tuple ,  :binary . list_to_bin ( options ) ) ) 
0 commit comments