@@ -38,10 +38,11 @@ expand(Meta, Clauses, E) when is_list(Clauses) ->
38
38
% % Capture
39
39
40
40
capture (Meta , {'/' , _ , [{{'.' , _ , [_ , F ]} = Dot , RequireMeta , []}, A ]}, E ) when is_atom (F ), is_integer (A ) ->
41
- Args = [{ '&' , [], [ X ]} || X <- lists : seq ( 1 , A )] ,
41
+ Args = args_from_arity ( Meta , A , E ) ,
42
42
capture_require (Meta , {Dot , RequireMeta , Args }, E , true );
43
43
44
44
capture (Meta , {'/' , _ , [{F , _ , C }, A ]}, E ) when is_atom (F ), is_integer (A ), is_atom (C ) ->
45
+ Args = args_from_arity (Meta , A , E ),
45
46
ImportMeta =
46
47
case lists :keyfind (import_fa , 1 , Meta ) of
47
48
{import_fa , {Receiver , Context }} ->
@@ -51,7 +52,6 @@ capture(Meta, {'/', _, [{F, _, C}, A]}, E) when is_atom(F), is_integer(A), is_at
51
52
);
52
53
false -> Meta
53
54
end ,
54
- Args = [{'&' , [], [X ]} || X <- lists :seq (1 , A )],
55
55
capture_import (Meta , {F , ImportMeta , Args }, E , true );
56
56
57
57
capture (Meta , {{'.' , _ , [_ , Fun ]}, _ , Args } = Expr , E ) when is_atom (Fun ), is_list (Args ) ->
@@ -155,6 +155,12 @@ do_escape(List, Counter, E, Dict) when is_list(List) ->
155
155
do_escape (Other , _Counter , _E , Dict ) ->
156
156
{Other , Dict }.
157
157
158
+ args_from_arity (_Meta , A , _E ) when is_integer (A ), A >= 0 , A =< 255 ->
159
+ [{'&' , [], [X ]} || X <- lists :seq (1 , A )];
160
+ args_from_arity (Meta , A , E ) ->
161
+ Message = " invalid arity for &, expected a number between 0 and 255, got: ~b " ,
162
+ compile_error (Meta , ? m (E , file ), Message , [A ]).
163
+
158
164
is_sequential_and_not_empty ([]) -> false ;
159
165
is_sequential_and_not_empty (List ) -> is_sequential (List , 1 ).
160
166
0 commit comments