Skip to content
Snippets Groups Projects
Commit b28e5231 authored by John van Groningen's avatar John van Groningen
Browse files

Merge branch 'fix-copy-from-string-on-ARRAY-relative-systems' into 'master'

Fix copy_from_string for unboxed arrays of records on systems with USE_DESC_RELATIVE_TO_ARRAY

See merge request !13
parents 7fbaaee9 3d724e8f
No related branches found
No related tags found
1 merge request!13Fix copy_from_string for unboxed arrays of records on systems with USE_DESC_RELATIVE_TO_ARRAY
......@@ -106,40 +106,45 @@ void remove_forwarding_pointers_from_string (Int *string_p,Int *end_forwarding_p
elem_desc=string_p[2];
string_p+=3;
if (elem_desc==0){
} else if (elem_desc==(Int)&INT+2
if (elem_desc!=0){
#if defined (USE_DESC_RELATIVE_TO_ARRAY)
elem_desc+=(Int)&__ARRAY__;
#endif
if (elem_desc==(Int)&INT+2
#if ARCH_64
|| elem_desc==(Int)&REAL+2
|| elem_desc==(Int)&REAL+2
#else
|| elem_desc==(Int)&INT32+2
|| elem_desc==(Int)&REAL32+2
|| elem_desc==(Int)&INT32+2
|| elem_desc==(Int)&REAL32+2
#endif
){
string_p+=array_size;
){
string_p+=array_size;
#if ARCH_64
} else if (elem_desc==(Int)&INT32+2 || elem_desc==(Int)&REAL32+2){
array_size=(array_size+1)>>1;
string_p+=array_size;
} else if (elem_desc==(Int)&INT32+2 || elem_desc==(Int)&REAL32+2){
array_size=(array_size+1)>>1;
string_p+=array_size;
#else
} else if (elem_desc==(Int)&REAL+2){
array_size<<=1;
string_p+=array_size;
} else if (elem_desc==(Int)&REAL+2){
array_size<<=1;
string_p+=array_size;
#endif
} else if (elem_desc==(Int)&BOOL+2){
} else if (elem_desc==(Int)&BOOL+2){
#if ARCH_64
array_size=(array_size+7)>>3;
array_size=(array_size+7)>>3;
#else
array_size=(array_size+3)>>2;
array_size=(array_size+3)>>2;
#endif
string_p+=array_size;
} else {
Int n_field_pointers,n_non_field_pointers,field_size;
n_field_pointers=*(unsigned short *)elem_desc;
field_size=((unsigned short *)elem_desc)[-1]-(Int)256;
n_non_field_pointers=field_size-n_field_pointers;
string_p+=n_non_field_pointers*array_size;
string_p+=array_size;
} else {
Int n_field_pointers,n_non_field_pointers,field_size;
n_field_pointers=*(unsigned short *)elem_desc;
field_size=((unsigned short *)elem_desc)[-1]-(Int)256;
n_non_field_pointers=field_size-n_field_pointers;
string_p+=n_non_field_pointers*array_size;
}
}
} else {
++string_p;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment