mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-21 14:49:17 +02:00
Copy immutable fields
This commit is contained in:
parent
465167445f
commit
4bc8bf1899
1 changed files with 5 additions and 0 deletions
5
gc.c
5
gc.c
|
@ -797,6 +797,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
case pair_tag:{
|
case pair_tag:{
|
||||||
list hp = dest;
|
list hp = dest;
|
||||||
hp->hdr.mark = thd->gc_alloc_color;
|
hp->hdr.mark = thd->gc_alloc_color;
|
||||||
|
hp->hdr.immutable = immutable(obj);
|
||||||
type_of(hp) = pair_tag;
|
type_of(hp) = pair_tag;
|
||||||
car(hp) = car(obj);
|
car(hp) = car(obj);
|
||||||
cdr(hp) = cdr(obj);
|
cdr(hp) = cdr(obj);
|
||||||
|
@ -808,6 +809,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
s = ((char *)hp) + sizeof(string_type);
|
s = ((char *)hp) + sizeof(string_type);
|
||||||
memcpy(s, string_str(obj), string_len(obj) + 1);
|
memcpy(s, string_str(obj), string_len(obj) + 1);
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
immutable(hp) = immutable(obj);
|
||||||
type_of(hp) = string_tag;
|
type_of(hp) = string_tag;
|
||||||
string_num_cp(hp) = string_num_cp(obj);
|
string_num_cp(hp) = string_num_cp(obj);
|
||||||
string_len(hp) = string_len(obj);
|
string_len(hp) = string_len(obj);
|
||||||
|
@ -824,6 +826,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
case vector_tag:{
|
case vector_tag:{
|
||||||
vector_type *hp = dest;
|
vector_type *hp = dest;
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
immutable(hp) = immutable(obj);
|
||||||
type_of(hp) = vector_tag;
|
type_of(hp) = vector_tag;
|
||||||
hp->num_elements = ((vector) obj)->num_elements;
|
hp->num_elements = ((vector) obj)->num_elements;
|
||||||
hp->elements = (object *) (((char *)hp) + sizeof(vector_type));
|
hp->elements = (object *) (((char *)hp) + sizeof(vector_type));
|
||||||
|
@ -833,6 +836,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
case bytevector_tag:{
|
case bytevector_tag:{
|
||||||
bytevector_type *hp = dest;
|
bytevector_type *hp = dest;
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
immutable(hp) = immutable(obj);
|
||||||
type_of(hp) = bytevector_tag;
|
type_of(hp) = bytevector_tag;
|
||||||
hp->len = ((bytevector) obj)->len;
|
hp->len = ((bytevector) obj)->len;
|
||||||
hp->data = (((char *)hp) + sizeof(bytevector_type));
|
hp->data = (((char *)hp) + sizeof(bytevector_type));
|
||||||
|
@ -911,6 +915,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
case c_opaque_tag:{
|
case c_opaque_tag:{
|
||||||
c_opaque_type *hp = dest;
|
c_opaque_type *hp = dest;
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
immutable(hp) = immutable(obj);
|
||||||
type_of(hp) = c_opaque_tag;
|
type_of(hp) = c_opaque_tag;
|
||||||
hp->ptr = ((c_opaque_type *) obj)->ptr;
|
hp->ptr = ((c_opaque_type *) obj)->ptr;
|
||||||
return (char *)hp;
|
return (char *)hp;
|
||||||
|
|
Loading…
Add table
Reference in a new issue