MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

compaction of memory

+46 -1
+1 -1
meson.build
··· 68 68 build_date = run_command('date', '+%Y-%m-%d', check: true).stdout().strip() 69 69 70 70 version_conf = configuration_data() 71 - version_conf.set('ANT_VERSION', '0.0.7.4') 71 + version_conf.set('ANT_VERSION', '0.0.7.5') 72 72 version_conf.set('ANT_GIT_HASH', git_hash) 73 73 version_conf.set('ANT_BUILD_DATE', build_date) 74 74
+45
src/ant.c
··· 1299 1299 utarray_push_back(global_free_list, &entry); 1300 1300 } 1301 1301 1302 + static void js_fixup_offsets(struct js *js, jsoff_t start, jsoff_t size) { 1303 + for (jsoff_t n, v, off = 0; off < js->brk; off += n) { 1304 + v = loadoff(js, off); 1305 + n = esize(v & ~(GCMASK | CONSTMASK)); 1306 + if (v & GCMASK) continue; 1307 + 1308 + jsoff_t flags = v & (GCMASK | CONSTMASK); 1309 + jsoff_t cleaned = v & ~(GCMASK | CONSTMASK); 1310 + if ((cleaned & 3) != T_OBJ && (cleaned & 3) != T_PROP) continue; 1311 + jsoff_t adjusted = cleaned > start ? cleaned - size : cleaned; 1312 + if (cleaned != adjusted) saveoff(js, off, adjusted | flags); 1313 + if ((cleaned & 3) == T_OBJ) { 1314 + jsoff_t u = loadoff(js, (jsoff_t) (off + sizeof(jsoff_t))); 1315 + if (u > start) saveoff(js, (jsoff_t) (off + sizeof(jsoff_t)), u - size); 1316 + } 1317 + if ((cleaned & 3) == T_PROP) { 1318 + jsoff_t koff = loadoff(js, (jsoff_t) (off + sizeof(off))); 1319 + if (koff > start) saveoff(js, (jsoff_t) (off + sizeof(off)), koff - size); 1320 + jsval_t val = loadval(js, (jsoff_t) (off + sizeof(off) + sizeof(off))); 1321 + if (is_mem_entity(vtype(val)) && vdata(val) > start) { 1322 + saveval(js, (jsoff_t) (off + sizeof(off) + sizeof(off)), mkval(vtype(val), (unsigned long) (vdata(val) - size))); 1323 + } 1324 + } 1325 + } 1326 + 1327 + jsoff_t off = (jsoff_t) vdata(js->scope); 1328 + if (off > start) js->scope = mkval(T_OBJ, off - size); 1329 + if (js->nogc >= start) js->nogc -= size; 1330 + if (js->code > (char *) js->mem && js->code - (char *) js->mem < js->size && js->code - (char *) js->mem > start) { 1331 + js->code -= size; 1332 + } 1333 + } 1334 + 1335 + static void js_compact_from_end(struct js *js) { 1336 + jsoff_t new_brk = js->brk; 1337 + 1338 + for (jsoff_t off = 0; off < js->brk; off += esize(loadoff(js, off) & ~(GCMASK | CONSTMASK))) { 1339 + jsoff_t v = loadoff(js, off); 1340 + if ((v & GCMASK) == 0) new_brk = off + esize(v & ~(GCMASK | CONSTMASK)); 1341 + } 1342 + 1343 + js->brk = new_brk; 1344 + } 1345 + 1302 1346 static void js_clear_gc_marks(struct js *js) { 1303 1347 for (jsoff_t v, off = 0; off < js->brk; off += esize(v & ~(GCMASK | CONSTMASK))) { 1304 1348 v = loadoff(js, off); ··· 1316 1360 1317 1361 js_mark_all_entities_for_deletion(js); 1318 1362 js_unmark_used_entities(js); 1363 + js_compact_from_end(js); 1319 1364 1320 1365 js_clear_gc_marks(js); 1321 1366 free_list_compact();