@@ -1931,6 +1931,36 @@ jl_code_instance_t *jl_method_compiled(jl_method_instance_t *mi, size_t world)
19311931    return  NULL ;
19321932}
19331933
1934+ static  void  record_precompile_statement (jl_method_instance_t  * mi )
1935+ {
1936+     static  ios_t  f_precompile ;
1937+     static  JL_STREAM *  s_precompile  =  NULL ;
1938+     jl_method_t  * def  =  mi -> def .method ;
1939+     if  (jl_options .trace_compile  ==  NULL )
1940+         return ;
1941+     if  (!jl_is_method (def ))
1942+         return ;
1943+ 
1944+     if  (s_precompile  ==  NULL ) {
1945+         const  char  * t  =  jl_options .trace_compile ;
1946+         if  (!strncmp (t , "stderr" , 6 )) {
1947+             s_precompile  =  JL_STDERR ;
1948+         }
1949+         else  {
1950+             if  (ios_file (& f_precompile , t , 1 , 1 , 1 , 1 ) ==  NULL )
1951+                 jl_errorf ("cannot open precompile statement file \"%s\" for writing" , t );
1952+             s_precompile  =  (JL_STREAM * ) & f_precompile ;
1953+         }
1954+     }
1955+     if  (!jl_has_free_typevars (mi -> specTypes )) {
1956+         jl_printf (s_precompile , "precompile(" );
1957+         jl_static_show (s_precompile , mi -> specTypes );
1958+         jl_printf (s_precompile , ")\n" );
1959+         if  (s_precompile  !=  JL_STDERR )
1960+             ios_flush (& f_precompile );
1961+     }
1962+ }
1963+ 
19341964jl_code_instance_t  * jl_compile_method_internal (jl_method_instance_t  * mi , size_t  world )
19351965{
19361966    jl_code_instance_t  * codeinst  =  jl_method_compiled (mi , world );
@@ -1962,6 +1992,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
19621992                codeinst -> rettype_const  =  unspec -> rettype_const ;
19631993                codeinst -> invoke  =  unspec -> invoke ;
19641994                jl_mi_cache_insert (mi , codeinst );
1995+                 record_precompile_statement (mi );
19651996                return  codeinst ;
19661997            }
19671998        }
@@ -1976,6 +2007,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
19762007                0 , 1 , ~(size_t )0 );
19772008            codeinst -> invoke  =  jl_fptr_interpret_call ;
19782009            jl_mi_cache_insert (mi , codeinst );
2010+             record_precompile_statement (mi );
19792011            return  codeinst ;
19802012        }
19812013        if  (compile_option  ==  JL_OPTIONS_COMPILE_OFF ) {
@@ -2014,6 +2046,9 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
20142046        codeinst -> invoke  =  ucache -> invoke ;
20152047        jl_mi_cache_insert (mi , codeinst );
20162048    }
2049+     else  {
2050+         record_precompile_statement (mi );
2051+     }
20172052    jl_atomic_store_relaxed (& codeinst -> precompile , 1 );
20182053    return  codeinst ;
20192054}
0 commit comments