basics for future primitive type

svn: r16840
This commit is contained in:
Matthew Flatt 2009-11-17 19:55:03 +00:00
parent bbd2ff852e
commit e333bf9ffc
6 changed files with 161 additions and 72 deletions

View File

@ -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

View File

@ -69,6 +69,8 @@ typedef struct {
#define FINISHED 3
typedef struct future {
Scheme_Object so;
int id;
pthread_t threadid;
int status;

View File

@ -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)

View File

@ -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)

View File

@ -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_
};

View File

@ -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>");