basics for future primitive type
svn: r16840
This commit is contained in:
parent
bbd2ff852e
commit
e333bf9ffc
|
@ -988,4 +988,24 @@ void clear_futures(void)
|
|||
g_future_queue = NULL;
|
||||
}
|
||||
|
||||
/**********************************************************************/
|
||||
/* Precise GC */
|
||||
/**********************************************************************/
|
||||
|
||||
#ifdef MZ_PRECISE_GC
|
||||
|
||||
START_XFORM_SKIP;
|
||||
|
||||
#define MARKS_FOR_FUTURE_C
|
||||
#include "mzmark.c"
|
||||
|
||||
static void register_traversers(void)
|
||||
{
|
||||
GC_REG_TRAV(scheme_future_type, future);
|
||||
}
|
||||
|
||||
END_XFORM_SKIP;
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -69,6 +69,8 @@ typedef struct {
|
|||
#define FINISHED 3
|
||||
|
||||
typedef struct future {
|
||||
Scheme_Object so;
|
||||
|
||||
int id;
|
||||
pthread_t threadid;
|
||||
int status;
|
||||
|
|
|
@ -5411,4 +5411,47 @@ static int native_unclosed_proc_plus_case_FIXUP(void *p) {
|
|||
|
||||
/**********************************************************************/
|
||||
|
||||
#ifdef MARKS_FOR_FUTURE_C
|
||||
|
||||
static int future_SIZE(void *p) {
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(future_t));
|
||||
}
|
||||
|
||||
static int future_MARK(void *p) {
|
||||
future_t *c = (future_t *)p;
|
||||
gcMARK(f->runstack);
|
||||
gcMARK(f->runstack_start);
|
||||
gcMARK(f->orig_thread);
|
||||
gcMARK(f->rt_prim_args);
|
||||
gcMARK(f->rt_prim_result);
|
||||
gcMARK(f->retval);
|
||||
gcMARK(f->prev);
|
||||
gcMARK(f->next);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(future_t));
|
||||
}
|
||||
|
||||
static int future_FIXUP(void *p) {
|
||||
future_t *c = (future_t *)p;
|
||||
gcFIXUP(f->runstack);
|
||||
gcFIXUP(f->runstack_start);
|
||||
gcFIXUP(f->orig_thread);
|
||||
gcFIXUP(f->rt_prim_args);
|
||||
gcFIXUP(f->rt_prim_result);
|
||||
gcFIXUP(f->retval);
|
||||
gcFIXUP(f->prev);
|
||||
gcFIXUP(f->next);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(future_t));
|
||||
}
|
||||
|
||||
#define future_IS_ATOMIC 0
|
||||
#define future_IS_CONST_SIZE 1
|
||||
|
||||
|
||||
#endif /* FUTURE */
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
#define GC_REG_TRAV(type, base) GC_register_traversers(type, base ## _SIZE, base ## _MARK, base ## _FIXUP, base ## _IS_CONST_SIZE, base ## _IS_ATOMIC)
|
||||
|
|
|
@ -2218,4 +2218,25 @@ END jit;
|
|||
|
||||
/**********************************************************************/
|
||||
|
||||
START future;
|
||||
|
||||
future {
|
||||
mark:
|
||||
future_t *c = (future_t *)p;
|
||||
gcMARK(f->runstack);
|
||||
gcMARK(f->runstack_start);
|
||||
gcMARK(f->orig_thread);
|
||||
gcMARK(f->rt_prim_args);
|
||||
gcMARK(f->rt_prim_result);
|
||||
gcMARK(f->retval);
|
||||
gcMARK(f->prev);
|
||||
gcMARK(f->next);
|
||||
size:
|
||||
gcBYTES_TO_WORDS(sizeof(future_t));
|
||||
}
|
||||
|
||||
END future;
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
#define GC_REG_TRAV(type, base) GC_register_traversers(type, base ## _SIZE, base ## _MARK, base ## _FIXUP, base ## _IS_CONST_SIZE, base ## _IS_ATOMIC)
|
||||
|
|
|
@ -170,84 +170,85 @@ enum {
|
|||
scheme_rib_delimiter_type, /* 152 */
|
||||
scheme_noninline_proc_type, /* 153 */
|
||||
scheme_prune_context_type, /* 154 */
|
||||
scheme_future_type, /* 155 */
|
||||
|
||||
#ifdef MZTAG_REQUIRED
|
||||
_scheme_last_normal_type_, /* 155 */
|
||||
_scheme_last_normal_type_, /* 156 */
|
||||
|
||||
scheme_rt_weak_array, /* 156 */
|
||||
scheme_rt_weak_array, /* 157 */
|
||||
|
||||
scheme_rt_comp_env, /* 157 */
|
||||
scheme_rt_constant_binding, /* 158 */
|
||||
scheme_rt_resolve_info, /* 159 */
|
||||
scheme_rt_optimize_info, /* 160 */
|
||||
scheme_rt_compile_info, /* 161 */
|
||||
scheme_rt_cont_mark, /* 162 */
|
||||
scheme_rt_saved_stack, /* 163 */
|
||||
scheme_rt_reply_item, /* 164 */
|
||||
scheme_rt_closure_info, /* 165 */
|
||||
scheme_rt_overflow, /* 166 */
|
||||
scheme_rt_overflow_jmp, /* 167 */
|
||||
scheme_rt_meta_cont, /* 168 */
|
||||
scheme_rt_dyn_wind_cell, /* 169 */
|
||||
scheme_rt_dyn_wind_info, /* 170 */
|
||||
scheme_rt_dyn_wind, /* 171 */
|
||||
scheme_rt_dup_check, /* 172 */
|
||||
scheme_rt_thread_memory, /* 173 */
|
||||
scheme_rt_input_file, /* 174 */
|
||||
scheme_rt_input_fd, /* 175 */
|
||||
scheme_rt_oskit_console_input, /* 176 */
|
||||
scheme_rt_tested_input_file, /* 177 */
|
||||
scheme_rt_tested_output_file, /* 178 */
|
||||
scheme_rt_indexed_string, /* 179 */
|
||||
scheme_rt_output_file, /* 180 */
|
||||
scheme_rt_load_handler_data, /* 181 */
|
||||
scheme_rt_pipe, /* 182 */
|
||||
scheme_rt_beos_process, /* 183 */
|
||||
scheme_rt_system_child, /* 184 */
|
||||
scheme_rt_tcp, /* 185 */
|
||||
scheme_rt_write_data, /* 186 */
|
||||
scheme_rt_tcp_select_info, /* 187 */
|
||||
scheme_rt_namespace_option, /* 188 */
|
||||
scheme_rt_param_data, /* 189 */
|
||||
scheme_rt_will, /* 190 */
|
||||
scheme_rt_struct_proc_info, /* 191 */
|
||||
scheme_rt_linker_name, /* 192 */
|
||||
scheme_rt_param_map, /* 193 */
|
||||
scheme_rt_finalization, /* 194 */
|
||||
scheme_rt_finalizations, /* 195 */
|
||||
scheme_rt_cpp_object, /* 196 */
|
||||
scheme_rt_cpp_array_object, /* 197 */
|
||||
scheme_rt_stack_object, /* 198 */
|
||||
scheme_rt_preallocated_object, /* 199 */
|
||||
scheme_thread_hop_type, /* 200 */
|
||||
scheme_rt_srcloc, /* 201 */
|
||||
scheme_rt_evt, /* 202 */
|
||||
scheme_rt_syncing, /* 203 */
|
||||
scheme_rt_comp_prefix, /* 204 */
|
||||
scheme_rt_user_input, /* 205 */
|
||||
scheme_rt_user_output, /* 206 */
|
||||
scheme_rt_compact_port, /* 207 */
|
||||
scheme_rt_read_special_dw, /* 208 */
|
||||
scheme_rt_regwork, /* 209 */
|
||||
scheme_rt_buf_holder, /* 210 */
|
||||
scheme_rt_parameterization, /* 211 */
|
||||
scheme_rt_print_params, /* 212 */
|
||||
scheme_rt_read_params, /* 213 */
|
||||
scheme_rt_native_code, /* 214 */
|
||||
scheme_rt_native_code_plus_case, /* 215 */
|
||||
scheme_rt_jitter_data, /* 216 */
|
||||
scheme_rt_module_exports, /* 217 */
|
||||
scheme_rt_delay_load_info, /* 218 */
|
||||
scheme_rt_marshal_info, /* 219 */
|
||||
scheme_rt_unmarshal_info, /* 220 */
|
||||
scheme_rt_runstack, /* 221 */
|
||||
scheme_rt_sfs_info, /* 222 */
|
||||
scheme_rt_validate_clearing, /* 223 */
|
||||
scheme_rt_rb_node, /* 224 */
|
||||
scheme_rt_comp_env, /* 158 */
|
||||
scheme_rt_constant_binding, /* 159 */
|
||||
scheme_rt_resolve_info, /* 160 */
|
||||
scheme_rt_optimize_info, /* 161 */
|
||||
scheme_rt_compile_info, /* 162 */
|
||||
scheme_rt_cont_mark, /* 163 */
|
||||
scheme_rt_saved_stack, /* 164 */
|
||||
scheme_rt_reply_item, /* 165 */
|
||||
scheme_rt_closure_info, /* 166 */
|
||||
scheme_rt_overflow, /* 167 */
|
||||
scheme_rt_overflow_jmp, /* 168 */
|
||||
scheme_rt_meta_cont, /* 169 */
|
||||
scheme_rt_dyn_wind_cell, /* 170 */
|
||||
scheme_rt_dyn_wind_info, /* 171 */
|
||||
scheme_rt_dyn_wind, /* 172 */
|
||||
scheme_rt_dup_check, /* 173 */
|
||||
scheme_rt_thread_memory, /* 174 */
|
||||
scheme_rt_input_file, /* 175 */
|
||||
scheme_rt_input_fd, /* 176 */
|
||||
scheme_rt_oskit_console_input, /* 177 */
|
||||
scheme_rt_tested_input_file, /* 178 */
|
||||
scheme_rt_tested_output_file, /* 179 */
|
||||
scheme_rt_indexed_string, /* 180 */
|
||||
scheme_rt_output_file, /* 181 */
|
||||
scheme_rt_load_handler_data, /* 182 */
|
||||
scheme_rt_pipe, /* 183 */
|
||||
scheme_rt_beos_process, /* 184 */
|
||||
scheme_rt_system_child, /* 185 */
|
||||
scheme_rt_tcp, /* 186 */
|
||||
scheme_rt_write_data, /* 187 */
|
||||
scheme_rt_tcp_select_info, /* 188 */
|
||||
scheme_rt_namespace_option, /* 189 */
|
||||
scheme_rt_param_data, /* 190 */
|
||||
scheme_rt_will, /* 191 */
|
||||
scheme_rt_struct_proc_info, /* 192 */
|
||||
scheme_rt_linker_name, /* 193 */
|
||||
scheme_rt_param_map, /* 194 */
|
||||
scheme_rt_finalization, /* 195 */
|
||||
scheme_rt_finalizations, /* 196 */
|
||||
scheme_rt_cpp_object, /* 197 */
|
||||
scheme_rt_cpp_array_object, /* 198 */
|
||||
scheme_rt_stack_object, /* 199 */
|
||||
scheme_rt_preallocated_object, /* 200 */
|
||||
scheme_thread_hop_type, /* 201 */
|
||||
scheme_rt_srcloc, /* 202 */
|
||||
scheme_rt_evt, /* 203 */
|
||||
scheme_rt_syncing, /* 204 */
|
||||
scheme_rt_comp_prefix, /* 205 */
|
||||
scheme_rt_user_input, /* 206 */
|
||||
scheme_rt_user_output, /* 207 */
|
||||
scheme_rt_compact_port, /* 208 */
|
||||
scheme_rt_read_special_dw, /* 209 */
|
||||
scheme_rt_regwork, /* 210 */
|
||||
scheme_rt_buf_holder, /* 211 */
|
||||
scheme_rt_parameterization, /* 212 */
|
||||
scheme_rt_print_params, /* 213 */
|
||||
scheme_rt_read_params, /* 214 */
|
||||
scheme_rt_native_code, /* 215 */
|
||||
scheme_rt_native_code_plus_case, /* 216 */
|
||||
scheme_rt_jitter_data, /* 217 */
|
||||
scheme_rt_module_exports, /* 218 */
|
||||
scheme_rt_delay_load_info, /* 219 */
|
||||
scheme_rt_marshal_info, /* 220 */
|
||||
scheme_rt_unmarshal_info, /* 221 */
|
||||
scheme_rt_runstack, /* 222 */
|
||||
scheme_rt_sfs_info, /* 223 */
|
||||
scheme_rt_validate_clearing, /* 224 */
|
||||
scheme_rt_rb_node, /* 225 */
|
||||
#endif
|
||||
|
||||
scheme_place_type, /* 225 */
|
||||
scheme_engine_type, /* 226 */
|
||||
scheme_place_type, /* 226 */
|
||||
scheme_engine_type, /* 227 */
|
||||
|
||||
_scheme_last_type_
|
||||
};
|
||||
|
|
|
@ -268,6 +268,8 @@ scheme_init_type ()
|
|||
set_name(scheme_logger_type, "<logger>");
|
||||
set_name(scheme_log_reader_type, "<log-receiver>");
|
||||
|
||||
set_name(scheme_future_type, "<future>");
|
||||
|
||||
set_name(_scheme_values_types_, "<resurrected>");
|
||||
set_name(_scheme_compiled_values_types_, "<internal>");
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user