static void fasl_ensure_valid_table_index(lref_t reader, size_t index) { if (NULLP(FASL_READER_STREAM(reader)->table)) { FASL_READER_STREAM(reader)->table = vectorcons((index >= DEFAULT_FASL_TABLE_SIZE) ? index + DEFAULT_FASL_TABLE_SIZE : DEFAULT_FASL_TABLE_SIZE, NIL); } else { lref_t fasl_table = FASL_READER_STREAM(reader)->table; assert(VECTORP(fasl_table)); size_t old_len = fasl_table->as.vector.dim; if (index >= old_len) { size_t new_len = (index >= old_len * 2) ? index + DEFAULT_FASL_TABLE_SIZE : (old_len * 2); FASL_READER_STREAM(reader)->table = vector_resize(fasl_table, new_len > SIZE_MAX ? SIZE_MAX : (size_t) new_len, NIL); } } assert(VECTORP(FASL_READER_STREAM(reader)->table)); assert(index < (FASL_READER_STREAM(reader)->table)->as.vector.dim); }
static void fast_read_structure(lref_t reader, lref_t * st) { lref_t st_meta; fast_read(reader, &st_meta, false); if (!CONSP(st_meta)) vmerror_fast_read("Expected list for structure metadata", reader, st_meta); lref_t st_length; fast_read(reader, &st_length, false); if (!FIXNUMP(st_length)) vmerror_fast_read("Expected fixnum for structure length", reader, st_length); *st = lstructurecons(vectorcons(FIXNM(st_length), NIL), st_meta); for (fixnum_t ii = 0; ii < FIXNM(st_length); ii++) { lref_t object; fast_read(reader, &object, false); if (EOFP(object)) vmerror_fast_read("incomplete structure definition", reader, *st); SET_STRUCTURE_ELEM(*st, ii, object); } }
lref_t lifoplog_snapshot() { lref_t result = vectorcons(FOPLOG_SIZE, fixcons(-1)); for(int ii = 0; ii < FOPLOG_SIZE; ii++) SET_VECTOR_ELEM(result, ii, CURRENT_TIB()->foplog[ii]); return result; }
lref_t lstress_c_heap(lref_t c, lref_t s) { if (!FIXNUMP(c)) vmerror_wrong_type_n(1, c); if (!FIXNUMP(s)) vmerror_wrong_type_n(2, s); fixnum_t count = FIXNM(c); fixnum_t size = FIXNM(s); for (fixnum_t i = 0; i < count; i++) vectorcons(size, NIL); return NIL; }
static void fast_read_vector(lref_t reader, lref_t * vec) { lref_t vec_length; fast_read(reader, &vec_length, false); if (!FIXNUMP(vec_length)) vmerror_fast_read("Expected fixnum for vector length", reader, vec_length); *vec = vectorcons(FIXNM(vec_length), NIL); for (fixnum_t ii = 0; ii < FIXNM(vec_length); ii++) { lref_t object; fast_read(reader, &object, false); if (EOFP(object)) vmerror_fast_read("incomplete vector definition", reader, *vec); (*vec)->as.vector.data[ii] = object; } }
lref_t lheap_cell_count_by_typecode() { lref_t obj, org, end; enum typecode_t type; lref_t result = NIL; size_t internal_type_counts[LAST_INTERNAL_TYPEC + 1]; for (size_t ii = 0; ii < LAST_INTERNAL_TYPEC + 1; ii++) internal_type_counts[ii] = 0; /* Traverse the heaps, counting each type */ for (size_t heap_no = 0; heap_no < interp.gc_max_heap_segments; heap_no++) { if (interp.gc_heap_segments[heap_no] == NULL) continue; org = interp.gc_heap_segments[heap_no]; end = org + interp.gc_heap_segment_size; for (obj = org; obj < end; ++obj) { type = TYPE(obj); internal_type_counts[type]++; } } /* Build the result list */ result = vectorcons(LAST_INTERNAL_TYPEC + 1, NIL); for (size_t ii = 0; ii <= LAST_INTERNAL_TYPEC; ii++) result->as.vector.data[ii] = fixcons(internal_type_counts[ii]); return result; }