@@ -484,24 +484,40 @@ function ci_cache_populate(interp, cache, mi, min_world, max_world)
484
484
codeinfos = Pair{CodeInstance, CodeInfo}[]
485
485
@static if VERSION >= v " 1.12.0-DEV.1434"
486
486
# see typeinfer.jl: typeinf_ext_toplevel
487
+ has_compilequeue = VERSION >= v " 1.13.0-DEV.499" || v " 1.12-beta3" <= VERSION < v " 1.13-"
487
488
ci = CC. typeinf_ext (interp, mi, CC. SOURCE_MODE_NOT_REQUIRED)
488
- inspected = IdSet {CodeInstance} ()
489
- tocompile = CodeInstance[ci]
490
- while ! isempty (tocompile)
491
- callee = pop! (tocompile)
492
- callee in inspected && continue
493
- push! (inspected, callee)
489
+ if has_compilequeue
490
+ workqueue = CC. CompilationQueue (; interp)
491
+ push! (workqueue, ci)
492
+ else
493
+ workqueue = CodeInstance[ci]
494
+ inspected = IdSet {CodeInstance} ()
495
+ end
496
+ while ! isempty (workqueue)
497
+ callee = pop! (workqueue)
498
+ if has_compilequeue
499
+ CC. isinspected (workqueue, callee) && continue
500
+ CC. markinspected! (workqueue, callee)
501
+ else
502
+ callee in inspected && continue
503
+ push! (inspected, callee)
504
+ end
505
+
494
506
# now make sure everything has source code, if desired
495
507
mi = CC. get_ci_mi (callee)
496
- def = mi. def
497
508
if CC. use_const_api (callee)
498
509
src = CC. codeinfo_for_const (interp, mi, ci. rettype_const)
499
510
else
500
511
# TODO : typeinf_code could return something with different edges/ages/owner/abi (needing an update to callee), which we don't handle here
501
512
src = CC. typeinf_code (interp, mi, true )
502
513
end
503
514
if src isa CodeInfo
504
- CC. collectinvokes! (tocompile, src)
515
+ if has_compilequeue
516
+ sptypes = CC. sptypes_from_meth_instance (mi)
517
+ CC. collectinvokes! (workqueue, src, sptypes)
518
+ else
519
+ CC. collectinvokes! (workqueue, src)
520
+ end
505
521
push! (codeinfos, callee => src)
506
522
end
507
523
end
0 commit comments