439
439
,body))))
440
440
(if (or (symbol? name) (globalref? name))
441
441
`(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))))))))
445
447
446
448
; ; wrap expr in nested scopes assigning names to vals
447
449
(define (scopenest names vals expr )
@@ -4127,6 +4129,7 @@ f(x) = yt(x)
4127
4129
'()
4128
4130
(map-cl-convert (butlast (cdr sig))
4129
4131
fname lam namemap defined toplevel interp opaq parsed-method-stack globals locals)))
4132
+ (r (make-ssavalue))
4130
4133
(sig (and sig (if (eq? (car sig) 'block )
4131
4134
(last sig)
4132
4135
sig))))
@@ -4150,7 +4153,7 @@ f(x) = yt(x)
4150
4153
((null? cvs)
4151
4154
`(block
4152
4155
,@sp-inits
4153
- (method ,(cadr e) ,(cl-convert
4156
+ (= ,r ( method ,(cadr e) ,(cl-convert
4154
4157
; ; anonymous functions with keyword args generate global
4155
4158
; ; functions that refer to the type of a local function
4156
4159
(rename-sig-types sig namemap)
@@ -4162,17 +4165,19 @@ f(x) = yt(x)
4162
4165
`(lambda ,(cadr lam2)
4163
4166
(,(clear-capture-bits (car vis))
4164
4167
,@(cdr vis))
4165
- ,body)))
4166
- (latestworld)))
4168
+ ,body))))
4169
+ (latestworld)
4170
+ ,r))
4167
4171
(else
4168
4172
(let* ((exprs (lift-toplevel (convert-lambda lam2 '|#anon| #t '() #f parsed-method-stack)))
4169
4173
(top-stmts (cdr exprs))
4170
4174
(newlam (compact-and-renumber (linearize (car exprs)) 'none 0 )))
4171
4175
`(toplevel-butfirst
4172
4176
(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)
4176
4181
,@top-stmts))))
4177
4182
4178
4183
; ; local case - lift to a new type at top level
@@ -4999,8 +5004,10 @@ f(x) = yt(x)
4999
5004
(let ((l (make-ssavalue)))
5000
5005
(emit `(= ,l ,(compile lam break-labels #t #f )))
5001
5006
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))
5004
5011
(cond (tail (emit-return tail e))
5005
5012
(value e)
5006
5013
(else (emit e)))))
0 commit comments