Skip to content

Commit d448a7a

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

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/julia-syntax.scm

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,11 @@
439439
,body))))
440440
(if (or (symbol? name) (globalref? name))
441441
`(block ,@generator (method ,name) (latestworld-if-toplevel) ,mdef (unnecessary ,name)) ;; return the function
442-
(if (not (null? generator))
443-
`(block ,@generator ,mdef)
444-
mdef))))))
442+
(if (overlay? name)
443+
(if (not (null? generator))
444+
`(block ,@generator ,mdef)
445+
mdef)
446+
`(block ,@generator ,mdef (null))))))))
445447

446448
;; wrap expr in nested scopes assigning names to vals
447449
(define (scopenest names vals expr)
@@ -4127,6 +4129,7 @@ f(x) = yt(x)
41274129
'()
41284130
(map-cl-convert (butlast (cdr sig))
41294131
fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)))
4132+
(r (make-ssavalue))
41304133
(sig (and sig (if (eq? (car sig) 'block)
41314134
(last sig)
41324135
sig))))
@@ -4150,7 +4153,7 @@ f(x) = yt(x)
41504153
((null? cvs)
41514154
`(block
41524155
,@sp-inits
4153-
(method ,(cadr e) ,(cl-convert
4156+
(= ,r (method ,(cadr e) ,(cl-convert
41544157
;; anonymous functions with keyword args generate global
41554158
;; functions that refer to the type of a local function
41564159
(rename-sig-types sig namemap)
@@ -4162,17 +4165,19 @@ f(x) = yt(x)
41624165
`(lambda ,(cadr lam2)
41634166
(,(clear-capture-bits (car vis))
41644167
,@(cdr vis))
4165-
,body)))
4166-
(latestworld)))
4168+
,body))))
4169+
(latestworld)
4170+
,r))
41674171
(else
41684172
(let* ((exprs (lift-toplevel (convert-lambda lam2 '|#anon| #t '() #f parsed-method-stack)))
41694173
(top-stmts (cdr exprs))
41704174
(newlam (compact-and-renumber (linearize (car exprs)) 'none 0)))
41714175
`(toplevel-butfirst
41724176
(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))
4177+
(= ,r (method ,(cadr e) ,(cl-convert sig fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)
4178+
,(julia-bq-macro newlam)))
4179+
(latestworld)
4180+
,r)
41764181
,@top-stmts))))
41774182

41784183
;; local case - lift to a new type at top level
@@ -4999,8 +5004,10 @@ f(x) = yt(x)
49995004
(let ((l (make-ssavalue)))
50005005
(emit `(= ,l ,(compile lam break-labels #t #f)))
50015006
l))))
5002-
(emit `(method ,(or (cadr e) '(false)) ,sig ,lam))
5003-
(if value (compile '(null) break-labels value tail)))
5007+
(let ((val (make-ssavalue)))
5008+
(emit `(= ,val (method ,(or (cadr e) '(false)) ,sig ,lam)))
5009+
(if tail (emit-return tail val))
5010+
val))
50045011
(cond (tail (emit-return tail e))
50055012
(value e)
50065013
(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)