@@ -365,6 +365,28 @@ defmodule Module.Types.Of do
365365
366366 is_clauses = [ { [ term ( ) ] , boolean ( ) } ]
367367
368+ args_or_arity = union ( list ( term ( ) ) , integer ( ) )
369+ args_or_none = union ( list ( term ( ) ) , atom ( [ :none ] ) )
370+
371+ kw = fn kw ->
372+ kw
373+ |> Enum . map ( fn { key , type } when is_atom ( key ) ->
374+ tuple ( [ atom ( [ key ] ) , type ] )
375+ end )
376+ |> Enum . reduce ( & union / 2 )
377+ |> list ( )
378+ end
379+
380+ extra_info = kw . ( file: list ( integer ( ) ) , line: integer ( ) , error_info: open_map ( ) )
381+
382+ raise_stacktrace =
383+ list (
384+ tuple ( [ atom ( ) , atom ( ) , args_or_arity , extra_info ] )
385+ |> union ( tuple ( [ atom ( ) , atom ( ) , args_or_arity ] ) )
386+ |> union ( tuple ( [ fun ( ) , args_or_arity , extra_info ] ) )
387+ |> union ( tuple ( [ fun ( ) , args_or_arity ] ) )
388+ )
389+
368390 for { mod , fun , clauses } <- [
369391 # :binary
370392 { :binary , :copy , [ { [ binary ( ) , integer ( ) ] , binary ( ) } ] } ,
@@ -403,6 +425,9 @@ defmodule Module.Types.Of do
403425 { :erlang , :byte_size , [ { [ binary ( ) ] , integer ( ) } ] } ,
404426 { :erlang , :ceil , [ { [ union ( integer ( ) , float ( ) ) ] , integer ( ) } ] } ,
405427 { :erlang , :div , [ { [ integer ( ) , integer ( ) ] , integer ( ) } ] } ,
428+ { :erlang , :error , [ { [ term ( ) ] , none ( ) } ] } ,
429+ { :erlang , :error , [ { [ term ( ) , args_or_none ] , none ( ) } ] } ,
430+ { :erlang , :error , [ { [ term ( ) , args_or_none , kw . ( error_info: open_map ( ) ) ] , none ( ) } ] } ,
406431 { :erlang , :floor , [ { [ union ( integer ( ) , float ( ) ) ] , integer ( ) } ] } ,
407432 { :erlang , :function_exported , [ { [ atom ( ) , atom ( ) , integer ( ) ] , boolean ( ) } ] } ,
408433 { :erlang , :integer_to_binary , [ { [ integer ( ) ] , binary ( ) } ] } ,
@@ -437,6 +462,7 @@ defmodule Module.Types.Of do
437462 { :erlang , :node , [ { [ ] , atom ( ) } ] } ,
438463 { :erlang , :node , [ { [ pid ( ) |> union ( reference ( ) ) |> union ( port ( ) ) ] , atom ( ) } ] } ,
439464 { :erlang , :not , [ { [ atom ( [ false ] ) ] , atom ( [ true ] ) } , { [ atom ( [ true ] ) ] , atom ( [ false ] ) } ] } ,
465+ { :erlang , :raise , [ { [ atom ( [ :error , :exit , :throw ] ) , term ( ) , raise_stacktrace ] , none ( ) } ] } ,
440466 { :erlang , :rem , [ { [ integer ( ) , integer ( ) ] , integer ( ) } ] } ,
441467 { :erlang , :round , [ { [ union ( integer ( ) , float ( ) ) ] , integer ( ) } ] } ,
442468 { :erlang , :self , [ { [ ] , pid ( ) } ] } ,
0 commit comments