mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
metagen: simplify & unify error gathering & printing path
This commit is contained in:
@@ -112,6 +112,18 @@ mg_txt_pt_from_string_off(String8 string, U64 off)
|
||||
return pt;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Message Lists
|
||||
|
||||
internal void
|
||||
mg_msg_list_push(Arena *arena, MG_MsgList *msgs, MG_Msg *msg)
|
||||
{
|
||||
MG_MsgNode *n = push_array(arena, MG_MsgNode, 1);
|
||||
MemoryCopyStruct(&n->v, msg);
|
||||
SLLQueuePush(msgs->first, msgs->last, n);
|
||||
msgs->count += 1;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Escaping
|
||||
|
||||
|
||||
@@ -4,6 +4,32 @@
|
||||
#ifndef METAGEN_H
|
||||
#define METAGEN_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Message Type
|
||||
|
||||
typedef struct MG_Msg MG_Msg;
|
||||
struct MG_Msg
|
||||
{
|
||||
String8 location;
|
||||
String8 kind;
|
||||
String8 msg;
|
||||
};
|
||||
|
||||
typedef struct MG_MsgNode MG_MsgNode;
|
||||
struct MG_MsgNode
|
||||
{
|
||||
MG_MsgNode *next;
|
||||
MG_Msg v;
|
||||
};
|
||||
|
||||
typedef struct MG_MsgList MG_MsgList;
|
||||
struct MG_MsgList
|
||||
{
|
||||
MG_MsgNode *first;
|
||||
MG_MsgNode *last;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Parse Artifact Types
|
||||
|
||||
@@ -230,6 +256,11 @@ read_only global MG_StrExpr mg_str_expr_nil = {&mg_str_expr_nil, &mg_str_expr_ni
|
||||
internal U64 mg_hash_from_string(String8 string);
|
||||
internal TxtPt mg_txt_pt_from_string_off(String8 string, U64 off);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Message Lists
|
||||
|
||||
internal void mg_msg_list_push(Arena *arena, MG_MsgList *msgs, MG_Msg *msg);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Escaping
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ int main(int argument_count, char **arguments)
|
||||
//////////////////////////////
|
||||
//- rjf: set up state
|
||||
//
|
||||
MG_MsgList msgs = {0};
|
||||
mg_arena = arena_alloc__sized(GB(64), MB(64));
|
||||
mg_state = push_array(mg_arena, MG_State, 1);
|
||||
mg_state->slots_count = 256;
|
||||
@@ -91,15 +92,11 @@ int main(int argument_count, char **arguments)
|
||||
String8 data = os_data_from_file_path(mg_arena, file_path);
|
||||
MD_TokenizeResult tokenize = md_tokenize_from_text(mg_arena, data);
|
||||
MD_ParseResult parse = md_parse_from_text_tokens(mg_arena, file_path, data, tokenize.tokens);
|
||||
MG_FileParseNode *parse_n = push_array(mg_arena, MG_FileParseNode, 1);
|
||||
SLLQueuePush(parses.first, parses.last, parse_n);
|
||||
parse_n->v.root = parse.root;
|
||||
parses.count += 1;
|
||||
for(MD_Msg *msg = parse.msgs.first; msg != 0; msg = msg->next)
|
||||
for(MD_Msg *m = parse.msgs.first; m != 0; m = m->next)
|
||||
{
|
||||
TxtPt pt = mg_txt_pt_from_string_off(data, msg->node->src_offset);
|
||||
TxtPt pt = mg_txt_pt_from_string_off(data, m->node->src_offset);
|
||||
String8 msg_kind_string = {0};
|
||||
switch(msg->kind)
|
||||
switch(m->kind)
|
||||
{
|
||||
default:{}break;
|
||||
case MD_MsgKind_Note: {msg_kind_string = str8_lit("note");}break;
|
||||
@@ -107,8 +104,14 @@ int main(int argument_count, char **arguments)
|
||||
case MD_MsgKind_Error: {msg_kind_string = str8_lit("error");}break;
|
||||
case MD_MsgKind_FatalError: {msg_kind_string = str8_lit("fatal error");}break;
|
||||
}
|
||||
fprintf(stderr, "%.*s:%i:%i: %.*s: %.*s\n", str8_varg(file_path), (int)pt.line, (int)pt.column, str8_varg(msg_kind_string), str8_varg(msg->string));
|
||||
String8 location = push_str8f(mg_arena, "%S:%I64d:%I64d", file_path, pt.line, pt.column);
|
||||
MG_Msg dst_m = {location, msg_kind_string, m->string};
|
||||
mg_msg_list_push(mg_arena, &msgs, &dst_m);
|
||||
}
|
||||
MG_FileParseNode *parse_n = push_array(mg_arena, MG_FileParseNode, 1);
|
||||
SLLQueuePush(parses.first, parses.last, parse_n);
|
||||
parse_n->v.root = parse.root;
|
||||
parses.count += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -429,5 +432,14 @@ int main(int argument_count, char **arguments)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: write out all messages to stderr
|
||||
//
|
||||
for(MG_MsgNode *n = msgs.first; n != 0; n = n->next)
|
||||
{
|
||||
MG_Msg *msg = &n->v;
|
||||
fprintf(stderr, "%.*s: %.*s: %.*s\n", str8_varg(msg->location), str8_varg(msg->kind), str8_varg(msg->msg));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user