3
3
# Method and method table pretty-printing
4
4
5
5
function argtype_decl (env, n, t) # -> (argname, argtype)
6
- if isvarargtype (t)
7
- return argtype_decl_vararg (env, n, t)
8
- end
9
6
if isa (n,Expr)
10
7
n = n. args[1 ] # handle n::T in arg list
11
8
end
@@ -17,20 +14,35 @@ function argtype_decl(env, n, t) # -> (argname, argtype)
17
14
if t === Any && ! isempty (s)
18
15
return s, " "
19
16
end
20
- return s, string (t)
17
+ if isvarargtype (t)
18
+ tt, tn = t. parameters[1 ], t. parameters[2 ]
19
+ if isa (tn, TypeVar) && ! tn. bound
20
+ if tt === Any || (isa (tt, TypeVar) && ! tt. bound)
21
+ return string (s, " ..." ), " "
22
+ else
23
+ return s, string_with_env (env, tt) * " ..."
24
+ end
25
+ end
26
+ return s, string_with_env (env, " Vararg{" , tt, " ," , tn, " }" )
27
+ elseif t == String
28
+ return s, " String"
29
+ end
30
+ return s, string_with_env (env, t)
21
31
end
22
32
23
33
function argtype_decl_vararg (env, n, t)
24
- s = string (n. args[1 ])
25
- if n. args[2 ]. head == :...
26
- # x... or x::T... declaration
27
- if t. parameters[1 ] === Any
28
- return string (s, " ..." ), " "
29
- else
30
- return s, string_with_env (env, t. parameters[1 ]) * " ..."
34
+ if isa (n, Expr)
35
+ s = string (n. args[1 ])
36
+ if n. args[2 ]. head == :...
37
+ # x... or x::T... declaration
38
+ if t. parameters[1 ] === Any
39
+ return string (s, " ..." ), " "
40
+ else
41
+ return s, string_with_env (env, t. parameters[1 ]) * " ..."
42
+ end
43
+ elseif t == String
44
+ return s, " String"
31
45
end
32
- elseif t == String
33
- return s, " String"
34
46
end
35
47
# x::Vararg, x::Vararg{T}, or x::Vararg{T,N} declaration
36
48
s, length (n. args[2 ]. args) < 4 ?
0 commit comments