#include #include "prescheme.h" #include "scheme48vm.h" static long copy_weak_pointer(long, char *, char **); static void clean_weak_pointers(void); static char gc_recordP(long); static void note_undumpableB(long); void s48_write_barrier(long, char *, long); long s48_heap_size(void); long s48_preallocate_space(long); void s48_register_static_areas(long, char **, long*, long, char **, long*); long s48_gc_count(void); void s48_end_collection(void); long s48_undumpable_records(long*); long s48_startup_procedure(void); long s48_initial_symbols(void); long s48_initial_imported_bindings(void); long s48_initial_exported_bindings(void); long s48_resumer_records(void); void s48_set_image_valuesB(long, long, long, long, long); void s48_initialization_completeB(void); void s48_initialize_heap(char *, long); char s48_availableP(long); char s48_image_writing_okayP(void); char * s48_allocate_space(long, long, long); long s48_available(void); char s48_extantP(long); long s48_check_image_header(char*); long s48_find_all(long); long s48_read_image(void); long s48_find_all_records(long); long s48_trace_locationsB(char *, char *); void s48_do_gc(void); long s48_trace_stob_contentsB(long); void s48_begin_collection(void); long s48_trace_value(long); long s48_write_image(long, FILE *); void s48_initializing_gc_root(void); static char * Soldspace_hpS; static char * Soldspace_limitS; static char * Snewspace_beginS; static char * Snewspace_endS; static char * Soldspace_beginS; static char * Soldspace_endS; static char * *Spure_areasS; static char * *Simpure_areasS; static long *Spure_sizesS; static long *Simpure_sizesS; static long Spure_area_countS; static long Simpure_area_countS; static long Sfinding_typeS; static long Sgc_countS; static char Swriting_imagePS; static long Sundumpable_recordsS; static long Sundumpable_countS; static char * Sfrom_beginS; static char * Sfrom_endS; static char * Sweak_pointer_hpS; static char * Sweak_pointer_limitS; static long SstatusS; static char SeofPS; static FILE * Simage_portS; static char * Sold_beginS; static char * Sold_hpS; static long Sstartup_procedureS; static long SsymbolsS; static long Simported_bindingsS; static long Sexported_bindingsS; static long Sresumer_recordsS; static char SinitializingPS; static long Hthe_record_type9260; char * s48_ShpS; char * s48_SlimitS; static long copy_weak_pointer(long weak_1X, char * frontier_2X, char * *TT0) { char * arg0K0; long new_7X; char * frontier_6X; char * new_frontier_5X; char * old_4X; char * x_3X; { x_3X = Sweak_pointer_hpS; if ((x_3X == NULL)) { goto L2423;} else { if (((Sweak_pointer_hpS) < (Sweak_pointer_limitS))) { arg0K0 = frontier_2X; goto L2428;} else { goto L2423;}}} L2423: { old_4X = Sweak_pointer_hpS; new_frontier_5X = frontier_2X + 1024; Sweak_pointer_hpS = frontier_2X; Sweak_pointer_limitS = new_frontier_5X; *((long *) (Sweak_pointer_hpS)) = 261190; *((long *) ((Sweak_pointer_hpS) + 8)) = (((long) old_4X)); arg0K0 = new_frontier_5X; goto L2428;} L2428: { frontier_6X = arg0K0; new_7X = 3 + (((long) ((Sweak_pointer_hpS) + 4))); *((long *) ((Sweak_pointer_hpS) + 4)) = (*((long *) (((char *) (-3 + weak_1X))))); Sweak_pointer_hpS = ((Sweak_pointer_hpS) + 8); *((long *) ((((char *) (-3 + weak_1X))) + -4)) = new_7X; *TT0 = frontier_6X; return new_7X;} } static void clean_weak_pointers(void) { char * arg0K1; char * arg0K0; long arg1K0; long x2_17X; long h_16X; char * a_15X; long value_14X; char * scan_13X; char * next_12X; char * end_11X; char * start_10X; char * end_9X; char * x_8X; { if (((Sweak_pointer_hpS) == NULL)) { return;} else { x_8X = Sweak_pointer_limitS; end_9X = Sweak_pointer_hpS; arg0K0 = (x_8X + -1024); arg0K1 = end_9X; goto L3994;}} L3994: { start_10X = arg0K0; end_11X = arg0K1; next_12X = ((char *) (*((long *) (start_10X + 8)))); arg0K0 = start_10X; goto L2635;} L2635: { scan_13X = arg0K0; if ((scan_13X < end_11X)) { *((long *) scan_13X) = 1074; value_14X = *((long *) (scan_13X + 4)); if ((3 == (3 & value_14X))) { a_15X = ((char *) (-3 + value_14X)); if ((a_15X < (Sfrom_beginS))) { goto L2681;} else { if ((a_15X < (Sfrom_endS))) { if ((3 == (3 & value_14X))) { h_16X = *((long *) ((((char *) (-3 + value_14X))) + -4)); if ((3 == (3 & h_16X))) { arg1K0 = h_16X; goto L2676;} else { arg1K0 = 1; goto L2676;}} else { goto L2681;}} else { goto L2681;}}} else { goto L2681;}} else { if ((next_12X == NULL)) { if ((end_9X < (Sweak_pointer_limitS))) { *((long *) end_9X) = (70 + ((((-4 & ((Sweak_pointer_limitS) - (end_9X + 4))))<<8))); return;} else { return;}} else { arg0K0 = (next_12X + -1024); arg0K1 = next_12X; goto L3994;}}} L2681: { arg0K0 = (scan_13X + 8); goto L2635;} L2676: { x2_17X = arg1K0; *((long *) (scan_13X + 4)) = x2_17X; goto L2681;} } static char gc_recordP(long x_18X) { long header_19X; { if ((3 == (3 & x_18X))) { header_19X = *((long *) ((((char *) (-3 + x_18X))) + -4)); if ((3 == (3 & header_19X))) { if ((3 == (3 & header_19X))) { return (8 == (31 & ((((*((long *) ((((char *) (-3 + header_19X))) + -4))))>>2))));} else { return 0;}} else { if ((3 == (3 & x_18X))) { return (8 == (31 & ((((*((long *) ((((char *) (-3 + x_18X))) + -4))))>>2))));} else { return 0;}}} else { return 0;}} } static void note_undumpableB(long thing_20X) { long arg1K0; char * temp_34X; char * temp_33X; char * temp_32X; char * temp_31X; long x_30X; char * new_29X; long b_28X; char v_27X; char * temp_26X; char * temp_25X; char * temp_24X; char * temp_23X; long list_22X; long list_21X; { if ((1000 < (Sundumpable_countS))) { return;} else { list_21X = Sundumpable_recordsS; arg1K0 = list_21X; goto L6367;}} L6367: { list_22X = arg1K0; if ((25 == list_22X)) { Sundumpable_countS = (1 + (Sundumpable_countS)); temp_23X = s48_SlimitS; s48_SlimitS = (Soldspace_limitS); Soldspace_limitS = temp_23X; temp_24X = s48_ShpS; s48_ShpS = (Soldspace_hpS); Soldspace_hpS = temp_24X; temp_25X = Snewspace_beginS; Snewspace_beginS = (Soldspace_beginS); Soldspace_beginS = temp_25X; temp_26X = Snewspace_endS; Snewspace_endS = (Soldspace_endS); Soldspace_endS = temp_26X; v_27X = ((s48_ShpS) + 12) < (s48_SlimitS); if (v_27X) { b_28X = Sundumpable_recordsS; new_29X = s48_ShpS; s48_ShpS = ((s48_ShpS) + 12); *((long *) new_29X) = 2050; x_30X = 3 + (((long) (new_29X + 4))); *((long *) (((char *) (-3 + x_30X)))) = thing_20X; *((long *) ((((char *) (-3 + x_30X))) + 4)) = b_28X; Sundumpable_recordsS = x_30X; goto L6289;} else { goto L6289;}} else { if (((*((long *) (((char *) (-3 + list_22X))))) == thing_20X)) { return;} else { arg1K0 = (*((long *) ((((char *) (-3 + list_22X))) + 4))); goto L6367;}}} L6289: { temp_31X = s48_SlimitS; s48_SlimitS = (Soldspace_limitS); Soldspace_limitS = temp_31X; temp_32X = s48_ShpS; s48_ShpS = (Soldspace_hpS); Soldspace_hpS = temp_32X; temp_33X = Snewspace_beginS; Snewspace_beginS = (Soldspace_beginS); Soldspace_beginS = temp_33X; temp_34X = Snewspace_endS; Snewspace_endS = (Soldspace_endS); Soldspace_endS = temp_34X; return;} } void s48_write_barrier(long stob_35X, char * address_36X, long value_37X) { { return;} } long s48_heap_size(void) { { return ((Snewspace_endS) - (Snewspace_beginS));} } long s48_preallocate_space(long cells_38X) { { return 0;} } void s48_register_static_areas(long pure_count_39X, char * *pure_areas_40X, long *pure_sizes_41X, long impure_count_42X, char * *impure_areas_43X, long *impure_sizes_44X) { { Spure_area_countS = pure_count_39X; Spure_areasS = pure_areas_40X; Spure_sizesS = pure_sizes_41X; Simpure_area_countS = impure_count_42X; Simpure_areasS = impure_areas_43X; Simpure_sizesS = impure_sizes_44X; return;} } long s48_gc_count(void) { { return (Sgc_countS);} } void s48_end_collection(void) { { Sgc_countS = (1 + (Sgc_countS)); return;} } long s48_undumpable_records(long *TT0) { { *TT0 = (Sundumpable_countS); return (Sundumpable_recordsS);} } long s48_startup_procedure(void) { { return (Sstartup_procedureS);} } long s48_initial_symbols(void) { { return (SsymbolsS);} } long s48_initial_imported_bindings(void) { { return (Simported_bindingsS);} } long s48_initial_exported_bindings(void) { { return (Sexported_bindingsS);} } long s48_resumer_records(void) { { return (Sresumer_recordsS);} } void s48_set_image_valuesB(long startup_proc_45X, long symbols_46X, long imports_47X, long exports_48X, long records_49X) { { Sstartup_procedureS = startup_proc_45X; SsymbolsS = symbols_46X; Simported_bindingsS = imports_47X; Sexported_bindingsS = exports_48X; Sresumer_recordsS = records_49X; return;} } void s48_initialization_completeB(void) { { SinitializingPS = 0; return;} } void s48_initialize_heap(char * start_50X, long size_51X) { long semisize_53X; long cells_52X; { cells_52X = size_51X / 2; semisize_53X = ((cells_52X)<<2); Snewspace_beginS = start_50X; Snewspace_endS = ((Snewspace_beginS) + semisize_53X); s48_ShpS = (Snewspace_beginS); s48_SlimitS = (Snewspace_endS); Soldspace_beginS = (Snewspace_endS); Soldspace_endS = ((Soldspace_beginS) + semisize_53X); Soldspace_hpS = (Soldspace_beginS); Soldspace_limitS = (Soldspace_endS); return;} } char s48_availableP(long cells_54X) { { return (((s48_ShpS) + (((cells_54X)<<2))) < (s48_SlimitS));} } char s48_image_writing_okayP(void) { { if ((0 < (Simpure_area_countS))) { return 0;} else { if ((0 < (Spure_area_countS))) { return 0;} else { return 1;}}} } char * s48_allocate_space(long type_55X, long len_56X, long key_57X) { char * new_58X; { new_58X = s48_ShpS; s48_ShpS = ((s48_ShpS) + (-4 & (3 + len_56X))); return new_58X;} } long s48_available(void) { { return (((((s48_SlimitS) - (s48_ShpS)))>>2));} } char s48_extantP(long thing_59X) { char * a_60X; { if ((3 == (3 & thing_59X))) { if ((3 == (3 & thing_59X))) { a_60X = ((char *) (-3 + thing_59X)); if ((a_60X < (Sfrom_beginS))) { return 1;} else { if ((a_60X < (Sfrom_endS))) { return (3 == (3 & (*((long *) ((((char *) (-3 + thing_59X))) + -4)))));} else { return 1;}}} else { return 1;}} else { return 1;}} } long s48_check_image_header(char *filename_61X) { long arg1K0; long arg1K2; long arg1K1; char arg2K1; char arg2K0; long status_122X; char eofP_121X; long status_120X; long status_119X; long status_118X; long status_117X; long status_116X; char eofP_115X; char ch_114X; long v_113X; long status_112X; char eofP_111X; long thing_110X; long v_109X; long status_108X; char eofP_107X; long thing_106X; long v_105X; long status_104X; char eofP_103X; long thing_102X; long v_101X; long status_100X; char eofP_99X; long thing_98X; long v_97X; long status_96X; char eofP_95X; long thing_94X; long cells_93X; long status_92X; char eofP_91X; long thing_90X; long cells_89X; long status_88X; char eofP_87X; char thing_86X; long status_85X; char eofP_84X; long thing_83X; long old_bytes_per_cell_82X; long status_81X; char eofP_80X; long status_79X; char eofP_78X; char ch_77X; long i_76X; long status_75X; char eofP_74X; long thing_73X; char same_versionP_72X; long status_71X; char eofP_70X; long status_69X; char eofP_68X; char ch_67X; long status_66X; char eofP_65X; char ch_64X; long status_63X; FILE * port_62X; { port_62X = ps_open_input_file(filename_61X, &status_63X); if ((status_63X == NO_ERRORS)) { SstatusS = NO_ERRORS; SeofPS = 0; if ((SeofPS)) { goto L2893;} else { goto L3626;}} else { ps_write_string("Can't open heap image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } ps_write_string((ps_error_string(status_63X)), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L2893: { if ((SeofPS)) { goto L2926;} else { goto L3590;}} L3626: { PS_READ_CHAR(port_62X, ch_64X, eofP_65X, status_66X) if (eofP_65X) { arg2K0 = eofP_65X; arg1K1 = status_66X; goto L2871;} else { if ((status_66X == NO_ERRORS)) { if ((12 == ch_64X)) { arg2K0 = 0; arg1K1 = status_66X; goto L2871;} else { goto L3626;}} else { arg2K0 = eofP_65X; arg1K1 = status_66X; goto L2871;}}} L2926: { if ((SeofPS)) { arg2K0 = 0; goto L2959;} else { arg1K0 = 0; goto L3566;}} L3590: { PS_READ_CHAR(port_62X, ch_67X, eofP_68X, status_69X) if (eofP_68X) { arg2K0 = eofP_68X; arg1K1 = status_69X; goto L2904;} else { if ((status_69X == NO_ERRORS)) { if ((10 == ch_67X)) { arg2K0 = 0; arg1K1 = status_69X; goto L2904;} else { goto L3590;}} else { arg2K0 = eofP_68X; arg1K1 = status_69X; goto L2904;}}} L2871: { eofP_70X = arg2K0; status_71X = arg1K1; if (eofP_70X) { SeofPS = 1; goto L2893;} else { if (((SstatusS) == NO_ERRORS)) { goto L2893;} else { SeofPS = 1; SstatusS = status_71X; goto L2893;}}} L2959: { same_versionP_72X = arg2K0; if ((SeofPS)) { arg1K0 = -1; goto L2994;} else { PS_READ_INTEGER(port_62X, thing_73X, eofP_74X, status_75X) if (eofP_74X) { SeofPS = 1; arg1K0 = -1; goto L2994;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_73X; goto L2994;} else { SeofPS = 1; SstatusS = status_75X; arg1K0 = -1; goto L2994;}}}} L3566: { i_76X = arg1K0; PS_READ_CHAR(port_62X, ch_77X, eofP_78X, status_79X) if (eofP_78X) { arg2K0 = 0; arg2K1 = eofP_78X; arg1K2 = status_79X; goto L2937;} else { if ((status_79X == NO_ERRORS)) { if ((i_76X == (strlen((char *) "Vanilla 20")))) { arg2K0 = (10 == ch_77X); arg2K1 = 0; arg1K2 = status_79X; goto L2937;} else { if ((ch_77X == (*("Vanilla 20" + i_76X)))) { arg1K0 = (1 + i_76X); goto L3566;} else { arg2K0 = 0; arg2K1 = 0; arg1K2 = status_79X; goto L2937;}}} else { arg2K0 = 0; arg2K1 = eofP_78X; arg1K2 = status_79X; goto L2937;}}} L2904: { eofP_80X = arg2K0; status_81X = arg1K1; if (eofP_80X) { SeofPS = 1; goto L2926;} else { if (((SstatusS) == NO_ERRORS)) { goto L2926;} else { SeofPS = 1; SstatusS = status_81X; goto L2926;}}} L2994: { old_bytes_per_cell_82X = arg1K0; if ((SeofPS)) { arg1K0 = -1; goto L3029;} else { PS_READ_INTEGER(port_62X, thing_83X, eofP_84X, status_85X) if (eofP_84X) { SeofPS = 1; arg1K0 = -1; goto L3029;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_83X; goto L3029;} else { SeofPS = 1; SstatusS = status_85X; arg1K0 = -1; goto L3029;}}}} L2937: { thing_86X = arg2K0; eofP_87X = arg2K1; status_88X = arg1K2; if (eofP_87X) { SeofPS = 1; arg2K0 = 0; goto L2959;} else { if (((SstatusS) == NO_ERRORS)) { arg2K0 = thing_86X; goto L2959;} else { SeofPS = 1; SstatusS = status_88X; arg2K0 = 0; goto L2959;}}} L3029: { cells_89X = arg1K0; Sold_beginS = (((char *) (((cells_89X)<<2)))); if ((SeofPS)) { arg1K0 = -1; goto L3067;} else { PS_READ_INTEGER(port_62X, thing_90X, eofP_91X, status_92X) if (eofP_91X) { SeofPS = 1; arg1K0 = -1; goto L3067;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_90X; goto L3067;} else { SeofPS = 1; SstatusS = status_92X; arg1K0 = -1; goto L3067;}}}} L3067: { cells_93X = arg1K0; Sold_hpS = (((char *) (((cells_93X)<<2)))); if ((SeofPS)) { arg1K0 = -1; goto L3105;} else { PS_READ_INTEGER(port_62X, thing_94X, eofP_95X, status_96X) if (eofP_95X) { SeofPS = 1; arg1K0 = -1; goto L3105;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_94X; goto L3105;} else { SeofPS = 1; SstatusS = status_96X; arg1K0 = -1; goto L3105;}}}} L3105: { v_97X = arg1K0; SsymbolsS = v_97X; if ((SeofPS)) { arg1K0 = -1; goto L3141;} else { PS_READ_INTEGER(port_62X, thing_98X, eofP_99X, status_100X) if (eofP_99X) { SeofPS = 1; arg1K0 = -1; goto L3141;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_98X; goto L3141;} else { SeofPS = 1; SstatusS = status_100X; arg1K0 = -1; goto L3141;}}}} L3141: { v_101X = arg1K0; Simported_bindingsS = v_101X; if ((SeofPS)) { arg1K0 = -1; goto L3177;} else { PS_READ_INTEGER(port_62X, thing_102X, eofP_103X, status_104X) if (eofP_103X) { SeofPS = 1; arg1K0 = -1; goto L3177;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_102X; goto L3177;} else { SeofPS = 1; SstatusS = status_104X; arg1K0 = -1; goto L3177;}}}} L3177: { v_105X = arg1K0; Sexported_bindingsS = v_105X; if ((SeofPS)) { arg1K0 = -1; goto L3213;} else { PS_READ_INTEGER(port_62X, thing_106X, eofP_107X, status_108X) if (eofP_107X) { SeofPS = 1; arg1K0 = -1; goto L3213;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_106X; goto L3213;} else { SeofPS = 1; SstatusS = status_108X; arg1K0 = -1; goto L3213;}}}} L3213: { v_109X = arg1K0; Sresumer_recordsS = v_109X; if ((SeofPS)) { arg1K0 = -1; goto L3249;} else { PS_READ_INTEGER(port_62X, thing_110X, eofP_111X, status_112X) if (eofP_111X) { SeofPS = 1; arg1K0 = -1; goto L3249;} else { if (((SstatusS) == NO_ERRORS)) { arg1K0 = thing_110X; goto L3249;} else { SeofPS = 1; SstatusS = status_112X; arg1K0 = -1; goto L3249;}}}} L3249: { v_113X = arg1K0; Sstartup_procedureS = v_113X; Simage_portS = port_62X; if ((SeofPS)) { goto L3288;} else { goto L3497;}} L3288: { if (((SstatusS) == NO_ERRORS)) { if ((SeofPS)) { SstatusS = EDOM; ps_write_string("Premature EOF when reading image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L3369;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L3369;}} else { if (same_versionP_72X) { if ((4 == old_bytes_per_cell_82X)) { return ((Sold_hpS) - (Sold_beginS));} else { ps_write_string("Incompatible bytes-per-cell in image", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L3429;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L3429;}}} else { ps_write_string("Format of image is incompatible with this version of system", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L3399;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L3399;}}}} else { ps_write_string("Error reading from image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L3344;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L3344;}}} L3497: { PS_READ_CHAR(port_62X, ch_114X, eofP_115X, status_116X) if (eofP_115X) { arg2K0 = eofP_115X; arg1K1 = status_116X; goto L3266;} else { if ((status_116X == NO_ERRORS)) { if ((12 == ch_114X)) { arg2K0 = 0; arg1K1 = status_116X; goto L3266;} else { goto L3497;}} else { arg2K0 = eofP_115X; arg1K1 = status_116X; goto L3266;}}} L3369: { status_117X = ps_close(port_62X); if ((status_117X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L3429: { status_118X = ps_close(port_62X); if ((status_118X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L3399: { status_119X = ps_close(port_62X); if ((status_119X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L3344: { status_120X = ps_close(port_62X); if ((status_120X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L3266: { eofP_121X = arg2K0; status_122X = arg1K1; if (eofP_121X) { SeofPS = 1; goto L3288;} else { if (((SstatusS) == NO_ERRORS)) { goto L3288;} else { SeofPS = 1; SstatusS = status_122X; goto L3288;}}} } long s48_find_all(long type_123X) { char * arg0K0; long arg1K0; char * merged_arg0K1; char * merged_arg0K0; int Hproc923124_return_tag; char Hproc9231240_return_value; char * start_125X; char * end_126X; char * next_142X; long d_141X; char * addr_140X; long type_139X; char v_138X; long i_137X; long count_136X; long *sizes_135X; char * *areas_134X; char v_133X; long i_132X; long count_131X; long *sizes_130X; char * *areas_129X; char v_128X; char * start_hp_127X; { Sfinding_typeS = type_123X; start_hp_127X = s48_ShpS; *((long *) (s48_ShpS)) = 0; s48_ShpS = ((s48_ShpS) + 4); merged_arg0K0 = (Snewspace_beginS); merged_arg0K1 = start_hp_127X; Hproc923124_return_tag = 0; goto Hproc923124; Hproc923124_return_0: v_128X = Hproc9231240_return_value; if (v_128X) { if ((0 < (Simpure_area_countS))) { areas_129X = Simpure_areasS; sizes_130X = Simpure_sizesS; count_131X = Simpure_area_countS; arg1K0 = 0; goto L5577;} else { goto L5517;}} else { goto L5535;}} L5577: { i_132X = arg1K0; if ((i_132X < count_131X)) { merged_arg0K0 = (*(areas_129X + i_132X)); merged_arg0K1 = ((*(areas_129X + i_132X)) + (*(sizes_130X + i_132X))); Hproc923124_return_tag = 1; goto Hproc923124; Hproc923124_return_1: v_133X = Hproc9231240_return_value; if (v_133X) { arg1K0 = (1 + i_132X); goto L5577;} else { goto L5535;}} else { goto L5517;}} L5517: { if ((0 < (Spure_area_countS))) { areas_134X = Spure_areasS; sizes_135X = Spure_sizesS; count_136X = Spure_area_countS; arg1K0 = 0; goto L5598;} else { goto L5524;}} L5535: { s48_ShpS = start_hp_127X; return 1;} L5598: { i_137X = arg1K0; if ((i_137X < count_136X)) { merged_arg0K0 = (*(areas_134X + i_137X)); merged_arg0K1 = ((*(areas_134X + i_137X)) + (*(sizes_135X + i_137X))); Hproc923124_return_tag = 2; goto Hproc923124; Hproc923124_return_2: v_138X = Hproc9231240_return_value; if (v_138X) { arg1K0 = (1 + i_137X); goto L5598;} else { goto L5535;}} else { goto L5524;}} L5524: { *((long *) start_hp_127X) = (10 + (((((s48_ShpS) - (start_hp_127X + 4)))<<8))); return (3 + (((long) (start_hp_127X + 4))));} Hproc923124: { start_125X = merged_arg0K0; end_126X = merged_arg0K1;{ type_139X = Sfinding_typeS; arg0K0 = start_125X; goto L4503;} L4503: { addr_140X = arg0K0; if ((addr_140X < end_126X)) { d_141X = *((long *) addr_140X); next_142X = addr_140X + (4 + (-4 & (3 + ((long)(((unsigned long)d_141X)>>8))))); if ((2 == (3 & d_141X))) { if ((type_139X == (31 & (((d_141X)>>2))))) { if ((((s48_ShpS) + 16) < (s48_SlimitS))) { *((long *) (s48_ShpS)) = (3 + (((long) (addr_140X + 4)))); s48_ShpS = ((s48_ShpS) + 4); arg0K0 = next_142X; goto L4503;} else { Hproc9231240_return_value = 0; goto Hproc923124_return;}} else { arg0K0 = next_142X; goto L4503;}} else { ps_write_string("heap is in an inconsistent state.", (stderr)); Hproc9231240_return_value = 0; goto Hproc923124_return;}} else { Hproc9231240_return_value = 1; goto Hproc923124_return;}} Hproc923124_return: switch (Hproc923124_return_tag) { case 0: goto Hproc923124_return_0; case 1: goto Hproc923124_return_1; default: goto Hproc923124_return_2; }} } long s48_read_image(void) { FILE * arg4K0; char *arg3K1; char arg2K1; char arg2K0; char * arg0K0; long arg1K0; long v_192X; long descriptor_191X; long v_190X; long descriptor_189X; long v_188X; long descriptor_187X; long v_186X; long d_185X; long descriptor_184X; long v_183X; long descriptor_182X; char * ptr_181X; long descriptor_180X; long status_179X; long status_178X; long status_177X; long status_176X; char * next_175X; long value_174X; long x_173X; long x_172X; char * ptr_171X; long status_170X; long status_169X; long status_168X; char eofP_167X; char v_166X; char *string_165X; char okayP_164X; long status_163X; long status_162X; long status_161X; char eofP_160X; long got_159X; long need_158X; char * start_157X; char * new_limit_156X; char * new_hp_155X; long delta_154X; char reverseP_153X; FILE * port_152X; long x_151X; long x_150X; char * addr_149X; char *string_148X; char okayP_147X; long status_146X; char eofP_145X; long got_144X; FILE * port_143X; { port_143X = Simage_portS; got_144X = ps_read_block(port_143X, ((char *) (s48_ShpS)), 4, &eofP_145X, &status_146X); if ((status_146X == NO_ERRORS)) { if (eofP_145X) { arg2K0 = 0; arg3K1 = "Premature EOF when reading image file"; goto L6079;} else { if ((got_144X < 4)) { arg2K0 = 0; arg3K1 = "Read returned too few bytes"; goto L6079;} else { arg2K0 = 1; arg3K1 = ""; goto L6079;}}} else { SstatusS = status_146X; arg2K0 = 0; arg3K1 = "Error reading from image file"; goto L6079;}} L6079: { okayP_147X = arg2K0; string_148X = arg3K1; if (okayP_147X) { if ((1 == (*((long *) (s48_ShpS))))) { arg4K0 = port_143X; arg2K1 = 0; goto L5092;} else { addr_149X = s48_ShpS; x_150X = *((unsigned char *) addr_149X); *((unsigned char *) addr_149X) = (*((unsigned char *) (addr_149X + 3))); *((unsigned char *) (addr_149X + 3)) = x_150X; x_151X = *((unsigned char *) (addr_149X + 1)); *((unsigned char *) (addr_149X + 1)) = (*((unsigned char *) (addr_149X + 2))); *((unsigned char *) (addr_149X + 2)) = x_151X; if ((1 == (*((long *) (s48_ShpS))))) { arg4K0 = port_143X; arg2K1 = 1; goto L5092;} else { ps_write_string("Unable to correct byte order", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L6187;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L6187;}}}} else { ps_write_string(string_148X, (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L6135;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L6135;}}} L5092: { port_152X = arg4K0; reverseP_153X = arg2K1; delta_154X = (s48_ShpS) - (Sold_beginS); new_hp_155X = (Sold_hpS) + delta_154X; new_limit_156X = Snewspace_endS; start_157X = s48_ShpS; if ((new_hp_155X < new_limit_156X)) { need_158X = (Sold_hpS) - (Sold_beginS); got_159X = ps_read_block(port_152X, ((char *) (s48_ShpS)), need_158X, &eofP_160X, &status_161X); if ((status_161X == NO_ERRORS)) { if (eofP_160X) { arg2K0 = 0; arg3K1 = "Premature EOF when reading image file"; goto L5114;} else { if ((got_159X < need_158X)) { arg2K0 = 0; arg3K1 = "Read returned too few bytes"; goto L5114;} else { arg2K0 = 1; arg3K1 = ""; goto L5114;}}} else { SstatusS = status_161X; arg2K0 = 0; arg3K1 = "Error reading from image file"; goto L5114;}} else { ps_write_string("Heap not big enough to restore this image", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L5210;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L5210;}}} L6187: { status_162X = ps_close(port_143X); if ((status_162X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L6135: { status_163X = ps_close(port_143X); if ((status_163X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L5114: { okayP_164X = arg2K0; string_165X = arg3K1; PS_READ_CHAR(port_152X, v_166X, eofP_167X, status_168X) if (okayP_164X) { if ((status_168X == NO_ERRORS)) { if (eofP_167X) { status_169X = ps_close(port_152X); if ((status_169X == NO_ERRORS)) { if (reverseP_153X) { ps_write_string("Correcting byte order of resumed image.", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } arg0K0 = start_157X; goto L4309;} else { goto L5152;}} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L5345;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L5345;}}} else { ps_write_string("Image file has extraneous data after image", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L5315;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L5315;}}} else { ps_write_string("Error reading from image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L5285;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L5285;}}} else { ps_write_string(string_165X, (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } if (((SstatusS) == NO_ERRORS)) { goto L5255;} else { ps_write_string((ps_error_string((SstatusS))), (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } goto L5255;}}} L5210: { status_170X = ps_close(port_152X); if ((status_170X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L4309: { ptr_171X = arg0K0; if ((ptr_171X < new_hp_155X)) { x_172X = *((unsigned char *) ptr_171X); *((unsigned char *) ptr_171X) = (*((unsigned char *) (ptr_171X + 3))); *((unsigned char *) (ptr_171X + 3)) = x_172X; x_173X = *((unsigned char *) (ptr_171X + 1)); *((unsigned char *) (ptr_171X + 1)) = (*((unsigned char *) (ptr_171X + 2))); *((unsigned char *) (ptr_171X + 2)) = x_173X; value_174X = *((long *) ptr_171X); next_175X = ptr_171X + 4; if ((2 == (3 & value_174X))) { if (((31 & (((value_174X)>>2))) < 16)) { arg0K0 = next_175X; goto L4309;} else { arg0K0 = (next_175X + (-4 & (3 + ((long)(((unsigned long)value_174X)>>8))))); goto L4309;}} else { arg0K0 = next_175X; goto L4309;}} else { goto L5152;}} L5152: { if ((0 == delta_154X)) { goto L5162;} else { arg0K0 = start_157X; goto L4408;}} L5345: { status_176X = ps_close(port_152X); if ((status_176X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L5315: { status_177X = ps_close(port_152X); if ((status_177X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L5285: { status_178X = ps_close(port_152X); if ((status_178X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L5255: { status_179X = ps_close(port_152X); if ((status_179X == NO_ERRORS)) { return -1;} else { ps_write_string("Error closing image file", (stderr)); { long ignoreXX; PS_WRITE_CHAR(10, (stderr), ignoreXX) } return -1;}} L5162: { s48_ShpS = new_hp_155X; descriptor_180X = Sstartup_procedureS; if ((3 == (3 & descriptor_180X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_180X))) + delta_154X)))); goto L5166;} else { arg1K0 = descriptor_180X; goto L5166;}} L4408: { ptr_181X = arg0K0; if ((ptr_181X < new_hp_155X)) { descriptor_182X = *((long *) ptr_181X); if ((3 == (3 & descriptor_182X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_182X))) + delta_154X)))); goto L4413;} else { arg1K0 = descriptor_182X; goto L4413;}} else { goto L5162;}} L5166: { v_183X = arg1K0; Sstartup_procedureS = v_183X; descriptor_184X = SsymbolsS; if ((3 == (3 & descriptor_184X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_184X))) + delta_154X)))); goto L5171;} else { arg1K0 = descriptor_184X; goto L5171;}} L4413: { d_185X = arg1K0; *((long *) ptr_181X) = d_185X; if ((2 == (3 & d_185X))) { if (((31 & (((d_185X)>>2))) < 16)) { goto L4427;} else { arg0K0 = (ptr_181X + (4 + (-4 & (3 + ((long)(((unsigned long)d_185X)>>8)))))); goto L4408;}} else { goto L4427;}} L5171: { v_186X = arg1K0; SsymbolsS = v_186X; descriptor_187X = Simported_bindingsS; if ((3 == (3 & descriptor_187X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_187X))) + delta_154X)))); goto L5176;} else { arg1K0 = descriptor_187X; goto L5176;}} L4427: { arg0K0 = (ptr_181X + 4); goto L4408;} L5176: { v_188X = arg1K0; Simported_bindingsS = v_188X; descriptor_189X = Sexported_bindingsS; if ((3 == (3 & descriptor_189X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_189X))) + delta_154X)))); goto L5181;} else { arg1K0 = descriptor_189X; goto L5181;}} L5181: { v_190X = arg1K0; Sexported_bindingsS = v_190X; descriptor_191X = Sresumer_recordsS; if ((3 == (3 & descriptor_191X))) { arg1K0 = (3 + (((long) ((((char *) (-3 + descriptor_191X))) + delta_154X)))); goto L5186;} else { arg1K0 = descriptor_191X; goto L5186;}} L5186: { v_192X = arg1K0; Sresumer_recordsS = v_192X; return 0;} } long s48_find_all_records(long record_type_193X) { char * arg0K0; long arg1K0; char * merged_arg0K1; char * merged_arg0K0; int Hproc969194_return_tag; char Hproc9691940_return_value; char * start_195X; char * end_196X; long obj_213X; char * next_212X; long d_211X; char * addr_210X; long type_209X; char v_208X; long i_207X; long count_206X; long *sizes_205X; char * *areas_204X; char v_203X; long i_202X; long count_201X; long *sizes_200X; char * *areas_199X; char v_198X; char * start_hp_197X; { Hthe_record_type9260 = record_type_193X; Sfinding_typeS = 8; start_hp_197X = s48_ShpS; *((long *) (s48_ShpS)) = 0; s48_ShpS = ((s48_ShpS) + 4); merged_arg0K0 = (Snewspace_beginS); merged_arg0K1 = start_hp_197X; Hproc969194_return_tag = 0; goto Hproc969194; Hproc969194_return_0: v_198X = Hproc9691940_return_value; if (v_198X) { if ((0 < (Simpure_area_countS))) { areas_199X = Simpure_areasS; sizes_200X = Simpure_sizesS; count_201X = Simpure_area_countS; arg1K0 = 0; goto L5742;} else { goto L5682;}} else { goto L5700;}} L5742: { i_202X = arg1K0; if ((i_202X < count_201X)) { merged_arg0K0 = (*(areas_199X + i_202X)); merged_arg0K1 = ((*(areas_199X + i_202X)) + (*(sizes_200X + i_202X))); Hproc969194_return_tag = 1; goto Hproc969194; Hproc969194_return_1: v_203X = Hproc9691940_return_value; if (v_203X) { arg1K0 = (1 + i_202X); goto L5742;} else { goto L5700;}} else { goto L5682;}} L5682: { if ((0 < (Spure_area_countS))) { areas_204X = Spure_areasS; sizes_205X = Spure_sizesS; count_206X = Spure_area_countS; arg1K0 = 0; goto L5763;} else { goto L5689;}} L5700: { s48_ShpS = start_hp_197X; return 1;} L5763: { i_207X = arg1K0; if ((i_207X < count_206X)) { merged_arg0K0 = (*(areas_204X + i_207X)); merged_arg0K1 = ((*(areas_204X + i_207X)) + (*(sizes_205X + i_207X))); Hproc969194_return_tag = 2; goto Hproc969194; Hproc969194_return_2: v_208X = Hproc9691940_return_value; if (v_208X) { arg1K0 = (1 + i_207X); goto L5763;} else { goto L5700;}} else { goto L5689;}} L5689: { *((long *) start_hp_197X) = (10 + (((((s48_ShpS) - (start_hp_197X + 4)))<<8))); return (3 + (((long) (start_hp_197X + 4))));} Hproc969194: { start_195X = merged_arg0K0; end_196X = merged_arg0K1;{ type_209X = Sfinding_typeS; arg0K0 = start_195X; goto L4670;} L4670: { addr_210X = arg0K0; if ((addr_210X < end_196X)) { d_211X = *((long *) addr_210X); next_212X = addr_210X + (4 + (-4 & (3 + ((long)(((unsigned long)d_211X)>>8))))); if ((2 == (3 & d_211X))) { if ((type_209X == (31 & (((d_211X)>>2))))) { obj_213X = 3 + (((long) (addr_210X + 4))); if (((*((long *) (((char *) (-3 + obj_213X))))) == (Hthe_record_type9260))) { if ((((s48_ShpS) + 16) < (s48_SlimitS))) { *((long *) (s48_ShpS)) = obj_213X; s48_ShpS = ((s48_ShpS) + 4); arg0K0 = next_212X; goto L4670;} else { Hproc9691940_return_value = 0; goto Hproc969194_return;}} else { arg0K0 = next_212X; goto L4670;}} else { arg0K0 = next_212X; goto L4670;}} else { ps_write_string("heap is in an inconsistent state.", (stderr)); Hproc9691940_return_value = 0; goto Hproc969194_return;}} else { Hproc9691940_return_value = 1; goto Hproc969194_return;}} Hproc969194_return: switch (Hproc969194_return_tag) { case 0: goto Hproc969194_return_0; case 1: goto Hproc969194_return_1; default: goto Hproc969194_return_2; }} } long s48_trace_locationsB(char * start_214X, char * end_215X) { char * arg0K0; char * arg0K1; long arg1K0; long new_232X; char * data_addr_231X; char * frontier_230X; long new_thing_229X; char * frontier_228X; long new_thing_227X; char * a_226X; long descriptor_225X; long h_224X; char * a_223X; char v_222X; long type_221X; char v_220X; char * next_219X; long thing_218X; char * frontier_217X; char * addr_216X; { arg0K0 = start_214X; arg0K1 = (s48_ShpS); goto L6441;} L6441: { addr_216X = arg0K0; frontier_217X = arg0K1; if ((addr_216X < end_215X)) { thing_218X = *((long *) addr_216X); next_219X = addr_216X + 4; if ((2 == (3 & thing_218X))) { if ((2 == (3 & thing_218X))) { if (((31 & (((thing_218X)>>2))) < 16)) { arg0K0 = next_219X; arg0K1 = frontier_217X; goto L6441;} else { arg0K0 = (next_219X + (-4 & (3 + ((long)(((unsigned long)thing_218X)>>8))))); arg0K1 = frontier_217X; goto L6441;}} else { arg0K0 = next_219X; arg0K1 = frontier_217X; goto L6441;}} else { if ((Swriting_imagePS)) { v_220X = gc_recordP(thing_218X); if (v_220X) { type_221X = *((long *) (((char *) (-3 + thing_218X)))); v_222X = gc_recordP(type_221X); if (v_222X) { if ((1 == (*((long *) ((((char *) (-3 + type_221X))) + 4))))) { note_undumpableB(thing_218X); *((long *) addr_216X) = (*((long *) ((((char *) (-3 + thing_218X))) + 4))); arg0K0 = addr_216X; arg0K1 = frontier_217X; goto L6441;} else { goto L6475;}} else { goto L6475;}} else { goto L6475;}} else { goto L6475;}}} else { s48_ShpS = frontier_217X; return 0;}} L6475: { if ((3 == (3 & thing_218X))) { a_223X = ((char *) (-3 + thing_218X)); if ((a_223X < (Sfrom_beginS))) { arg0K0 = next_219X; arg0K1 = frontier_217X; goto L6441;} else { if ((a_223X < (Sfrom_endS))) { h_224X = *((long *) ((((char *) (-3 + thing_218X))) + -4)); if ((3 == (3 & h_224X))) { arg1K0 = h_224X; arg0K1 = frontier_217X; goto L6482;} else { if ((1074 == h_224X)) { descriptor_225X = *((long *) (((char *) (-3 + thing_218X)))); if ((3 == (3 & descriptor_225X))) { a_226X = ((char *) (-3 + descriptor_225X)); if ((a_226X < (Sfrom_beginS))) { goto L7062;} else { if ((a_226X < (Sfrom_endS))) { new_thing_227X = copy_weak_pointer(thing_218X, frontier_217X, &frontier_228X); arg1K0 = new_thing_227X; arg0K1 = frontier_228X; goto L6482;} else { goto L7062;}}} else { goto L7062;}} else { goto L7062;}}} else { arg0K0 = next_219X; arg0K1 = frontier_217X; goto L6441;}}} else { arg0K0 = next_219X; arg0K1 = frontier_217X; goto L6441;}} L6482: { new_thing_229X = arg1K0; frontier_230X = arg0K1; *((long *) addr_216X) = new_thing_229X; arg0K0 = next_219X; arg0K1 = frontier_230X; goto L6441;} L7062: { *((long *) frontier_217X) = h_224X; data_addr_231X = frontier_217X + 4; new_232X = 3 + (((long) data_addr_231X)); *((long *) ((((char *) (-3 + thing_218X))) + -4)) = new_232X; memcpy((void *)data_addr_231X, (void *)(((char *) (-3 + thing_218X))),((long)(((unsigned long)h_224X)>>8))); arg1K0 = new_232X; arg0K1 = (data_addr_231X + (-4 & (3 + ((long)(((unsigned long)h_224X)>>8))))); goto L6482;} } void s48_do_gc(void) { char * arg0K0; char * end_234X; char * start_233X; { arg0K0 = (Snewspace_beginS); goto L6697;} L6697: { start_233X = arg0K0; end_234X = s48_ShpS; s48_trace_locationsB(start_233X, end_234X); if (((((((s48_SlimitS) - (s48_ShpS)))>>2)) < 0)) { ps_error("GC error: ran out of space in new heap", 0); return clean_weak_pointers();} else { if ((end_234X < (s48_ShpS))) { arg0K0 = end_234X; goto L6697;} else { return clean_weak_pointers();}}} } long s48_trace_stob_contentsB(long stob_235X) { char * start_237X; long h_236X; { h_236X = *((long *) ((((char *) (-3 + stob_235X))) + -4)); start_237X = ((char *) (-3 + stob_235X)); return s48_trace_locationsB(start_237X, (start_237X + (-4 & (3 + ((long)(((unsigned long)h_236X)>>8))))));} } void s48_begin_collection(void) { long arg1K0; long i_245X; long count_244X; long *sizes_243X; char * *areas_242X; char * temp_241X; char * temp_240X; char * temp_239X; char * temp_238X; { Sfrom_beginS = (Snewspace_beginS); Sfrom_endS = (Snewspace_endS); temp_238X = s48_SlimitS; s48_SlimitS = (Soldspace_limitS); Soldspace_limitS = temp_238X; temp_239X = s48_ShpS; s48_ShpS = (Soldspace_hpS); Soldspace_hpS = temp_239X; temp_240X = Snewspace_beginS; Snewspace_beginS = (Soldspace_beginS); Soldspace_beginS = temp_240X; temp_241X = Snewspace_endS; Snewspace_endS = (Soldspace_endS); Soldspace_endS = temp_241X; s48_ShpS = (Snewspace_beginS); Sweak_pointer_hpS = NULL; Swriting_imagePS = 0; if ((0 < (Simpure_area_countS))) { areas_242X = Simpure_areasS; sizes_243X = Simpure_sizesS; count_244X = Simpure_area_countS; arg1K0 = 0; goto L6812;} else { return;}} L6812: { i_245X = arg1K0; if ((i_245X < count_244X)) { s48_trace_locationsB((*(areas_242X + i_245X)), ((*(areas_242X + i_245X)) + (*(sizes_243X + i_245X)))); arg1K0 = (1 + i_245X); goto L6812;} else { return;}} } long s48_trace_value(long stob_246X) { char * arg0K1; long arg1K0; long new_261X; char * data_addr_260X; char * new_hp_259X; long new_thing_258X; char * new_hp_257X; long new_thing_256X; char * a_255X; long descriptor_254X; long h_253X; char * frontier_252X; char * a_251X; char v_250X; long type_249X; char v_248X; long stob_247X; { arg1K0 = stob_247X; goto L7253;} L7253: { stob_247X = arg1K0; if ((Swriting_imagePS)) { v_248X = gc_recordP(stob_246X); if (v_248X) { type_249X = *((long *) (((char *) (-3 + stob_246X)))); v_250X = gc_recordP(type_249X); if (v_250X) { if ((1 == (*((long *) ((((char *) (-3 + type_249X))) + 4))))) { note_undumpableB(stob_246X); arg1K0 = (*((long *) ((((char *) (-3 + stob_246X))) + 4))); goto L7253;} else { goto L6840;}} else { goto L6840;}} else { goto L6840;}} else { goto L6840;}} L6840: { if ((3 == (3 & stob_246X))) { a_251X = ((char *) (-3 + stob_246X)); if ((a_251X < (Sfrom_beginS))) { return stob_246X;} else { if ((a_251X < (Sfrom_endS))) { frontier_252X = s48_ShpS; h_253X = *((long *) ((((char *) (-3 + stob_246X))) + -4)); if ((3 == (3 & h_253X))) { arg1K0 = h_253X; arg0K1 = frontier_252X; goto L6862;} else { if ((1074 == h_253X)) { descriptor_254X = *((long *) (((char *) (-3 + stob_246X)))); if ((3 == (3 & descriptor_254X))) { a_255X = ((char *) (-3 + descriptor_254X)); if ((a_255X < (Sfrom_beginS))) { goto L4193;} else { if ((a_255X < (Sfrom_endS))) { new_thing_256X = copy_weak_pointer(stob_246X, frontier_252X, &new_hp_257X); arg1K0 = new_thing_256X; arg0K1 = new_hp_257X; goto L6862;} else { goto L4193;}}} else { goto L4193;}} else { goto L4193;}}} else { return stob_246X;}}} else { return stob_246X;}} L6862: { new_thing_258X = arg1K0; new_hp_259X = arg0K1; s48_ShpS = new_hp_259X; return new_thing_258X;} L4193: { *((long *) frontier_252X) = h_253X; data_addr_260X = frontier_252X + 4; new_261X = 3 + (((long) data_addr_260X)); *((long *) ((((char *) (-3 + stob_246X))) + -4)) = new_261X; memcpy((void *)data_addr_260X, (void *)(((char *) (-3 + stob_246X))),((long)(((unsigned long)h_253X)>>8))); arg1K0 = new_261X; arg0K1 = (data_addr_260X + (-4 & (3 + ((long)(((unsigned long)h_253X)>>8))))); goto L6862;} } long s48_write_image(long resume_proc_262X, FILE * port_263X) { char * arg0K0; long arg1K0; char * merged_arg0K1; char * merged_arg0K0; int abort_collection_return_tag; int Hproc967264_return_tag; char Hproc9672640_return_value; char * start_265X; char * end_266X; long h_320X; long h_319X; long d_318X; char * addr_317X; char * temp_316X; char * temp_315X; char * temp_314X; char * temp_313X; long type_312X; long obj_311X; char * next_310X; long d_309X; char * addr_308X; long type_307X; long status_306X; long v_305X; long v_304X; long v_303X; long v_302X; long v_301X; long v_300X; long v_299X; char * v_298X; long v_297X; char * v_296X; long v_295X; long v_294X; long v_293X; long v_292X; long v_291X; long imported_bindings_290X; long resumer_records_289X; char v_288X; long i_287X; long count_286X; long *sizes_285X; char * *areas_284X; char v_283X; long i_282X; long count_281X; long *sizes_280X; char * *areas_279X; char v_278X; char * start_hp_277X; long symbols_276X; char * end_275X; char * start_274X; long resume_proc_273X; long exported_bindings_272X; long v_271X; char * temp_270X; char * temp_269X; char * temp_268X; char * temp_267X; { Sfrom_beginS = (Snewspace_beginS); Sfrom_endS = (Snewspace_endS); temp_267X = s48_SlimitS; s48_SlimitS = (Soldspace_limitS); Soldspace_limitS = temp_267X; temp_268X = s48_ShpS; s48_ShpS = (Soldspace_hpS); Soldspace_hpS = temp_268X; temp_269X = Snewspace_beginS; Snewspace_beginS = (Soldspace_beginS); Soldspace_beginS = temp_269X; temp_270X = Snewspace_endS; Snewspace_endS = (Soldspace_endS); Soldspace_endS = temp_270X; s48_ShpS = (Snewspace_beginS); Sweak_pointer_hpS = NULL; Swriting_imagePS = 1; Sundumpable_recordsS = 25; Sundumpable_countS = 0; v_271X = s48_exported_bindings(); exported_bindings_272X = s48_trace_value(v_271X); resume_proc_273X = s48_trace_value(resume_proc_262X); arg0K0 = (Snewspace_beginS); goto L6983;} L6983: { start_274X = arg0K0; end_275X = s48_ShpS; s48_trace_locationsB(start_274X, end_275X); if (((((((s48_SlimitS) - (s48_ShpS)))>>2)) < 0)) { ps_error("GC error: ran out of space in new heap", 0); clean_weak_pointers(); goto L6952;} else { if ((end_275X < (s48_ShpS))) { arg0K0 = end_275X; goto L6983;} else { clean_weak_pointers(); goto L6952;}}} L6952: { s48_mark_traced_channels_closedB(); symbols_276X = s48_copy_symbol_table(); Sfinding_typeS = 8; start_hp_277X = s48_ShpS; *((long *) (s48_ShpS)) = 0; s48_ShpS = ((s48_ShpS) + 4); merged_arg0K0 = (Snewspace_beginS); merged_arg0K1 = start_hp_277X; Hproc967264_return_tag = 0; goto Hproc967264; Hproc967264_return_0: v_278X = Hproc9672640_return_value; if (v_278X) { if ((0 < (Simpure_area_countS))) { areas_279X = Simpure_areasS; sizes_280X = Simpure_sizesS; count_281X = Simpure_area_countS; arg1K0 = 0; goto L5907;} else { goto L5847;}} else { goto L5865;}} L5907: { i_282X = arg1K0; if ((i_282X < count_281X)) { merged_arg0K0 = (*(areas_279X + i_282X)); merged_arg0K1 = ((*(areas_279X + i_282X)) + (*(sizes_280X + i_282X))); Hproc967264_return_tag = 1; goto Hproc967264; Hproc967264_return_1: v_283X = Hproc9672640_return_value; if (v_283X) { arg1K0 = (1 + i_282X); goto L5907;} else { goto L5865;}} else { goto L5847;}} L5847: { if ((0 < (Spure_area_countS))) { areas_284X = Spure_areasS; sizes_285X = Spure_sizesS; count_286X = Spure_area_countS; arg1K0 = 0; goto L5928;} else { goto L5854;}} L5865: { s48_ShpS = start_hp_277X; arg1K0 = 1; goto L7002;} L5928: { i_287X = arg1K0; if ((i_287X < count_286X)) { merged_arg0K0 = (*(areas_284X + i_287X)); merged_arg0K1 = ((*(areas_284X + i_287X)) + (*(sizes_285X + i_287X))); Hproc967264_return_tag = 2; goto Hproc967264; Hproc967264_return_2: v_288X = Hproc9672640_return_value; if (v_288X) { arg1K0 = (1 + i_287X); goto L5928;} else { goto L5865;}} else { goto L5854;}} L5854: { *((long *) start_hp_277X) = (10 + (((((s48_ShpS) - (start_hp_277X + 4)))<<8))); arg1K0 = (3 + (((long) (start_hp_277X + 4)))); goto L7002;} L7002: { resumer_records_289X = arg1K0; imported_bindings_290X = s48_cleaned_imported_bindings(); if ((1 == resumer_records_289X)) { abort_collection_return_tag = 0; goto abort_collection; abort_collection_return_0: return ENOMEM;} else { SstatusS = NO_ERRORS; if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_291X) SstatusS = v_291X; goto L2019;} else { goto L2019;}}} L2019: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(12, port_263X, v_292X) SstatusS = v_292X; goto L2028;} else { goto L2028;}} L2028: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_293X) SstatusS = v_293X; goto L2037;} else { goto L2037;}} L2037: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_string("Vanilla 20", port_263X)); goto L2044;} else { goto L2044;}} L2044: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_294X) SstatusS = v_294X; goto L2053;} else { goto L2053;}} L2053: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(4, port_263X)); goto L2123;} else { goto L2123;}} L2123: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_295X) SstatusS = v_295X; goto L2055;} else { goto L2055;}} L2055: { v_296X = Snewspace_beginS; if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(((((((long) v_296X)))>>2)), port_263X)); goto L2143;} else { goto L2143;}} L2143: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_297X) SstatusS = v_297X; goto L2061;} else { goto L2061;}} L2061: { v_298X = s48_ShpS; if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(((((((long) v_298X)))>>2)), port_263X)); goto L2163;} else { goto L2163;}} L2163: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_299X) SstatusS = v_299X; goto L2067;} else { goto L2067;}} L2067: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(symbols_276X, port_263X)); goto L2178;} else { goto L2178;}} L2178: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_300X) SstatusS = v_300X; goto L2069;} else { goto L2069;}} L2069: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(imported_bindings_290X, port_263X)); goto L2193;} else { goto L2193;}} L2193: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_301X) SstatusS = v_301X; goto L2071;} else { goto L2071;}} L2071: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(exported_bindings_272X, port_263X)); goto L2208;} else { goto L2208;}} L2208: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_302X) SstatusS = v_302X; goto L2073;} else { goto L2073;}} L2073: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(resumer_records_289X, port_263X)); goto L2223;} else { goto L2223;}} L2223: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_303X) SstatusS = v_303X; goto L2075;} else { goto L2075;}} L2075: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_integer(resume_proc_273X, port_263X)); goto L2238;} else { goto L2238;}} L2238: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(10, port_263X, v_304X) SstatusS = v_304X; goto L2077;} else { goto L2077;}} L2077: { if (((SstatusS) == NO_ERRORS)) { PS_WRITE_CHAR(12, port_263X, v_305X) SstatusS = v_305X; goto L2086;} else { goto L2086;}} L2086: { *((long *) (s48_ShpS)) = 1; if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_block(port_263X, ((char *) (s48_ShpS)), (((s48_ShpS) + 4) - (s48_ShpS)))); goto L2105;} else { goto L2105;}} L2105: { if (((SstatusS) == NO_ERRORS)) { SstatusS = (ps_write_block(port_263X, ((char *) (Snewspace_beginS)), ((s48_ShpS) - (Snewspace_beginS)))); goto L2118;} else { goto L2118;}} L2118: { status_306X = SstatusS; abort_collection_return_tag = 1; goto abort_collection; abort_collection_return_1: return status_306X;} Hproc967264: { start_265X = merged_arg0K0; end_266X = merged_arg0K1;{ type_307X = Sfinding_typeS; arg0K0 = start_265X; goto L4852;} L4852: { addr_308X = arg0K0; if ((addr_308X < end_266X)) { d_309X = *((long *) addr_308X); next_310X = addr_308X + (4 + (-4 & (3 + ((long)(((unsigned long)d_309X)>>8))))); if ((2 == (3 & d_309X))) { if ((type_307X == (31 & (((d_309X)>>2))))) { obj_311X = 3 + (((long) (addr_308X + 4))); type_312X = *((long *) (((char *) (-3 + obj_311X)))); if ((3 == (3 & type_312X))) { if ((8 == (31 & ((((*((long *) ((((char *) (-3 + type_312X))) + -4))))>>2))))) { if ((3 == (3 & (*((long *) ((((char *) (-3 + type_312X))) + 4)))))) { if ((((s48_ShpS) + 16) < (s48_SlimitS))) { *((long *) (s48_ShpS)) = obj_311X; s48_ShpS = ((s48_ShpS) + 4); arg0K0 = next_310X; goto L4852;} else { Hproc9672640_return_value = 0; goto Hproc967264_return;}} else { arg0K0 = next_310X; goto L4852;}} else { arg0K0 = next_310X; goto L4852;}} else { arg0K0 = next_310X; goto L4852;}} else { arg0K0 = next_310X; goto L4852;}} else { ps_write_string("heap is in an inconsistent state.", (stderr)); Hproc9672640_return_value = 0; goto Hproc967264_return;}} else { Hproc9672640_return_value = 1; goto Hproc967264_return;}} Hproc967264_return: switch (Hproc967264_return_tag) { case 0: goto Hproc967264_return_0; case 1: goto Hproc967264_return_1; default: goto Hproc967264_return_2; }} abort_collection: { { temp_313X = s48_SlimitS; s48_SlimitS = (Soldspace_limitS); Soldspace_limitS = temp_313X; temp_314X = s48_ShpS; s48_ShpS = (Soldspace_hpS); Soldspace_hpS = temp_314X; temp_315X = Snewspace_beginS; Snewspace_beginS = (Soldspace_beginS); Soldspace_beginS = temp_315X; temp_316X = Snewspace_endS; Snewspace_endS = (Soldspace_endS); Soldspace_endS = temp_316X; arg0K0 = (Snewspace_beginS); goto L4085;} L4085: { addr_317X = arg0K0; if ((addr_317X < (s48_ShpS))) { d_318X = *((long *) addr_317X); if ((2 == (3 & d_318X))) { arg1K0 = d_318X; goto L4106;} else { h_319X = *((long *) ((((char *) (-3 + d_318X))) + -4)); *((long *) addr_317X) = h_319X; arg1K0 = h_319X; goto L4106;}} else { goto abort_collection_return;}} L4106: { h_320X = arg1K0; arg0K0 = (addr_317X + (4 + (-4 & (3 + ((long)(((unsigned long)h_320X)>>8)))))); goto L4085;} abort_collection_return: switch (abort_collection_return_tag) { case 0: goto abort_collection_return_0; default: goto abort_collection_return_1; }} } void s48_initializing_gc_root(void) { long v_325X; long v_324X; long v_323X; long v_322X; long v_321X; { if ((SinitializingPS)) { v_321X = s48_trace_value((Sstartup_procedureS)); Sstartup_procedureS = v_321X; v_322X = s48_trace_value((SsymbolsS)); SsymbolsS = v_322X; v_323X = s48_trace_value((Simported_bindingsS)); Simported_bindingsS = v_323X; v_324X = s48_trace_value((Sexported_bindingsS)); Sexported_bindingsS = v_324X; v_325X = s48_trace_value((Sresumer_recordsS)); Sresumer_recordsS = v_325X; return;} else { return;}} }void s48_heap_init(void) { Spure_area_countS = 0; Simpure_area_countS = 0; Sfinding_typeS = 1; Sgc_countS = 0; SstatusS = NO_ERRORS; SeofPS = 0; SinitializingPS = 1; Hthe_record_type9260 = 1; }