Support a special const-value refcount, use it for const strings.
This commit is contained in:
@@ -61,8 +61,12 @@ align_of(rust_task *task, type_desc *t) {
|
||||
return t->align;
|
||||
}
|
||||
|
||||
extern "C" CDECL size_t
|
||||
refcount(rust_task *task, type_desc *t, size_t *v) {
|
||||
extern "C" CDECL intptr_t
|
||||
refcount(rust_task *task, type_desc *t, intptr_t *v) {
|
||||
|
||||
if (*v == CONST_REFCOUNT)
|
||||
return CONST_REFCOUNT;
|
||||
|
||||
// Passed-in value has refcount 1 too high
|
||||
// because it was ref'ed while making the call.
|
||||
return (*v) - 1;
|
||||
@@ -277,7 +281,9 @@ debug_box(rust_task *task, type_desc *t, rust_box *box)
|
||||
task->log(rust_log::STDLIB, "debug_box(0x%" PRIxPTR ")", box);
|
||||
debug_tydesc_helper(task, t);
|
||||
task->log(rust_log::STDLIB, " refcount %" PRIdPTR,
|
||||
box->ref_count - 1); // -1 because we ref'ed for this call
|
||||
box->ref_count == CONST_REFCOUNT
|
||||
? CONST_REFCOUNT
|
||||
: box->ref_count - 1); // -1 because we ref'ed for this call
|
||||
for (uintptr_t i = 0; i < t->size; ++i) {
|
||||
task->log(rust_log::STDLIB,
|
||||
" byte %" PRIdPTR ": 0x%" PRIx8, i, box->data[i]);
|
||||
|
||||
Reference in New Issue
Block a user