mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 04:55:04 +02:00
Refactoring
This commit is contained in:
parent
9bcdd35370
commit
ef1db96f2a
4 changed files with 43 additions and 43 deletions
14
gc.c
14
gc.c
|
@ -290,10 +290,10 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data *thd)
|
||||||
vector_type *hp = dest;
|
vector_type *hp = dest;
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
type_of(hp) = vector_tag;
|
type_of(hp) = vector_tag;
|
||||||
hp->num_elt = ((vector) obj)-> num_elt;
|
hp->num_elements = ((vector) obj)-> num_elements;
|
||||||
hp->elts = (object *)(((char *)hp) + sizeof(vector_type));
|
hp->elements = (object *)(((char *)hp) + sizeof(vector_type));
|
||||||
for (i = 0; i < hp->num_elt; i++) {
|
for (i = 0; i < hp->num_elements; i++) {
|
||||||
hp->elts[i] = ((vector) obj)->elts[i];
|
hp->elements[i] = ((vector) obj)->elements[i];
|
||||||
}
|
}
|
||||||
return (char *)hp;
|
return (char *)hp;
|
||||||
}
|
}
|
||||||
|
@ -522,7 +522,7 @@ size_t gc_allocated_bytes(object obj, gc_free_list *q, gc_free_list *r)
|
||||||
return gc_heap_align(sizeof(closureN_type) + sizeof(object) * ((closureN_type *)obj)->num_elt);
|
return gc_heap_align(sizeof(closureN_type) + sizeof(object) * ((closureN_type *)obj)->num_elt);
|
||||||
}
|
}
|
||||||
if (t == vector_tag){
|
if (t == vector_tag){
|
||||||
return gc_heap_align(sizeof(vector_type) + sizeof(object) * ((vector_type *)obj)->num_elt);
|
return gc_heap_align(sizeof(vector_type) + sizeof(object) * ((vector_type *)obj)->num_elements);
|
||||||
}
|
}
|
||||||
if (t == bytevector_tag) {
|
if (t == bytevector_tag) {
|
||||||
return gc_heap_align(sizeof(bytevector_type) + sizeof(char) * ((bytevector)obj)->len);
|
return gc_heap_align(sizeof(bytevector_type) + sizeof(char) * ((bytevector)obj)->len);
|
||||||
|
@ -1045,9 +1045,9 @@ void gc_mark_black(object obj)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case vector_tag: {
|
case vector_tag: {
|
||||||
int i, n = ((vector) obj)->num_elt;
|
int i, n = ((vector) obj)->num_elements;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
gc_collector_mark_gray(obj, ((vector) obj)->elts[i]);
|
gc_collector_mark_gray(obj, ((vector) obj)->elements[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -390,8 +390,8 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gc_header_type hdr;
|
gc_header_type hdr;
|
||||||
tag_type tag;
|
tag_type tag;
|
||||||
int num_elt;
|
int num_elements;
|
||||||
object *elts;
|
object *elements;
|
||||||
} vector_type;
|
} vector_type;
|
||||||
typedef vector_type *vector;
|
typedef vector_type *vector;
|
||||||
|
|
||||||
|
@ -400,8 +400,8 @@ typedef vector_type *vector;
|
||||||
v.hdr.mark = gc_color_red; \
|
v.hdr.mark = gc_color_red; \
|
||||||
v.hdr.grayed = 0; \
|
v.hdr.grayed = 0; \
|
||||||
v.tag = vector_tag; \
|
v.tag = vector_tag; \
|
||||||
v.num_elt = 0; \
|
v.num_elements = 0; \
|
||||||
v.elts = NULL;
|
v.elements = NULL;
|
||||||
|
|
||||||
/* Bytevector type */
|
/* Bytevector type */
|
||||||
|
|
||||||
|
|
58
runtime.c
58
runtime.c
|
@ -441,10 +441,10 @@ int equal(x, y) object x, y;
|
||||||
case vector_tag:
|
case vector_tag:
|
||||||
if (is_object_type(y) &&
|
if (is_object_type(y) &&
|
||||||
type_of(y) == vector_tag &&
|
type_of(y) == vector_tag &&
|
||||||
((vector)x)->num_elt == ((vector)y)->num_elt) {
|
((vector)x)->num_elements == ((vector)y)->num_elements) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < ((vector)x)->num_elt; i++) {
|
for (i = 0; i < ((vector)x)->num_elements; i++) {
|
||||||
if (equalp(((vector)x)->elts[i], ((vector)y)->elts[i]) == boolean_f)
|
if (equalp(((vector)x)->elements[i], ((vector)y)->elements[i]) == boolean_f)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -586,11 +586,11 @@ object Cyc_display(object x, FILE *port)
|
||||||
break;
|
break;
|
||||||
case vector_tag:
|
case vector_tag:
|
||||||
fprintf(port, "#(");
|
fprintf(port, "#(");
|
||||||
for (i = 0; i < ((vector) x)->num_elt; i++) {
|
for (i = 0; i < ((vector) x)->num_elements; i++) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
fprintf(port, " ");
|
fprintf(port, " ");
|
||||||
}
|
}
|
||||||
Cyc_display(((vector)x)->elts[i], port);
|
Cyc_display(((vector)x)->elements[i], port);
|
||||||
}
|
}
|
||||||
fprintf(port, ")");
|
fprintf(port, ")");
|
||||||
break;
|
break;
|
||||||
|
@ -1004,15 +1004,15 @@ object Cyc_vector_set(void *data, object v, object k, object obj) {
|
||||||
Cyc_check_num(data, k);
|
Cyc_check_num(data, k);
|
||||||
idx = unbox_number(k);
|
idx = unbox_number(k);
|
||||||
|
|
||||||
if (idx < 0 || idx >= ((vector)v)->num_elt) {
|
if (idx < 0 || idx >= ((vector)v)->num_elements) {
|
||||||
Cyc_rt_raise2(data, "vector-set! - invalid index", k);
|
Cyc_rt_raise2(data, "vector-set! - invalid index", k);
|
||||||
}
|
}
|
||||||
|
|
||||||
gc_mut_update((gc_thread_data *)data,
|
gc_mut_update((gc_thread_data *)data,
|
||||||
((vector)v)->elts[idx],
|
((vector)v)->elements[idx],
|
||||||
obj);
|
obj);
|
||||||
|
|
||||||
((vector)v)->elts[idx] = obj;
|
((vector)v)->elements[idx] = obj;
|
||||||
add_mutation(data, v, idx, obj);
|
add_mutation(data, v, idx, obj);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
@ -1023,11 +1023,11 @@ object Cyc_vector_ref(void *data, object v, object k) {
|
||||||
Cyc_check_num(data, k);
|
Cyc_check_num(data, k);
|
||||||
|
|
||||||
idx = unbox_number(k);
|
idx = unbox_number(k);
|
||||||
if (idx < 0 || idx >= ((vector)v)->num_elt) {
|
if (idx < 0 || idx >= ((vector)v)->num_elements) {
|
||||||
Cyc_rt_raise2(data, "vector-ref - invalid index", obj_int2obj(idx));
|
Cyc_rt_raise2(data, "vector-ref - invalid index", obj_int2obj(idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((vector)v)->elts[idx];
|
return ((vector)v)->elements[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
integer_type Cyc_length_as_object(void *data, object l){
|
integer_type Cyc_length_as_object(void *data, object l){
|
||||||
|
@ -1044,7 +1044,7 @@ integer_type Cyc_length_as_object(void *data, object l){
|
||||||
|
|
||||||
object Cyc_vector_length(void *data, object v) {
|
object Cyc_vector_length(void *data, object v) {
|
||||||
if ((v != NULL) && !is_value_type(v) && ((list)v)->tag == vector_tag) {
|
if ((v != NULL) && !is_value_type(v) && ((list)v)->tag == vector_tag) {
|
||||||
return obj_int2obj(((vector)v)->num_elt);
|
return obj_int2obj(((vector)v)->num_elements);
|
||||||
}
|
}
|
||||||
Cyc_rt_raise_msg(data, "vector-length - invalid parameter, expected vector\n"); }
|
Cyc_rt_raise_msg(data, "vector-length - invalid parameter, expected vector\n"); }
|
||||||
|
|
||||||
|
@ -1449,13 +1449,13 @@ object Cyc_make_vector(void *data, object cont, int argc, object len, ...) {
|
||||||
((vector)v)->hdr.mark = gc_color_red;
|
((vector)v)->hdr.mark = gc_color_red;
|
||||||
((vector)v)->hdr.grayed = 0;
|
((vector)v)->hdr.grayed = 0;
|
||||||
((vector)v)->tag = vector_tag;
|
((vector)v)->tag = vector_tag;
|
||||||
((vector)v)->num_elt = ulen;
|
((vector)v)->num_elements = ulen;
|
||||||
((vector)v)->elts =
|
((vector)v)->elements =
|
||||||
(((vector)v)->num_elt > 0) ?
|
(((vector)v)->num_elements > 0) ?
|
||||||
(object *)alloca(sizeof(object) * ((vector)v)->num_elt) :
|
(object *)alloca(sizeof(object) * ((vector)v)->num_elements) :
|
||||||
NULL;
|
NULL;
|
||||||
for (i = 0; i < ((vector)v)->num_elt; i++) {
|
for (i = 0; i < ((vector)v)->num_elements; i++) {
|
||||||
((vector)v)->elts[i] = fill;
|
((vector)v)->elements[i] = fill;
|
||||||
}
|
}
|
||||||
// } else {
|
// } else {
|
||||||
// // Experimenting with heap allocation if vector is too large
|
// // Experimenting with heap allocation if vector is too large
|
||||||
|
@ -1465,10 +1465,10 @@ object Cyc_make_vector(void *data, object cont, int argc, object len, ...) {
|
||||||
// boolean_f, (gc_thread_data *)data, &heap_grown);
|
// boolean_f, (gc_thread_data *)data, &heap_grown);
|
||||||
// mark(vt) = ((gc_thread_data *)data)->gc_alloc_color;
|
// mark(vt) = ((gc_thread_data *)data)->gc_alloc_color;
|
||||||
// type_of(vt) = vector_tag;
|
// type_of(vt) = vector_tag;
|
||||||
// vt->num_elt = ulen;
|
// vt->num_elements = ulen;
|
||||||
// vt->elts = (object *)((char *)vt) + sizeof(vector_type);
|
// vt->elements = (object *)((char *)vt) + sizeof(vector_type);
|
||||||
// for (i = 0; i < ulen; i++) {
|
// for (i = 0; i < ulen; i++) {
|
||||||
// vt->elts[i] = fill;
|
// vt->elements[i] = fill;
|
||||||
// }
|
// }
|
||||||
// v = vt;
|
// v = vt;
|
||||||
// }
|
// }
|
||||||
|
@ -1722,13 +1722,13 @@ object Cyc_list2vector(void *data, object cont, object l) {
|
||||||
((vector)v)->hdr.mark = gc_color_red;
|
((vector)v)->hdr.mark = gc_color_red;
|
||||||
((vector)v)->hdr.grayed = 0;
|
((vector)v)->hdr.grayed = 0;
|
||||||
((vector)v)->tag = vector_tag;
|
((vector)v)->tag = vector_tag;
|
||||||
((vector)v)->num_elt = obj_obj2int(len);
|
((vector)v)->num_elements = obj_obj2int(len);
|
||||||
((vector)v)->elts =
|
((vector)v)->elements =
|
||||||
(((vector)v)->num_elt > 0) ?
|
(((vector)v)->num_elements > 0) ?
|
||||||
(object *)alloca(sizeof(object) * ((vector)v)->num_elt) :
|
(object *)alloca(sizeof(object) * ((vector)v)->num_elements) :
|
||||||
NULL;
|
NULL;
|
||||||
while((lst != NULL)) {
|
while((lst != NULL)) {
|
||||||
((vector)v)->elts[i++] = car(lst);
|
((vector)v)->elements[i++] = car(lst);
|
||||||
lst = cdr(lst);
|
lst = cdr(lst);
|
||||||
}
|
}
|
||||||
return_closcall1(data, cont, v);
|
return_closcall1(data, cont, v);
|
||||||
|
@ -2791,7 +2791,7 @@ char *gc_move(char *obj, gc_thread_data *thd, int *alloci, int *heap_grown) {
|
||||||
}
|
}
|
||||||
case vector_tag: {
|
case vector_tag: {
|
||||||
vector_type *hp = gc_alloc(Cyc_heap,
|
vector_type *hp = gc_alloc(Cyc_heap,
|
||||||
sizeof(vector_type) + sizeof(object) * (((vector) obj)->num_elt),
|
sizeof(vector_type) + sizeof(object) * (((vector) obj)->num_elements),
|
||||||
obj, thd, heap_grown);
|
obj, thd, heap_grown);
|
||||||
return gc_fixup_moved_obj(thd, alloci, obj, hp);
|
return gc_fixup_moved_obj(thd, alloci, obj, hp);
|
||||||
}
|
}
|
||||||
|
@ -2904,7 +2904,7 @@ int gc_minor(void *data, object low_limit, object high_limit, closure cont, obje
|
||||||
l = cdr(l);
|
l = cdr(l);
|
||||||
idx = car(l);
|
idx = car(l);
|
||||||
i = obj_obj2int(idx);
|
i = obj_obj2int(idx);
|
||||||
gc_move2heap(((vector)o)->elts[i]);
|
gc_move2heap(((vector)o)->elements[i]);
|
||||||
} else if (type_of(o) == forward_tag) {
|
} else if (type_of(o) == forward_tag) {
|
||||||
// Already transported, skip
|
// Already transported, skip
|
||||||
} else {
|
} else {
|
||||||
|
@ -2945,9 +2945,9 @@ int gc_minor(void *data, object low_limit, object high_limit, closure cont, obje
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case vector_tag: {
|
case vector_tag: {
|
||||||
int i, n = ((vector) obj)->num_elt;
|
int i, n = ((vector) obj)->num_elements;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
gc_move2heap(((vector) obj)->elts[i]);
|
gc_move2heap(((vector) obj)->elements[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,7 +368,7 @@
|
||||||
(c:allocs idx-code) ;; Member alloc at index i
|
(c:allocs idx-code) ;; Member alloc at index i
|
||||||
(list ;; Assign this member to vector
|
(list ;; Assign this member to vector
|
||||||
(string-append
|
(string-append
|
||||||
cvar-name ".elts[" (number->string i) "] = "
|
cvar-name ".elements[" (number->string i) "] = "
|
||||||
(c:body idx-code)
|
(c:body idx-code)
|
||||||
";")))))))))
|
";")))))))))
|
||||||
)
|
)
|
||||||
|
@ -386,8 +386,8 @@
|
||||||
(list ; Allocate the vector
|
(list ; Allocate the vector
|
||||||
(string-append
|
(string-append
|
||||||
"make_empty_vector(" cvar-name ");"
|
"make_empty_vector(" cvar-name ");"
|
||||||
cvar-name ".num_elt = " (number->string len) ";"
|
cvar-name ".num_elements = " (number->string len) ";"
|
||||||
cvar-name ".elts = (object *)alloca(sizeof(object) * "
|
cvar-name ".elements = (object *)alloca(sizeof(object) * "
|
||||||
(number->string len) ");")))))
|
(number->string len) ");")))))
|
||||||
(loop 0 code))))))
|
(loop 0 code))))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue