mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-06 07:38:45 +00:00
[plugin macros] clean up all usage of context; also document a few more things
This commit is contained in:
+10
-10
@@ -207,21 +207,14 @@
|
|||||||
column: MD_u32,
|
column: MD_u32,
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ Message Levels
|
|
||||||
|
|
||||||
@enum MD_MessageKind: {
|
|
||||||
None,
|
|
||||||
Warning,
|
|
||||||
Error,
|
|
||||||
CatastrophicError,
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ String-To-Node table
|
//~ String-To-Node table
|
||||||
|
|
||||||
|
@doc("Controls the behavior of routines that write into maps when the written key was already in the map.")
|
||||||
@enum MD_MapCollisionRule: {
|
@enum MD_MapCollisionRule: {
|
||||||
|
@doc("When the key written was already in the map, a new key value pair is attached to the same chain always. Leaving multiple values associated to the same key.")
|
||||||
Chain,
|
Chain,
|
||||||
|
@doc("When the key written was already in the map, the existing value is replaced with the newly inserted value.")
|
||||||
Overwrite,
|
Overwrite,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,6 +296,13 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Parsing State
|
//~ Parsing State
|
||||||
|
|
||||||
|
@enum MD_MessageKind: {
|
||||||
|
None,
|
||||||
|
Warning,
|
||||||
|
Error,
|
||||||
|
CatastrophicError,
|
||||||
|
}
|
||||||
|
|
||||||
@struct MD_Error: {
|
@struct MD_Error: {
|
||||||
next: *MD_Error,
|
next: *MD_Error,
|
||||||
string: MD_String8,
|
string: MD_String8,
|
||||||
|
|||||||
+10
-13
@@ -19,8 +19,7 @@
|
|||||||
// NOTE(allen): "Plugin" functionality
|
// NOTE(allen): "Plugin" functionality
|
||||||
//
|
//
|
||||||
// MD_b32 MD_IMPL_FileIterIncrement(MD_FileIter*, MD_String8, MD_FileInfo*) - optional
|
// MD_b32 MD_IMPL_FileIterIncrement(MD_FileIter*, MD_String8, MD_FileInfo*) - optional
|
||||||
// void* MD_IMPL_Alloc(void*,MD_u64) - required
|
// void* MD_IMPL_Alloc(MD_u64) - required
|
||||||
// void* MD_IMPL_GetCtx(void) - optional
|
|
||||||
//
|
//
|
||||||
// TODO(allen): Commentary about this system somewhere easy to discover when
|
// TODO(allen): Commentary about this system somewhere easy to discover when
|
||||||
// you go digging.
|
// you go digging.
|
||||||
@@ -380,17 +379,6 @@ struct MD_CodeLoc
|
|||||||
int column;
|
int column;
|
||||||
};
|
};
|
||||||
|
|
||||||
//~ Message Levels
|
|
||||||
|
|
||||||
typedef enum MD_MessageKind
|
|
||||||
{
|
|
||||||
MD_MessageKind_None,
|
|
||||||
MD_MessageKind_Warning,
|
|
||||||
MD_MessageKind_Error,
|
|
||||||
MD_MessageKind_CatastrophicError,
|
|
||||||
}
|
|
||||||
MD_MessageKind;
|
|
||||||
|
|
||||||
//~ String-To-Ptr and Ptr-To-Ptr tables
|
//~ String-To-Ptr and Ptr-To-Ptr tables
|
||||||
|
|
||||||
typedef enum MD_MapCollisionRule
|
typedef enum MD_MapCollisionRule
|
||||||
@@ -486,6 +474,15 @@ enum{
|
|||||||
|
|
||||||
//~ Parsing State
|
//~ Parsing State
|
||||||
|
|
||||||
|
typedef enum MD_MessageKind
|
||||||
|
{
|
||||||
|
MD_MessageKind_None,
|
||||||
|
MD_MessageKind_Warning,
|
||||||
|
MD_MessageKind_Error,
|
||||||
|
MD_MessageKind_CatastrophicError,
|
||||||
|
}
|
||||||
|
MD_MessageKind;
|
||||||
|
|
||||||
typedef struct MD_Error MD_Error;
|
typedef struct MD_Error MD_Error;
|
||||||
struct MD_Error
|
struct MD_Error
|
||||||
{
|
{
|
||||||
|
|||||||
+22
-33
@@ -55,29 +55,18 @@ _MD_WriteStringToBuffer(MD_String8 string, MD_u64 max, void *dest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL void *
|
MD_PRIVATE_FUNCTION_IMPL void *
|
||||||
_MD_AllocZero(void *ctx, MD_u64 size)
|
_MD_AllocZero(MD_u64 size)
|
||||||
{
|
{
|
||||||
#if !defined(MD_IMPL_Alloc)
|
#if !defined(MD_IMPL_Alloc)
|
||||||
# error Missing implementation detail MD_IMPL_Alloc
|
# error Missing implementation detail MD_IMPL_Alloc
|
||||||
#else
|
#else
|
||||||
void *result = MD_IMPL_Alloc(ctx, size);
|
void *result = MD_IMPL_Alloc(size);
|
||||||
_MD_MemoryZero(result, size);
|
_MD_MemoryZero(result, size);
|
||||||
return(result);
|
return(result);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _MD_PushArray(ctx, type, count) (type *)_MD_AllocZero((ctx), sizeof(type)*(count))
|
#define _MD_PushArray(type, count) (type *)_MD_AllocZero(sizeof(type)*(count))
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL void*
|
|
||||||
_MD_GetCtx(void)
|
|
||||||
{
|
|
||||||
#if !defined(MD_IMPL_GetCtx)
|
|
||||||
return(0);
|
|
||||||
#else
|
|
||||||
return(MD_IMPL_GetCtx());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_b32
|
MD_FUNCTION_IMPL MD_b32
|
||||||
MD_CharIsAlpha(MD_u8 c)
|
MD_CharIsAlpha(MD_u8 c)
|
||||||
@@ -317,7 +306,7 @@ MD_PushStringCopy(MD_String8 string)
|
|||||||
{
|
{
|
||||||
MD_String8 res;
|
MD_String8 res;
|
||||||
res.size = string.size;
|
res.size = string.size;
|
||||||
res.str = _MD_PushArray(_MD_GetCtx(), MD_u8, string.size+1);
|
res.str = _MD_PushArray(MD_u8, string.size+1);
|
||||||
_MD_MemoryCopy(res.str, string.str, string.size);
|
_MD_MemoryCopy(res.str, string.str, string.size);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -329,7 +318,7 @@ MD_PushStringFV(char *fmt, va_list args)
|
|||||||
va_list args2;
|
va_list args2;
|
||||||
va_copy(args2, args);
|
va_copy(args2, args);
|
||||||
MD_u64 needed_bytes = vsnprintf(0, 0, fmt, args)+1;
|
MD_u64 needed_bytes = vsnprintf(0, 0, fmt, args)+1;
|
||||||
result.str = _MD_PushArray(_MD_GetCtx(), MD_u8, needed_bytes);
|
result.str = _MD_PushArray(MD_u8, needed_bytes);
|
||||||
result.size = needed_bytes-1;
|
result.size = needed_bytes-1;
|
||||||
vsnprintf((char*)result.str, needed_bytes, fmt, args2);
|
vsnprintf((char*)result.str, needed_bytes, fmt, args2);
|
||||||
return result;
|
return result;
|
||||||
@@ -352,7 +341,7 @@ MD_PushStringToList(MD_String8List *list, MD_String8 string)
|
|||||||
list->node_count += 1;
|
list->node_count += 1;
|
||||||
list->total_size += string.size;
|
list->total_size += string.size;
|
||||||
|
|
||||||
MD_String8Node *node = _MD_PushArray(_MD_GetCtx(), MD_String8Node, 1);
|
MD_String8Node *node = _MD_PushArray(MD_String8Node, 1);
|
||||||
node->next = 0;
|
node->next = 0;
|
||||||
node->string = string;
|
node->string = string;
|
||||||
if(list->last == 0)
|
if(list->last == 0)
|
||||||
@@ -438,7 +427,7 @@ MD_JoinStringList(MD_String8List list)
|
|||||||
{
|
{
|
||||||
MD_String8 string = MD_ZERO_STRUCT;
|
MD_String8 string = MD_ZERO_STRUCT;
|
||||||
string.size = list.total_size;
|
string.size = list.total_size;
|
||||||
string.str = _MD_PushArray(_MD_GetCtx(), MD_u8, string.size);
|
string.str = _MD_PushArray(MD_u8, string.size);
|
||||||
MD_u64 write_pos = 0;
|
MD_u64 write_pos = 0;
|
||||||
for(MD_String8Node *node = list.first; node; node = node->next)
|
for(MD_String8Node *node = list.first; node; node = node->next)
|
||||||
{
|
{
|
||||||
@@ -457,7 +446,7 @@ MD_JoinStringListWithSeparator(MD_String8List list, MD_String8 separator)
|
|||||||
}
|
}
|
||||||
MD_String8 string = MD_ZERO_STRUCT;
|
MD_String8 string = MD_ZERO_STRUCT;
|
||||||
string.size = list.total_size + (list.node_count - 1)*separator.size;
|
string.size = list.total_size + (list.node_count - 1)*separator.size;
|
||||||
string.str = _MD_PushArray(_MD_GetCtx(), MD_u8, string.size);
|
string.str = _MD_PushArray(MD_u8, string.size);
|
||||||
MD_u64 write_pos = 0;
|
MD_u64 write_pos = 0;
|
||||||
for(MD_String8Node *node = list.first; node; node = node->next)
|
for(MD_String8Node *node = list.first; node; node = node->next)
|
||||||
{
|
{
|
||||||
@@ -596,7 +585,7 @@ MD_StyledStringFromString(MD_String8 string, MD_WordStyle word_style, MD_String8
|
|||||||
{
|
{
|
||||||
result.size += separator.size*(words.node_count-1);
|
result.size += separator.size*(words.node_count-1);
|
||||||
}
|
}
|
||||||
result.str = _MD_PushArray(_MD_GetCtx(), MD_u8, result.size);
|
result.str = _MD_PushArray(MD_u8, result.size);
|
||||||
|
|
||||||
{
|
{
|
||||||
MD_u64 write_pos = 0;
|
MD_u64 write_pos = 0;
|
||||||
@@ -877,7 +866,7 @@ MD_FUNCTION MD_String8
|
|||||||
MD_S8FromS16(MD_String16 in)
|
MD_S8FromS16(MD_String16 in)
|
||||||
{
|
{
|
||||||
MD_u64 cap = in.size*3;
|
MD_u64 cap = in.size*3;
|
||||||
MD_u8 *str = _MD_PushArray(_MD_GetCtx(), MD_u8, cap + 1);
|
MD_u8 *str = _MD_PushArray(MD_u8, cap + 1);
|
||||||
MD_u16 *ptr = in.str;
|
MD_u16 *ptr = in.str;
|
||||||
MD_u16 *opl = ptr + in.size;
|
MD_u16 *opl = ptr + in.size;
|
||||||
MD_u64 size = 0;
|
MD_u64 size = 0;
|
||||||
@@ -896,7 +885,7 @@ MD_FUNCTION MD_String16
|
|||||||
MD_S16FromS8(MD_String8 in)
|
MD_S16FromS8(MD_String8 in)
|
||||||
{
|
{
|
||||||
MD_u64 cap = in.size*2;
|
MD_u64 cap = in.size*2;
|
||||||
MD_u16 *str = _MD_PushArray(_MD_GetCtx(), MD_u16, (cap + 1));
|
MD_u16 *str = _MD_PushArray(MD_u16, (cap + 1));
|
||||||
MD_u8 *ptr = in.str;
|
MD_u8 *ptr = in.str;
|
||||||
MD_u8 *opl = ptr + in.size;
|
MD_u8 *opl = ptr + in.size;
|
||||||
MD_u64 size = 0;
|
MD_u64 size = 0;
|
||||||
@@ -916,7 +905,7 @@ MD_FUNCTION MD_String8
|
|||||||
MD_S8FromS32(MD_String32 in)
|
MD_S8FromS32(MD_String32 in)
|
||||||
{
|
{
|
||||||
MD_u64 cap = in.size*4;
|
MD_u64 cap = in.size*4;
|
||||||
MD_u8 *str = _MD_PushArray(_MD_GetCtx(), MD_u8, cap + 1);
|
MD_u8 *str = _MD_PushArray(MD_u8, cap + 1);
|
||||||
MD_u32 *ptr = in.str;
|
MD_u32 *ptr = in.str;
|
||||||
MD_u32 *opl = ptr + in.size;
|
MD_u32 *opl = ptr + in.size;
|
||||||
MD_u64 size = 0;
|
MD_u64 size = 0;
|
||||||
@@ -933,7 +922,7 @@ MD_FUNCTION MD_String32
|
|||||||
MD_S32FromS8(MD_String8 in)
|
MD_S32FromS8(MD_String8 in)
|
||||||
{
|
{
|
||||||
MD_u64 cap = in.size;
|
MD_u64 cap = in.size;
|
||||||
MD_u32 *str = _MD_PushArray(_MD_GetCtx(), MD_u32, (cap + 1));
|
MD_u32 *str = _MD_PushArray(MD_u32, (cap + 1));
|
||||||
MD_u8 *ptr = in.str;
|
MD_u8 *ptr = in.str;
|
||||||
MD_u8 *opl = ptr + in.size;
|
MD_u8 *opl = ptr + in.size;
|
||||||
MD_u64 size = 0;
|
MD_u64 size = 0;
|
||||||
@@ -958,7 +947,7 @@ _MD_Map_Initialize(MD_Map *map)
|
|||||||
if(map->table_size == 0)
|
if(map->table_size == 0)
|
||||||
{
|
{
|
||||||
map->table_size = 4096;
|
map->table_size = 4096;
|
||||||
map->table = _MD_PushArray(_MD_GetCtx(), MD_MapSlot *, map->table_size);
|
map->table = _MD_PushArray(MD_MapSlot *, map->table_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1004,7 +993,7 @@ MD_StringMap_Insert(MD_Map *map, MD_MapCollisionRule collision_rule, MD_String8
|
|||||||
|
|
||||||
if(slot == 0 || (slot != 0 && collision_rule == MD_MapCollisionRule_Chain))
|
if(slot == 0 || (slot != 0 && collision_rule == MD_MapCollisionRule_Chain))
|
||||||
{
|
{
|
||||||
slot = _MD_PushArray(_MD_GetCtx(), MD_MapSlot, 1);
|
slot = _MD_PushArray(MD_MapSlot, 1);
|
||||||
if(slot)
|
if(slot)
|
||||||
{
|
{
|
||||||
slot->next = 0;
|
slot->next = 0;
|
||||||
@@ -1030,7 +1019,7 @@ MD_StringMap_Insert(MD_Map *map, MD_MapCollisionRule collision_rule, MD_String8
|
|||||||
{
|
{
|
||||||
slot->value = value;
|
slot->value = value;
|
||||||
slot->hash = hash;
|
slot->hash = hash;
|
||||||
MD_String8 *string_copy = _MD_PushArray(_MD_GetCtx(), MD_String8, 1);
|
MD_String8 *string_copy = _MD_PushArray(MD_String8, 1);
|
||||||
*string_copy = MD_PushStringCopy(string);
|
*string_copy = MD_PushStringCopy(string);
|
||||||
slot->key = string_copy;
|
slot->key = string_copy;
|
||||||
}
|
}
|
||||||
@@ -1094,7 +1083,7 @@ MD_PtrMap_Insert(MD_Map *map, MD_MapCollisionRule collision_rule, void *key, voi
|
|||||||
|
|
||||||
if(slot == 0 || (slot != 0 && collision_rule == MD_MapCollisionRule_Chain))
|
if(slot == 0 || (slot != 0 && collision_rule == MD_MapCollisionRule_Chain))
|
||||||
{
|
{
|
||||||
slot = _MD_PushArray(_MD_GetCtx(), MD_MapSlot, 1);
|
slot = _MD_PushArray(MD_MapSlot, 1);
|
||||||
if(slot)
|
if(slot)
|
||||||
{
|
{
|
||||||
slot->next = 0;
|
slot->next = 0;
|
||||||
@@ -1543,7 +1532,7 @@ _MD_Error(MD_ParseCtx *ctx, MD_Node *node, MD_MessageKind kind, char *fmt, ...)
|
|||||||
// NOTE(mal): Ignore errors after first catastrophic error
|
// NOTE(mal): Ignore errors after first catastrophic error
|
||||||
if(ctx->error_level < MD_MessageKind_CatastrophicError || !prev_error || prev_error->next)
|
if(ctx->error_level < MD_MessageKind_CatastrophicError || !prev_error || prev_error->next)
|
||||||
{
|
{
|
||||||
MD_Error *error = _MD_PushArray(_MD_GetCtx(), MD_Error, 1);
|
MD_Error *error = _MD_PushArray(MD_Error, 1);
|
||||||
error->node = node;
|
error->node = node;
|
||||||
error->kind = kind;
|
error->kind = kind;
|
||||||
va_list args;
|
va_list args;
|
||||||
@@ -1580,7 +1569,7 @@ MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
|||||||
_MD_MakeNode(MD_NodeKind kind, MD_String8 string, MD_String8 whole_string, MD_String8 filename,
|
_MD_MakeNode(MD_NodeKind kind, MD_String8 string, MD_String8 whole_string, MD_String8 filename,
|
||||||
MD_u8 *file_contents, MD_u8 *at)
|
MD_u8 *file_contents, MD_u8 *at)
|
||||||
{
|
{
|
||||||
MD_Node *node = _MD_PushArray(_MD_GetCtx(), MD_Node, 1);
|
MD_Node *node = _MD_PushArray(MD_Node, 1);
|
||||||
if(node)
|
if(node)
|
||||||
{
|
{
|
||||||
node->kind = kind;
|
node->kind = kind;
|
||||||
@@ -2649,7 +2638,7 @@ MD_ExprPrecFromExprKind(MD_ExprKind kind)
|
|||||||
MD_FUNCTION_IMPL MD_Expr *
|
MD_FUNCTION_IMPL MD_Expr *
|
||||||
MD_MakeExpr(MD_Node *node, MD_ExprKind kind, MD_Expr *left, MD_Expr *right)
|
MD_MakeExpr(MD_Node *node, MD_ExprKind kind, MD_Expr *left, MD_Expr *right)
|
||||||
{
|
{
|
||||||
MD_Expr *expr = _MD_PushArray(_MD_GetCtx(), MD_Expr, 1);
|
MD_Expr *expr = _MD_PushArray(MD_Expr, 1);
|
||||||
if(expr)
|
if(expr)
|
||||||
{
|
{
|
||||||
if(left == 0) left = MD_NilExpr();
|
if(left == 0) left = MD_NilExpr();
|
||||||
@@ -3220,7 +3209,7 @@ MD_FUNCTION_IMPL MD_CommandLine
|
|||||||
MD_CommandLine_Start(int argument_count, char **arguments)
|
MD_CommandLine_Start(int argument_count, char **arguments)
|
||||||
{
|
{
|
||||||
MD_CommandLine cmdln = MD_ZERO_STRUCT;
|
MD_CommandLine cmdln = MD_ZERO_STRUCT;
|
||||||
cmdln.arguments = _MD_PushArray(_MD_GetCtx(), MD_String8, argument_count-1);
|
cmdln.arguments = _MD_PushArray(MD_String8, argument_count-1);
|
||||||
for(int i = 1; i < argument_count; i += 1)
|
for(int i = 1; i < argument_count; i += 1)
|
||||||
{
|
{
|
||||||
cmdln.arguments[i-1] = MD_PushStringF("%s", arguments[i]);
|
cmdln.arguments[i-1] = MD_PushStringF("%s", arguments[i]);
|
||||||
@@ -3354,7 +3343,7 @@ MD_LoadEntireFile(MD_String8 filename)
|
|||||||
fseek(file, 0, SEEK_END);
|
fseek(file, 0, SEEK_END);
|
||||||
MD_u64 file_size = ftell(file);
|
MD_u64 file_size = ftell(file);
|
||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
file_contents.str = _MD_PushArray(_MD_GetCtx(), MD_u8, file_size+1);
|
file_contents.str = _MD_PushArray(MD_u8, file_size+1);
|
||||||
if(file_contents.str)
|
if(file_contents.str)
|
||||||
{
|
{
|
||||||
file_contents.size = file_size;
|
file_contents.size = file_size;
|
||||||
|
|||||||
+2
-11
@@ -3,23 +3,14 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
// TODO(allen): Write commentary for all of this.
|
// TODO(allen): Write commentary for all of this.
|
||||||
|
|
||||||
#define MD_IMPL_Alloc(ctx,size) MD_MALLOC_Alloc(ctx,size)
|
#define MD_IMPL_Alloc(size) MD_MALLOC_Alloc(size)
|
||||||
|
|
||||||
static void*
|
static void*
|
||||||
MD_MALLOC_Alloc(void *ctx, MD_u64 size)
|
MD_MALLOC_Alloc(MD_u64 size)
|
||||||
{
|
{
|
||||||
MD_Assert(ctx == MD_MALLOC_Alloc);
|
|
||||||
return(malloc(size));
|
return(malloc(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MD_IMPL_GetCtx() MD_MALLOC_GetCtx()
|
|
||||||
|
|
||||||
static void*
|
|
||||||
MD_MALLOC_GetCtx(void)
|
|
||||||
{
|
|
||||||
return((void *)MD_MALLOC_Alloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2021 Dion Systems LLC
|
Copyright 2021 Dion Systems LLC
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user