looking into removing "oop" features from base library

I want to make member functions an optional addition the user can generate a derivative library with.
The purpose is to simplify the implementation as to make generating a C-variant simpiler.

I also want to use it as a study to see how much simpiler it makes the library without having it.
This commit is contained in:
Edward R. Gonzalez 2024-11-29 15:18:06 -05:00
parent e3c2a577ba
commit 163ad0a511
3 changed files with 31 additions and 22 deletions

View File

@ -16,8 +16,8 @@ ssize token_fmt_va( char* buf, usize buf_size, s32 num_tokens, va_list va )
local_persist local_persist
char tok_map_mem[ TokenFmt_TokenMap_MemSize ]; char tok_map_mem[ TokenFmt_TokenMap_MemSize ];
tok_map_arena = Arena::init_from_memory( tok_map_mem, sizeof(tok_map_mem) ); init_from_memory( tok_map_arena, tok_map_mem, sizeof(tok_map_mem) );
tok_map = HashTable<StrC>::init( tok_map_arena ); tok_map = HashTable<StrC>::init( tok_map_arena );
s32 left = num_tokens - 1; s32 left = num_tokens - 1;

View File

@ -712,7 +712,10 @@ Code parse_class_struct( TokType which, bool inplace_def = false )
local_persist local_persist
char interface_arr_mem[ kilobytes(4) ] {0}; char interface_arr_mem[ kilobytes(4) ] {0};
Array<CodeType> interfaces = Array<CodeType>::init_reserve( Arena::init_from_memory(interface_arr_mem, kilobytes(4) ), 4 ); Array<CodeType> interfaces; {
Arena arena; init_from_memory(arena, interface_arr_mem, kilobytes(4) );
Array<CodeType>::init_reserve( arena, 4 );
}
// TODO(Ed) : Make an AST_DerivedType, we'll store any arbitary derived type into there as a linear linked list of them. // TODO(Ed) : Make an AST_DerivedType, we'll store any arbitary derived type into there as a linear linked list of them.
if ( check( TokType::Assign_Classifer ) ) if ( check( TokType::Assign_Classifer ) )

View File

@ -170,23 +170,20 @@ b32 gen_vm_purge( VirtualMemory vm );
//! Retrieve VM's page size and alignment. //! Retrieve VM's page size and alignment.
ssize gen_virtual_memory_page_size( ssize* alignment_out ); ssize gen_virtual_memory_page_size( ssize* alignment_out );
struct Arena;
void init_from_memory( Arena& arena, void* start, ssize size );
struct Arena struct Arena
{ {
static static
void* allocator_proc( void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags ); void* allocator_proc( void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags );
static //forceinline static
Arena init_from_memory( void* start, ssize size ) //Arena init_from_memory( void* start, ssize size ) {
{ // Arena result; GEN_NS init_from_memory( result, start, size );
return // return result;
{ //}
{ nullptr, nullptr },
start,
size,
0,
0
};
}
static static
Arena init_from_allocator( AllocatorInfo backing, ssize size ) Arena init_from_allocator( AllocatorInfo backing, ssize size )
@ -249,16 +246,25 @@ struct Arena
AllocatorInfo Backing; AllocatorInfo Backing;
void* PhysicalStart; void* PhysicalStart;
ssize TotalSize; ssize TotalSize;
ssize TotalUsed; ssize TotalUsed;
ssize TempCount; ssize TempCount;
operator AllocatorInfo() operator AllocatorInfo() { return { allocator_proc, this }; }
{
return { allocator_proc, this };
}
}; };
void init_from_memory( Arena& arena, void* start, ssize size )
{
arena =
{
{ nullptr, nullptr },
start,
size,
0,
0
};
}
// Just a wrapper around using an arena with memory associated with its scope instead of from an allocator. // Just a wrapper around using an arena with memory associated with its scope instead of from an allocator.
// Used for static segment or stack allocations. // Used for static segment or stack allocations.
template< s32 Size > template< s32 Size >