File tree 2 files changed +16
-8
lines changed
2 files changed +16
-8
lines changed Original file line number Diff line number Diff line change @@ -4119,7 +4119,7 @@ f(x) = yt(x)
4119
4119
(cons (car e)
4120
4120
(map-cl-convert (cdr e) fname lam namemap defined toplevel interp opaq globals))))))))
4121
4121
4122
- (define (closure-convert e ) (cl-convert e #f #f #f #f #f #f #f ))
4122
+ (define (closure-convert e ) (cl-convert e #f #f (table) (table) #f #f #f ))
4123
4123
4124
4124
; ; pass 5: convert to linear IR
4125
4125
@@ -4219,17 +4219,21 @@ f(x) = yt(x)
4219
4219
(loop (cdr s))))))
4220
4220
`(pop_exception ,restore-token))))
4221
4221
(define (emit-return x )
4222
- (define (actually-return x )
4223
- (let* ((x (if rett
4224
- (compile (convert-for-type-decl x rett) '() #t #f )
4225
- x))
4226
- (tmp (if ((if (null? catch-token-stack) valid-ir-return? simple-atom?) x)
4222
+ (define (emit- x )
4223
+ (let* ((tmp (if ((if (null? catch-token-stack) valid-ir-return? simple-atom?) x)
4227
4224
#f
4228
4225
(make-ssavalue))))
4229
- (if tmp (emit `(= ,tmp ,x)))
4226
+ (if tmp
4227
+ (begin (emit `(= ,tmp ,x)) tmp)
4228
+ x)))
4229
+ (define (actually-return x )
4230
+ (let* ((x (if rett
4231
+ (compile (convert-for-type-decl (emit- x) rett) '() #t #f )
4232
+ x))
4233
+ (x (emit- x)))
4230
4234
(let ((pexc (pop-exc-expr catch-token-stack '() )))
4231
4235
(if pexc (emit pexc)))
4232
- (emit `(return ,( or tmp x) ))))
4236
+ (emit `(return ,x ))))
4233
4237
(if x
4234
4238
(if (> handler-level 0 )
4235
4239
(let ((tmp (cond ((and (simple-atom? x) (or (not (ssavalue? x)) (not finally-handler))) #f )
Original file line number Diff line number Diff line change @@ -3276,3 +3276,7 @@ end
3276
3276
@test m. Foo. bar === 1
3277
3277
@test Core. get_binding_type (m. Foo, :bar ) == Any
3278
3278
end
3279
+
3280
+ # issue 44723
3281
+ demo44723 ():: Any = Base. Experimental. @opaque () -> true ? 1 : 2
3282
+ @test demo44723 ()() == 1
You can’t perform that action at this time.
0 commit comments