ref: 3ac4a7438c33cdd5405f7c276eaf903b27188512
parent: fa6de0c042b52461ee5e7dc6088375f62d83cf62
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Fri Mar 7 21:10:14 EST 2025
relocate → sl_relocate
--- a/src/sl.c
+++ b/src/sl.c
@@ -363,7 +363,7 @@
}
sl_v
-relocate(sl_v v)
+sl_relocate(sl_v v)
{
sl_v a, d, nc, first, *pcdr;
@@ -384,11 +384,11 @@
*pcdr = nc = tagptr((sl_cons*)slg.curheap, TAG_CONS);
slg.curheap += sizeof(sl_cons);
forward(v, nc);
- car_(nc) = ismanaged(a) ? relocate(a) : a;
+ car_(nc) = ismanaged(a) ? sl_relocate(a) : a;
pcdr = &cdr_(nc);
v = d;
}while(iscons(v));
- *pcdr = d == sl_nil ? sl_nil : relocate(d);
+ *pcdr = d == sl_nil ? sl_nil : sl_relocate(d);
return first;
}
@@ -404,7 +404,7 @@
usize i, sz = vector_size(v);
if(vector_elt(v, -1) & 0x1){
// grown vector
- nc = relocate(vector_elt(v, 0));
+ nc = sl_relocate(vector_elt(v, 0));
forward(v, nc);
}else{
nc = tagptr(alloc_words(sz+1), TAG_VECTOR);
@@ -412,9 +412,9 @@
a = vector_elt(v, 0);
forward(v, nc);
if(sz > 0){
- vector_elt(nc, 0) = relocate(a);
+ vector_elt(nc, 0) = sl_relocate(a);
for(i = 1; i < sz; i++)
- vector_elt(nc, i) = relocate(vector_elt(v, i));
+ vector_elt(nc, i) = sl_relocate(vector_elt(v, i));
}
}
return nc;
@@ -426,9 +426,9 @@
nfn->bcode = fn->bcode;
nc = tagptr(nfn, TAG_FUNCTION);
forward(v, nc);
- nfn->vals = relocate(nfn->vals);
- nfn->bcode = relocate(nfn->bcode);
- nfn->env = relocate(fn->env);
+ nfn->vals = sl_relocate(nfn->vals);
+ nfn->bcode = sl_relocate(nfn->bcode);
+ nfn->env = sl_relocate(fn->env);
assert(!ismanaged(fn->name));
nfn->name = fn->name;
return nc;
@@ -442,7 +442,7 @@
nc = tagptr(ng, TAG_SYM);
forward(v, nc);
if(sl_likely(ng->binding != UNBOUND))
- ng->binding = relocate(ng->binding);
+ ng->binding = sl_relocate(ng->binding);
return nc;
}
if(t == TAG_CPRIM){
@@ -465,7 +465,7 @@
sl_sym *v;
while(Tnext(slg.symbols, &k, (void**)&v)){
if(v->binding != UNBOUND)
- v->binding = relocate(v->binding);
+ v->binding = sl_relocate(v->binding);
}
}
@@ -473,11 +473,8 @@
sl_gc(bool mustgrow)
{
slg.gccalls++;
- slg.curheap = slg.tospace;
- if(slg.grew)
- slg.lim = slg.curheap+slg.heapsize*2-sizeof(sl_cons);
- else
- slg.lim = slg.curheap+slg.heapsize-sizeof(sl_cons);
+ slg.lim = slg.curheap = slg.tospace;
+ slg.lim += slg.heapsize * (slg.grew ? 2 : 1) - sizeof(sl_cons);
sl_v *top, *f;
if(sl.throwing_frame > sl.curr_frame){
@@ -489,7 +486,7 @@
}
for(;;){
for(sl_v *p = f; p < top; p++)
- *p = relocate(*p);
+ *p = sl_relocate(*p);
if(f == sl.stack)
break;
top = f - 3;
@@ -496,7 +493,7 @@
f = (sl_v*)*top;
}
for(int i = 0; i < slg.ngchandles; i++)
- *slg.gchandles[i] = relocate(*slg.gchandles[i]);
+ *slg.gchandles[i] = sl_relocate(*slg.gchandles[i]);
trace_globals();
relocate_typetable();
sl_readstate *rs = sl.readstate;
@@ -505,20 +502,20 @@
for(int i = 0; i < rs->backrefs.size; i++){
ent = (sl_v)rs->backrefs.table[i];
if(ent != (sl_v)HT_NOTFOUND)
- rs->backrefs.table[i] = (void*)relocate(ent);
+ rs->backrefs.table[i] = (void*)sl_relocate(ent);
}
for(int i = 0; i < rs->gensyms.size; i++){
ent = (sl_v)rs->gensyms.table[i];
if(ent != (sl_v)HT_NOTFOUND)
- rs->gensyms.table[i] = (void*)relocate(ent);
+ rs->gensyms.table[i] = (void*)sl_relocate(ent);
}
- rs->source = relocate(rs->source);
+ rs->source = sl_relocate(rs->source);
rs = rs->prev;
}
- sl.lasterror = relocate(sl.lasterror);
- sl_erroom = relocate(sl_erroom);
- sl_emptyvec = relocate(sl_emptyvec);
- sl_emptystr = relocate(sl_emptystr);
+ sl.lasterror = sl_relocate(sl.lasterror);
+ sl_erroom = sl_relocate(sl_erroom);
+ sl_emptyvec = sl_relocate(sl_emptyvec);
+ sl_emptystr = sl_relocate(sl_emptystr);
sweep_finalizers();
--- a/src/sl.h
+++ b/src/sl.h
@@ -181,7 +181,7 @@
_Noreturn void sl_exit(int status);
/* collector */
-sl_v relocate(sl_v v) sl_hotfn;
+sl_v sl_relocate(sl_v v) sl_hotfn;
void sl_gc(bool mustgrow);
void sl_gc_handle(sl_v *pv);
void sl_free_gc_handles(int n);
--- a/src/table.c
+++ b/src/table.c
@@ -55,7 +55,7 @@
h->i = oldh->i;
for(int i = 0; i < h->size; i++){
if(h->table[i] != HT_NOTFOUND)
- h->table[i] = (void*)relocate((sl_v)h->table[i]);
+ h->table[i] = (void*)sl_relocate((sl_v)h->table[i]);
}
}
--- a/src/types.c
+++ b/src/types.c
@@ -77,7 +77,7 @@
sl_htable *h = &slg.types;
for(int i = 0; i < h->size; i += 2){
if(h->table[i] != HT_NOTFOUND){
- void *nv = (void*)relocate((sl_v)h->table[i]);
+ void *nv = (void*)sl_relocate((sl_v)h->table[i]);
h->table[i] = nv;
if(h->table[i+1] != HT_NOTFOUND)
((sl_type*)h->table[i+1])->type = (sl_v)nv;