@@ -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 "" 
486486        #  see typeinfer.jl: typeinf_ext_toplevel
487+         has_compilequeue =  VERSION  >=  v "" ||  v "" <=  VERSION  <  v "" 
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