@@ -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)))))
0 commit comments