-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
… index HT_NOTFOUND
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -290,9 +290,10 @@ static void jl_serialize_globalvals(ios_t *s) | |
for(i=0; i < len; i+=2) { | ||
void *offs = p[i+1]; | ||
if (offs != HT_NOTFOUND) { | ||
uintptr_t pos = offs - HT_NOTFOUND - 1; | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
yuyichao
Contributor
|
||
int32_t gv = jl_get_llvm_gv((jl_value_t*)p[i]); | ||
if (gv != 0) { | ||
write_int32(s, (int)(intptr_t)offs); | ||
write_int32(s, pos); | ||
write_int32(s, gv); | ||
} | ||
} | ||
|
@@ -445,7 +446,7 @@ static void jl_serialize_datatype(ios_t *s, jl_datatype_t *dt) | |
// also flag this in the backref table as special | ||
uptrint_t *bp = (uptrint_t*)ptrhash_bp(&backref_table, dt); | ||
assert(*bp != (uptrint_t)HT_NOTFOUND); | ||
*bp |= 1; | ||
*bp |= 1; assert(((uptrint_t)HT_NOTFOUND)|1); | ||
} | ||
} | ||
else if (dt == jl_int32_type) | ||
|
@@ -507,8 +508,10 @@ static void jl_serialize_module(ios_t *s, jl_module_t *m) | |
write_int8(s, ref_only); | ||
} | ||
jl_serialize_value(s, m->parent); | ||
if (ref_only) | ||
if (ref_only) { | ||
assert(m->parent != m); | ||
return; | ||
} | ||
size_t i; | ||
void **table = m->bindings.table; | ||
for(i=1; i < m->bindings.size; i+=2) { | ||
|
@@ -601,13 +604,14 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v) | |
else { | ||
bp = ptrhash_bp(&backref_table, v); | ||
if (*bp != HT_NOTFOUND) { | ||
uintptr_t pos = *bp - HT_NOTFOUND - 1; | ||
if ((uptrint_t)*bp < 65536) { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
write_uint8(s, ShortBackRef_tag); | ||
write_uint16(s, (uptrint_t)*bp); | ||
write_uint16(s, pos); | ||
} | ||
else { | ||
write_uint8(s, BackRef_tag); | ||
write_int32(s, (uptrint_t)*bp); | ||
write_int32(s, pos); | ||
} | ||
return; | ||
} | ||
|
@@ -627,7 +631,7 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v) | |
} | ||
if (mode == MODE_MODULE || mode == MODE_MODULE_POSTWORK) | ||
pos <<= 1; | ||
ptrhash_put(&backref_table, v, (void*)pos); | ||
ptrhash_put(&backref_table, v, HT_NOTFOUND + pos + 1); | ||
} | ||
|
||
size_t i; | ||
|
@@ -809,7 +813,7 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v) | |
// also flag this in the backref table as special | ||
uptrint_t *bp = (uptrint_t*)ptrhash_bp(&backref_table, v); | ||
assert(*bp != (uptrint_t)HT_NOTFOUND); | ||
*bp |= 1; | ||
*bp |= 1; assert(((uptrint_t)HT_NOTFOUND)|1); | ||
} | ||
writetag(s, (jl_value_t*)Singleton_tag); | ||
jl_serialize_value(s, t); | ||
|
@@ -1881,7 +1885,7 @@ DLLEXPORT int jl_save_incremental(const char *fname, jl_array_t *worklist) | |
JL_SIGATOMIC_BEGIN(); | ||
arraylist_new(&reinit_list, 0); | ||
htable_new(&backref_table, 5000); | ||
ptrhash_put(&backref_table, jl_main_module, (void*)(uintptr_t)0); | ||
ptrhash_put(&backref_table, jl_main_module, HT_NOTFOUND + 1); | ||
backref_table_numel = 1; | ||
jl_idtable_type = jl_base_module ? jl_get_global(jl_base_module, jl_symbol("ObjectIdDict")) : NULL; | ||
|
||
|
MSVC complains that
void *
is of unknown size here and the other lines that you are doing arithmetic onHT_NOTFOUND
. Should it be cast touintptr_t
everywhere?