@@ -96,32 +96,52 @@ void jl_get_function_id_impl(void *native_code, jl_code_instance_t *codeinst,
9696}
9797
9898extern " C" JL_DLLEXPORT_CODEGEN
99- void jl_get_llvm_mis_impl (void *native_code, arraylist_t * MIs )
99+ void jl_get_llvm_mis_impl (void *native_code, size_t *num_elements, jl_method_instance_t **data )
100100{
101- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
102- auto map = data->jl_fvar_map ;
101+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
102+ auto &map = desc->jl_fvar_map ;
103+
104+ if (data == NULL ) {
105+ *num_elements = map.size ();
106+ return ;
107+ }
108+
109+ assert (*num_elements == map.size ());
110+ size_t i = 0 ;
103111 for (auto &ci : map) {
104- jl_method_instance_t *mi = ci.first ->def ;
105- arraylist_push (MIs, mi);
112+ data[i++] = ci.first ->def ;
106113 }
107114}
108115
109116extern " C" JL_DLLEXPORT_CODEGEN
110- void jl_get_llvm_gvs_impl (void *native_code, arraylist_t *gvs )
117+ void jl_get_llvm_gvs_impl (void *native_code, size_t *num_elements, void **data )
111118{
112119 // map a memory location (jl_value_t or jl_binding_t) to a GlobalVariable
113- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
114- arraylist_grow (gvs, data->jl_value_to_llvm .size ());
115- memcpy (gvs->items , data->jl_value_to_llvm .data (), gvs->len * sizeof (void *));
120+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
121+ auto &value_map = desc->jl_value_to_llvm ;
122+
123+ if (data == NULL ) {
124+ *num_elements = value_map.size ();
125+ return ;
126+ }
127+
128+ assert (*num_elements == value_map.size ());
129+ memcpy (data, value_map.data (), *num_elements * sizeof (void *));
116130}
117131
118132extern " C" JL_DLLEXPORT_CODEGEN
119- void jl_get_llvm_external_fns_impl (void *native_code, arraylist_t *external_fns )
133+ void jl_get_llvm_external_fns_impl (void *native_code, size_t *num_elements, jl_code_instance_t *data )
120134{
121- jl_native_code_desc_t *data = (jl_native_code_desc_t *)native_code;
122- arraylist_grow (external_fns, data->jl_external_to_llvm .size ());
123- memcpy (external_fns->items , data->jl_external_to_llvm .data (),
124- external_fns->len * sizeof (jl_code_instance_t *));
135+ jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
136+ auto &external_map = desc->jl_external_to_llvm ;
137+
138+ if (data == NULL ) {
139+ *num_elements = external_map.size ();
140+ return ;
141+ }
142+
143+ assert (*num_elements == external_map.size ());
144+ memcpy (data, external_map.data (), *num_elements * sizeof (jl_code_instance_t *));
125145}
126146
127147extern " C" JL_DLLEXPORT_CODEGEN
0 commit comments