set up inline site info building scaffolding

This commit is contained in:
Ryan Fleury
2024-06-13 15:18:28 -07:00
parent 7495096e05
commit 550e8a0451
5 changed files with 82 additions and 16 deletions
+55
View File
@@ -833,6 +833,61 @@ rdim_symbol_chunk_list_concat_in_place(RDIM_SymbolChunkList *dst, RDIM_SymbolChu
rdim_memzero_struct(to_push);
}
////////////////////////////////
//~ rjf: [Building] Inline Site Info Building
RDI_PROC RDIM_InlineSite *
rdim_inline_site_chunk_list_push(RDIM_Arena *arena, RDIM_InlineSiteChunkList *list, RDI_U64 cap)
{
RDIM_InlineSiteChunkNode *n = list->last;
if(n == 0 || n->count >= n->cap)
{
n = rdim_push_array(arena, RDIM_InlineSiteChunkNode, 1);
n->cap = cap;
n->base_idx = list->total_count;
n->v = rdim_push_array(arena, RDIM_InlineSite, n->cap);
RDIM_SLLQueuePush(list->first, list->last, n);
list->chunk_count += 1;
}
RDIM_InlineSite *result = &n->v[n->count];
result->chunk = n;
n->count += 1;
list->total_count += 1;
return result;
}
RDI_PROC RDI_U64
rdim_idx_from_inline_site(RDIM_InlineSite *inline_site)
{
RDI_U64 idx = 0;
if(inline_site != 0 && inline_site->chunk != 0)
{
idx = inline_site->chunk->base_idx + (inline_site - inline_site->chunk->v) + 1;
}
return idx;
}
RDI_PROC void
rdim_inline_site_chunk_list_concat_in_place(RDIM_InlineSiteChunkList *dst, RDIM_InlineSiteChunkList *to_push)
{
for(RDIM_InlineSiteChunkNode *n = to_push->first; n != 0; n = n->next)
{
n->base_idx += dst->total_count;
}
if(dst->last != 0 && to_push->first != 0)
{
dst->last->next = to_push->first;
dst->last = to_push->last;
dst->chunk_count += to_push->chunk_count;
dst->total_count += to_push->total_count;
}
else if(dst->first == 0)
{
rdim_memcpy_struct(dst, to_push);
}
rdim_memzero_struct(to_push);
}
////////////////////////////////
//~ rjf: [Building] Scope Info Building
+8 -1
View File
@@ -778,7 +778,7 @@ struct RDIM_InlineSite
RDI_U32 call_col_num;
RDIM_Type *type;
RDIM_Type *owner;
RDIM_LineTable *line_info;
RDIM_LineTable *line_table;
};
typedef struct RDIM_InlineSiteChunkNode RDIM_InlineSiteChunkNode;
@@ -1157,6 +1157,13 @@ RDI_PROC RDIM_Symbol *rdim_symbol_chunk_list_push(RDIM_Arena *arena, RDIM_Symbol
RDI_PROC RDI_U64 rdim_idx_from_symbol(RDIM_Symbol *symbol);
RDI_PROC void rdim_symbol_chunk_list_concat_in_place(RDIM_SymbolChunkList *dst, RDIM_SymbolChunkList *to_push);
////////////////////////////////
//~ rjf: [Building] Inline Site Info Building
RDI_PROC RDIM_InlineSite *rdim_inline_site_chunk_list_push(RDIM_Arena *arena, RDIM_InlineSiteChunkList *list, RDI_U64 cap);
RDI_PROC RDI_U64 rdim_idx_from_inline_site(RDIM_InlineSite *inline_site);
RDI_PROC void rdim_inline_site_chunk_list_concat_in_place(RDIM_InlineSiteChunkList *dst, RDIM_InlineSiteChunkList *to_push);
////////////////////////////////
//~ rjf: [Building] Scope Info Building