Switch to TABLE_INCREF
This commit is contained in:
parent
7fd74553f8
commit
7300049867
@ -107,12 +107,6 @@ static void maybe_copy_on_write(table_t *t, const TypeInfo *type)
|
||||
}
|
||||
}
|
||||
|
||||
public void Table$mark_copy_on_write(table_t *t)
|
||||
{
|
||||
ARRAY_INCREF(t->entries);
|
||||
if (t->bucket_info) t->bucket_info->data_refcount = TABLE_MAX_DATA_REFCOUNT;
|
||||
}
|
||||
|
||||
// Return address of value or NULL
|
||||
public void *Table$get_raw(table_t t, const void *key, const TypeInfo *type)
|
||||
{
|
||||
|
@ -41,6 +41,7 @@ void Table$remove(table_t *t, const void *key, const TypeInfo *type);
|
||||
void Table$clear(table_t *t);
|
||||
table_t Table$sorted(table_t t, const TypeInfo *type);
|
||||
void Table$mark_copy_on_write(table_t *t);
|
||||
#define TABLE_INCREF(t) ({ ARRAY_INCREF((t).entries); if ((t).bucket_info) (t).bucket_info.data_refcount += ((t).bucket_info.data_refcount < TABLE_MAX_DATA_REFCOUNT); })
|
||||
int32_t Table$compare(const table_t *x, const table_t *y, const TypeInfo *type);
|
||||
bool Table$equal(const table_t *x, const table_t *y, const TypeInfo *type);
|
||||
uint32_t Table$hash(const table_t *t, const TypeInfo *type);
|
||||
|
@ -2172,7 +2172,7 @@ CORD compile(env_t *env, ast_t *ast)
|
||||
if (ptr->pointed->tag == ArrayType) {
|
||||
return CORD_all("({ array_t *arr = ", compile(env, indexing->indexed), "; ARRAY_INCREF(*arr); *arr; })");
|
||||
} else if (ptr->pointed->tag == TableType) {
|
||||
return CORD_all("({ table_t *t = ", compile(env, indexing->indexed), "; Table$mark_copy_on_write(t); *t; })");
|
||||
return CORD_all("({ table_t *t = ", compile(env, indexing->indexed), "; TABLE_INCREF(*t); *t; })");
|
||||
} else {
|
||||
return CORD_all("*(", compile(env, indexing->indexed), ")");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user