@@ -101,7 +101,7 @@ defmodule Gradient.AstSpecifierTest do
101101 end
102102
103103 test "tuple" do
104- { tokens , ast } = load ( "Elixir.Tuple .beam" , "tuple.ex" )
104+ { tokens , ast } = load ( "Elixir.TupleEx .beam" , "tuple.ex" )
105105
106106 [ tuple_in_str2 , tuple_in_str , tuple_in_list , _list_in_tuple , tuple | _ ] =
107107 AstSpecifier . run_mappers ( ast , tokens ) |> Enum . reverse ( )
@@ -625,8 +625,29 @@ defmodule Gradient.AstSpecifierTest do
625625 ] } = guarded_case
626626 end
627627
628+ @ tag :ex_lt_1_12
628629 test "range" do
629- { tokens , ast } = load ( "Elixir.RangeEx.beam" , "range.ex" )
630+ { tokens , ast } = load ( "Elixir.SimpleRange.beam" , "simple_range.ex" )
631+
632+ [ range | _ ] = AstSpecifier . run_mappers ( ast , tokens ) |> Enum . reverse ( )
633+
634+ assert { :function , 2 , :range , 0 ,
635+ [
636+ { :clause , 2 , [ ] , [ ] ,
637+ [
638+ { :map , 3 ,
639+ [
640+ { :map_field_assoc , 3 , { :atom , 3 , :__struct__ } , { :atom , 3 , Range } } ,
641+ { :map_field_assoc , 3 , { :atom , 3 , :first } , { :integer , 3 , 1 } } ,
642+ { :map_field_assoc , 3 , { :atom , 3 , :last } , { :integer , 3 , 12 } }
643+ ] }
644+ ] }
645+ ] } = range
646+ end
647+
648+ @ tag :ex_gt_1_11
649+ test "step range" do
650+ { tokens , ast } = load ( "Elixir.RangeStep.beam" , "1.12/range_step.ex" )
630651
631652 [ to_list , match_range , rev_range_step , range_step , range | _ ] =
632653 AstSpecifier . run_mappers ( ast , tokens ) |> Enum . reverse ( )
@@ -711,6 +732,24 @@ defmodule Gradient.AstSpecifierTest do
711732
712733 [ block | _ ] = AstSpecifier . run_mappers ( ast , tokens ) |> Enum . reverse ( )
713734
735+ range =
736+ if System . version ( ) >= "1.12" do
737+ { :map , 11 ,
738+ [
739+ { :map_field_assoc , 11 , { :atom , 11 , :__struct__ } , { :atom , 11 , Range } } ,
740+ { :map_field_assoc , 11 , { :atom , 11 , :first } , { :integer , 11 , 0 } } ,
741+ { :map_field_assoc , 11 , { :atom , 11 , :last } , { :integer , 11 , 5 } } ,
742+ { :map_field_assoc , 11 , { :atom , 11 , :step } , { :integer , 11 , 1 } }
743+ ] }
744+ else
745+ { :map , 11 ,
746+ [
747+ { :map_field_assoc , 11 , { :atom , 11 , :__struct__ } , { :atom , 11 , Range } } ,
748+ { :map_field_assoc , 11 , { :atom , 11 , :first } , { :integer , 11 , 0 } } ,
749+ { :map_field_assoc , 11 , { :atom , 11 , :last } , { :integer , 11 , 5 } }
750+ ] }
751+ end
752+
714753 assert { :function , 10 , :lc_complex , 0 ,
715754 [
716755 { :clause , 10 , [ ] , [ ] ,
@@ -719,13 +758,7 @@ defmodule Gradient.AstSpecifierTest do
719758 [
720759 { :call , 11 , { :remote , 11 , { :atom , 11 , Enum } , { :atom , 11 , :reduce } } ,
721760 [
722- { :map , 11 ,
723- [
724- { :map_field_assoc , 11 , { :atom , 11 , :__struct__ } , { :atom , 11 , Range } } ,
725- { :map_field_assoc , 11 , { :atom , 11 , :first } , { :integer , 11 , 0 } } ,
726- { :map_field_assoc , 11 , { :atom , 11 , :last } , { :integer , 11 , 5 } } ,
727- { :map_field_assoc , 11 , { :atom , 11 , :step } , { :integer , 11 , 1 } }
728- ] } ,
761+ ^ range ,
729762 { nil , 11 } ,
730763 { :fun , 11 ,
731764 { :clauses ,
@@ -823,6 +856,7 @@ defmodule Gradient.AstSpecifierTest do
823856 { :bin_element , 7 , { :string , 7 , 'oops' } , :default , :default }
824857 ] }
825858 ] }
859+ | _
826860 ] }
827861 ] } ,
828862 { :clause , [ generated: true , location: 4 ] ,
@@ -950,6 +984,7 @@ defmodule Gradient.AstSpecifierTest do
950984 :default , :default }
951985 ] }
952986 ] }
987+ | _
953988 ] }
954989 ] , [ ] , [ ] ,
955990 [
@@ -972,6 +1007,7 @@ defmodule Gradient.AstSpecifierTest do
9721007 { :cons , 52 , { :integer , 52 , 49 } ,
9731008 { :cons , 52 , { :integer , 52 , 50 } , { nil , 52 } } }
9741009 ] }
1010+ | _
9751011 ] } ,
9761012 { :integer , 53 , 1 }
9771013 ] , [ ] , [ ] , [ { :op , 55 , :- , { :integer , 55 , 1 } } ] }
@@ -1049,6 +1085,8 @@ defmodule Gradient.AstSpecifierTest do
10491085 [ get2 , get , update , empty , struct | _ ] =
10501086 AstSpecifier . run_mappers ( ast , tokens ) |> Enum . reverse ( )
10511087
1088+ anno_line_17 = if ( System . version ( ) >= "1.12" , do: [ generated: true , location: 17 ] , else: 17 )
1089+
10521090 assert { :function , 8 , :update , 0 ,
10531091 [
10541092 { :clause , 8 , [ ] , [ ] ,
@@ -1070,18 +1108,17 @@ defmodule Gradient.AstSpecifierTest do
10701108 { :map , 17 ,
10711109 [
10721110 { :map_field_exact , 17 , { :atom , [ generated: true , location: 17 ] , :x } ,
1073- { :var , [ generated: true , location: 17 ] , :_@1 } }
1111+ { :var , ^ anno_line_17 , :_@1 } }
10741112 ] }
1075- ] , [ ] , [ { :var , [ generated: true , location: 17 ] , :_@1 } ] } ,
1076- { :clause , [ generated: true , location: 17 ] ,
1077- [ { :var , [ generated: true , location: 17 ] , :_@1 } ] ,
1113+ ] , [ ] , [ { :var , ^ anno_line_17 , :_@1 } ] } ,
1114+ { :clause , [ generated: true , location: 17 ] , [ { :var , ^ anno_line_17 , :_@1 } ] ,
10781115 [
10791116 [
10801117 { :call , [ generated: true , location: 17 ] ,
10811118 { :remote , [ generated: true , location: 17 ] ,
10821119 { :atom , [ generated: true , location: 17 ] , :erlang } ,
10831120 { :atom , [ generated: true , location: 17 ] , :is_map } } ,
1084- [ { :var , [ generated: true , location: 17 ] , :_@1 } ] }
1121+ [ { :var , ^ anno_line_17 , :_@1 } ] }
10851122 ]
10861123 ] ,
10871124 [
@@ -1091,16 +1128,15 @@ defmodule Gradient.AstSpecifierTest do
10911128 [
10921129 { :atom , 17 , :badkey } ,
10931130 { :atom , 17 , :x } ,
1094- { :var , [ generated: true , location: 17 ] , :_@1 }
1131+ { :var , ^ anno_line_17 , :_@1 }
10951132 ] }
10961133 ] }
10971134 ] } ,
1098- { :clause , [ generated: true , location: 17 ] ,
1099- [ { :var , [ generated: true , location: 17 ] , :_@1 } ] , [ ] ,
1135+ { :clause , [ generated: true , location: 17 ] , [ { :var , ^ anno_line_17 , :_@1 } ] , [ ] ,
11001136 [
11011137 { :call , [ generated: true , location: 17 ] ,
1102- { :remote , [ generated: true , location: 17 ] ,
1103- { :var , [ generated: true , location: 17 ] , :_@1 } , { : atom, 17 , :x } } , [ ] }
1138+ { :remote , [ generated: true , location: 17 ] , { :var , ^ anno_line_17 , :_@1 } ,
1139+ { :atom , 17 , :x } } , [ ] }
11041140 ] }
11051141 ] } }
11061142 ] }
0 commit comments