Skip to content

Commit b986db7

Browse files
committed
Make @overlay return the added method
1 parent 45448cd commit b986db7

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

src/julia-syntax.scm

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4127,6 +4127,7 @@ f(x) = yt(x)
41274127
'()
41284128
(map-cl-convert (butlast (cdr sig))
41294129
fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)))
4130+
(r (make-ssavalue))
41304131
(sig (and sig (if (eq? (car sig) 'block)
41314132
(last sig)
41324133
sig))))
@@ -4150,7 +4151,7 @@ f(x) = yt(x)
41504151
((null? cvs)
41514152
`(block
41524153
,@sp-inits
4153-
(method ,(cadr e) ,(cl-convert
4154+
(= ,r (method ,(cadr e) ,(cl-convert
41544155
;; anonymous functions with keyword args generate global
41554156
;; functions that refer to the type of a local function
41564157
(rename-sig-types sig namemap)
@@ -4162,17 +4163,19 @@ f(x) = yt(x)
41624163
`(lambda ,(cadr lam2)
41634164
(,(clear-capture-bits (car vis))
41644165
,@(cdr vis))
4165-
,body)))
4166-
(latestworld)))
4166+
,body))))
4167+
(latestworld)
4168+
,r))
41674169
(else
41684170
(let* ((exprs (lift-toplevel (convert-lambda lam2 '|#anon| #t '() #f parsed-method-stack)))
41694171
(top-stmts (cdr exprs))
41704172
(newlam (compact-and-renumber (linearize (car exprs)) 'none 0)))
41714173
`(toplevel-butfirst
41724174
(block ,@sp-inits
4173-
(method ,(cadr e) ,(cl-convert sig fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)
4174-
,(julia-bq-macro newlam))
4175-
(latestworld))
4175+
(= ,r (method ,(cadr e) ,(cl-convert sig fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)
4176+
,(julia-bq-macro newlam)))
4177+
(latestworld)
4178+
,r)
41764179
,@top-stmts))))
41774180

41784181
;; local case - lift to a new type at top level
@@ -4999,8 +5002,10 @@ f(x) = yt(x)
49995002
(let ((l (make-ssavalue)))
50005003
(emit `(= ,l ,(compile lam break-labels #t #f)))
50015004
l))))
5002-
(emit `(method ,(or (cadr e) '(false)) ,sig ,lam))
5003-
(if value (compile '(null) break-labels value tail)))
5005+
(let ((val (make-ssavalue)))
5006+
(emit `(= ,val (method ,(or (cadr e) '(false)) ,sig ,lam)))
5007+
(if tail (emit-return tail val))
5008+
val))
50045009
(cond (tail (emit-return tail e))
50055010
(value e)
50065011
(else (emit e)))))

test/core.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8308,11 +8308,12 @@ end
83088308
module OverlayModule
83098309

83108310
using Base.Experimental: @MethodTable, @overlay
8311+
using Test
83118312

83128313
@MethodTable mt
83138314
# long function def
8314-
@overlay mt function sin(x::Float64)
8315-
1
8315+
let m = @overlay mt function sin(x::Float64); 1; end
8316+
@test isa(m, Method)
83168317
end
83178318
# short function def
83188319
@overlay mt cos(x::Float64) = 2

0 commit comments

Comments
 (0)