@@ -484,24 +484,40 @@ function ci_cache_populate(interp, cache, mi, min_world, max_world)
484484 codeinfos = Pair{CodeInstance, CodeInfo}[]
485485 @static if VERSION >= v " 1.12.0-DEV.1434"
486486 # see typeinfer.jl: typeinf_ext_toplevel
487+ has_compilequeue = VERSION >= v " 1.13.0-DEV.499" || v " 1.12-beta3" <= VERSION < v " 1.13-"
487488 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+
494506 # now make sure everything has source code, if desired
495507 mi = CC. get_ci_mi (callee)
496- def = mi. def
497508 if CC. use_const_api (callee)
498509 src = CC. codeinfo_for_const (interp, mi, ci. rettype_const)
499510 else
500511 # TODO : typeinf_code could return something with different edges/ages/owner/abi (needing an update to callee), which we don't handle here
501512 src = CC. typeinf_code (interp, mi, true )
502513 end
503514 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
505521 push! (codeinfos, callee => src)
506522 end
507523 end
0 commit comments