File tree Expand file tree Collapse file tree 2 files changed +27
-3
lines changed
Expand file tree Collapse file tree 2 files changed +27
-3
lines changed Original file line number Diff line number Diff line change @@ -7,11 +7,25 @@ using Base.Meta
77@static if ! isdefined (Base, Symbol (" @nospecialize" ))
88 # 0.7
99 macro nospecialize (arg)
10- earg = esc (arg)
1110 if isa (arg, Symbol)
12- return :($ earg:: ANY )
11+ # @nospecialize(arg)
12+ return :($ (esc (arg)):: ANY )
13+ elseif isa (arg, Expr) && arg. head == :(:: )
14+ # @nospecialize(arg::typ)
15+ # unsupported: needs ::ANY which would change dispatch as determined by ::typ
16+ elseif isa (arg, Expr) && arg. head == :(= )
17+ # @nospecialize(arg=val)
18+ arg, val = arg. args
19+ if isa (arg, Expr) && arg. head == :(:: )
20+ # @nospecialize(arg::typ=val)
21+ # unsupported (see above), but generate a kw arg
22+ arg, typ = arg. args
23+ return Expr (:kw , :($ (esc (arg)):: $ (esc (typ))), esc (val))
24+ else
25+ return Expr (:kw , :($ (esc (arg)):: ANY ), esc (val))
26+ end
1327 end
14- return earg
28+ return esc (arg)
1529 end
1630 export @nospecialize
1731end
Original file line number Diff line number Diff line change @@ -763,6 +763,16 @@ no_specialize(@nospecialize(x)) = sin(1)
763763no_specialize (@nospecialize (x:: Integer )) = sin (2 )
764764@test no_specialize (1.0 ) == sin (1 )
765765@test no_specialize (1 ) == sin (2 )
766+ no_specialize_kw1 (@nospecialize (x= 0 )) = sin (1 )
767+ no_specialize_kw1 (@nospecialize (x:: Integer )) = sin (2 )
768+ @test no_specialize_kw1 (1.0 ) == sin (1 )
769+ @test no_specialize_kw1 (1 ) == sin (2 )
770+ @test no_specialize_kw1 () == sin (2 )
771+ no_specialize_kw2 (@nospecialize (x)) = sin (1 )
772+ no_specialize_kw2 (@nospecialize (x:: Integer = 0 )) = sin (2 )
773+ @test no_specialize_kw2 (1.0 ) == sin (1 )
774+ @test no_specialize_kw2 (1 ) == sin (2 )
775+ @test no_specialize_kw2 () == sin (2 )
766776
767777# 0.7
768778@test read (IOBuffer (" aaaa" ), String) == " aaaa"
You can’t perform that action at this time.
0 commit comments