mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-05 07:08:45 +00:00
starting to review mdesk.h/c
This commit is contained in:
+215
-215
File diff suppressed because it is too large
Load Diff
+114
-114
@@ -548,88 +548,88 @@ MD_IdentifierStyle;
|
||||
|
||||
//~ Node types that are used to build all ASTs.
|
||||
|
||||
typedef enum MD_NodeKind
|
||||
typedef enum NodeKind
|
||||
{
|
||||
// NOTE(rjf): @maintenance Must be kept in sync with MD_StringFromNodeKind.
|
||||
|
||||
MD_NodeKind_Nil,
|
||||
NodeKind_Nil,
|
||||
|
||||
// NOTE(rjf): Generated by parser
|
||||
MD_NodeKind_File,
|
||||
MD_NodeKind_ErrorMarker,
|
||||
NodeKind_File,
|
||||
NodeKind_ErrorMarker,
|
||||
|
||||
// NOTE(rjf): Parsed from user Metadesk code
|
||||
MD_NodeKind_Main,
|
||||
MD_NodeKind_Tag,
|
||||
NodeKind_Main,
|
||||
NodeKind_Tag,
|
||||
|
||||
// NOTE(rjf): User-created data structures
|
||||
MD_NodeKind_List,
|
||||
MD_NodeKind_Reference,
|
||||
NodeKind_List,
|
||||
NodeKind_Reference,
|
||||
|
||||
MD_NodeKind_COUNT,
|
||||
NodeKind_COUNT,
|
||||
}
|
||||
MD_NodeKind;
|
||||
NodeKind;
|
||||
|
||||
typedef MD_u64 MD_NodeFlags;
|
||||
#define MD_NodeFlag_AfterFromBefore(f) ((f) << 1)
|
||||
typedef MD_u64 NodeFlags;
|
||||
#define NodeFlag_AfterFromBefore(f) ((f) << 1)
|
||||
enum
|
||||
{
|
||||
// NOTE(rjf): @maintenance Must be kept in sync with MD_StringListFromNodeFlags.
|
||||
|
||||
// NOTE(rjf): @maintenance Because of MD_NodeFlag_AfterFromBefore, it is
|
||||
// NOTE(rjf): @maintenance Because of NodeFlag_AfterFromBefore, it is
|
||||
// *required* that every single pair of "Before*" or "After*" flags be in
|
||||
// the correct order which is that the Before* flag comes first, and the
|
||||
// After* flag comes immediately after (After* being the more significant
|
||||
// bit).
|
||||
|
||||
MD_NodeFlag_HasParenLeft = (1<<0),
|
||||
MD_NodeFlag_HasParenRight = (1<<1),
|
||||
MD_NodeFlag_HasBracketLeft = (1<<2),
|
||||
MD_NodeFlag_HasBracketRight = (1<<3),
|
||||
MD_NodeFlag_HasBraceLeft = (1<<4),
|
||||
MD_NodeFlag_HasBraceRight = (1<<5),
|
||||
NodeFlag_HasParenLeft = (1<<0),
|
||||
NodeFlag_HasParenRight = (1<<1),
|
||||
NodeFlag_HasBracketLeft = (1<<2),
|
||||
NodeFlag_HasBracketRight = (1<<3),
|
||||
NodeFlag_HasBraceLeft = (1<<4),
|
||||
NodeFlag_HasBraceRight = (1<<5),
|
||||
|
||||
MD_NodeFlag_MaskSetDelimiters = (0x3F<<0),
|
||||
NodeFlag_MaskSetDelimiters = (0x3F<<0),
|
||||
|
||||
MD_NodeFlag_IsBeforeSemicolon = (1<<6),
|
||||
MD_NodeFlag_IsAfterSemicolon = (1<<7),
|
||||
MD_NodeFlag_IsBeforeComma = (1<<8),
|
||||
MD_NodeFlag_IsAfterComma = (1<<9),
|
||||
NodeFlag_IsBeforeSemicolon = (1<<6),
|
||||
NodeFlag_IsAfterSemicolon = (1<<7),
|
||||
NodeFlag_IsBeforeComma = (1<<8),
|
||||
NodeFlag_IsAfterComma = (1<<9),
|
||||
|
||||
MD_NodeFlag_MaskSeperators = (0xF<<6),
|
||||
NodeFlag_MaskSeperators = (0xF<<6),
|
||||
|
||||
MD_NodeFlag_StringSingleQuote = (1<<10),
|
||||
MD_NodeFlag_StringDoubleQuote = (1<<11),
|
||||
MD_NodeFlag_StringTick = (1<<12),
|
||||
MD_NodeFlag_StringTriplet = (1<<13),
|
||||
NodeFlag_StringSingleQuote = (1<<10),
|
||||
NodeFlag_StringDoubleQuote = (1<<11),
|
||||
NodeFlag_StringTick = (1<<12),
|
||||
NodeFlag_StringTriplet = (1<<13),
|
||||
|
||||
MD_NodeFlag_MaskStringDelimiters = (0xF<<10),
|
||||
NodeFlag_MaskStringDelimiters = (0xF<<10),
|
||||
|
||||
MD_NodeFlag_Numeric = (1<<14),
|
||||
MD_NodeFlag_Identifier = (1<<15),
|
||||
MD_NodeFlag_StringLiteral = (1<<16),
|
||||
MD_NodeFlag_Symbol = (1<<17),
|
||||
NodeFlag_Numeric = (1<<14),
|
||||
NodeFlag_Identifier = (1<<15),
|
||||
NodeFlag_StringLiteral = (1<<16),
|
||||
NodeFlag_Symbol = (1<<17),
|
||||
|
||||
MD_NodeFlag_MaskLabelKind = (0xF<<14),
|
||||
NodeFlag_MaskLabelKind = (0xF<<14),
|
||||
};
|
||||
|
||||
typedef struct MD_Node MD_Node;
|
||||
struct MD_Node
|
||||
typedef struct Node Node;
|
||||
struct Node
|
||||
{
|
||||
// Tree relationship data.
|
||||
MD_Node *next;
|
||||
MD_Node *prev;
|
||||
MD_Node *parent;
|
||||
MD_Node *first_child;
|
||||
MD_Node *last_child;
|
||||
Node *next;
|
||||
Node *prev;
|
||||
Node *parent;
|
||||
Node *first_child;
|
||||
Node *last_child;
|
||||
|
||||
// Tag list.
|
||||
MD_Node *first_tag;
|
||||
MD_Node *last_tag;
|
||||
Node *first_tag;
|
||||
Node *last_tag;
|
||||
|
||||
// Node info.
|
||||
MD_NodeKind kind;
|
||||
MD_NodeFlags flags;
|
||||
NodeKind kind;
|
||||
NodeFlags flags;
|
||||
MD_String8 string;
|
||||
MD_String8 raw_string;
|
||||
|
||||
@@ -637,7 +637,7 @@ struct MD_Node
|
||||
MD_u64 offset;
|
||||
|
||||
// Reference.
|
||||
MD_Node *ref_target;
|
||||
Node *ref_target;
|
||||
|
||||
// Comments.
|
||||
// @usage prev_comment/next_comment should be considered "hidden". Rely on
|
||||
@@ -710,26 +710,26 @@ enum
|
||||
typedef MD_u32 MD_TokenGroups;
|
||||
enum
|
||||
{
|
||||
MD_TokenGroup_Comment = MD_TokenKind_Comment,
|
||||
MD_TokenGroup_Whitespace = (MD_TokenKind_Whitespace|
|
||||
TokenGroup_Comment = MD_TokenKind_Comment,
|
||||
TokenGroup_Whitespace = (MD_TokenKind_Whitespace|
|
||||
MD_TokenKind_Newline),
|
||||
MD_TokenGroup_Irregular = (MD_TokenGroup_Comment|
|
||||
MD_TokenGroup_Whitespace),
|
||||
MD_TokenGroup_Regular = ~MD_TokenGroup_Irregular,
|
||||
MD_TokenGroup_Label = (MD_TokenKind_Identifier|
|
||||
TokenGroup_Irregular = (TokenGroup_Comment|
|
||||
TokenGroup_Whitespace),
|
||||
TokenGroup_Regular = ~TokenGroup_Irregular,
|
||||
TokenGroup_Label = (MD_TokenKind_Identifier|
|
||||
MD_TokenKind_Numeric|
|
||||
MD_TokenKind_StringLiteral|
|
||||
MD_TokenKind_Symbol),
|
||||
MD_TokenGroup_Error = (MD_TokenKind_BrokenComment|
|
||||
TokenGroup_Error = (MD_TokenKind_BrokenComment|
|
||||
MD_TokenKind_BrokenStringLiteral|
|
||||
MD_TokenKind_BadCharacter),
|
||||
};
|
||||
|
||||
typedef struct MD_Token MD_Token;
|
||||
struct MD_Token
|
||||
typedef struct Token Token;
|
||||
struct Token
|
||||
{
|
||||
MD_TokenKind kind;
|
||||
MD_NodeFlags node_flags;
|
||||
NodeFlags node_flags;
|
||||
MD_String8 string;
|
||||
MD_String8 raw_string;
|
||||
};
|
||||
@@ -752,7 +752,7 @@ typedef struct MD_Message MD_Message;
|
||||
struct MD_Message
|
||||
{
|
||||
MD_Message *next;
|
||||
MD_Node *node;
|
||||
Node *node;
|
||||
MD_MessageKind kind;
|
||||
MD_String8 string;
|
||||
void *user_ptr;
|
||||
@@ -774,10 +774,10 @@ typedef enum MD_ParseSetRule
|
||||
MD_ParseSetRule_Global,
|
||||
} MD_ParseSetRule;
|
||||
|
||||
typedef struct MD_ParseResult MD_ParseResult;
|
||||
struct MD_ParseResult
|
||||
typedef struct ParseResult ParseResult;
|
||||
struct ParseResult
|
||||
{
|
||||
MD_Node *node;
|
||||
Node *node;
|
||||
MD_u64 string_advance;
|
||||
MD_MessageList errors;
|
||||
};
|
||||
@@ -831,7 +831,7 @@ struct MD_Expr
|
||||
};
|
||||
struct MD_Expr *right;
|
||||
MD_ExprOpr *op;
|
||||
MD_Node *md_node;
|
||||
Node *md_node;
|
||||
};
|
||||
|
||||
typedef struct MD_ExprParseResult MD_ExprParseResult;
|
||||
@@ -852,7 +852,7 @@ struct MD_ExprParseCtx
|
||||
struct
|
||||
{
|
||||
MD_ExprOpr *postfix_set_ops[MD_POSTFIX_SETLIKE_OP_COUNT];
|
||||
MD_NodeFlags postfix_set_flags[MD_POSTFIX_SETLIKE_OP_COUNT];
|
||||
NodeFlags postfix_set_flags[MD_POSTFIX_SETLIKE_OP_COUNT];
|
||||
} accel;
|
||||
#undef MD_POSTFIX_SETLIKE_OP_COUNT
|
||||
|
||||
@@ -1060,8 +1060,8 @@ MD_FUNCTION MD_String8 MD_CStyleHexStringFromU64(MD_Arena *arena, MD_u64 x, MD_b
|
||||
|
||||
//~ Enum/Flag Strings
|
||||
|
||||
MD_FUNCTION MD_String8 MD_StringFromNodeKind(MD_NodeKind kind);
|
||||
MD_FUNCTION MD_String8List MD_StringListFromNodeFlags(MD_Arena *arena, MD_NodeFlags flags);
|
||||
MD_FUNCTION MD_String8 MD_StringFromNodeKind(NodeKind kind);
|
||||
MD_FUNCTION MD_String8List MD_StringListFromNodeFlags(MD_Arena *arena, NodeFlags flags);
|
||||
|
||||
//~ Map Table Data Structure
|
||||
|
||||
@@ -1080,25 +1080,25 @@ MD_FUNCTION MD_MapSlot* MD_MapOverwrite(MD_Arena *arena, MD_Map *map, MD_MapKey
|
||||
|
||||
//~ Parsing
|
||||
|
||||
MD_FUNCTION MD_Token MD_TokenFromString(MD_String8 string);
|
||||
MD_FUNCTION Token MD_TokenFromString(MD_String8 string);
|
||||
MD_FUNCTION MD_u64 MD_LexAdvanceFromSkips(MD_String8 string, MD_TokenKind skip_kinds);
|
||||
MD_FUNCTION MD_ParseResult MD_ParseResultZero(void);
|
||||
MD_FUNCTION MD_ParseResult MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, MD_Node *parent,
|
||||
MD_FUNCTION ParseResult MD_ParseResultZero(void);
|
||||
MD_FUNCTION ParseResult MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, Node *parent,
|
||||
MD_ParseSetRule rule);
|
||||
MD_FUNCTION MD_ParseResult MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset);
|
||||
MD_FUNCTION MD_ParseResult MD_ParseWholeString(MD_Arena *arena, MD_String8 filename, MD_String8 contents);
|
||||
MD_FUNCTION ParseResult MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset);
|
||||
MD_FUNCTION ParseResult MD_ParseWholeString(MD_Arena *arena, MD_String8 filename, MD_String8 contents);
|
||||
|
||||
MD_FUNCTION MD_ParseResult MD_ParseWholeFile(MD_Arena *arena, MD_String8 filename);
|
||||
MD_FUNCTION ParseResult MD_ParseWholeFile(MD_Arena *arena, MD_String8 filename);
|
||||
|
||||
//~ Messages (Errors/Warnings)
|
||||
|
||||
MD_FUNCTION MD_Node* MD_MakeErrorMarkerNode(MD_Arena *arena, MD_String8 parse_contents,
|
||||
MD_FUNCTION Node* MD_MakeErrorMarkerNode(MD_Arena *arena, MD_String8 parse_contents,
|
||||
MD_u64 offset);
|
||||
|
||||
MD_FUNCTION MD_Message*MD_MakeNodeError(MD_Arena *arena, MD_Node *node,
|
||||
MD_FUNCTION MD_Message*MD_MakeNodeError(MD_Arena *arena, Node *node,
|
||||
MD_MessageKind kind, MD_String8 str);
|
||||
MD_FUNCTION MD_Message*MD_MakeTokenError(MD_Arena *arena, MD_String8 parse_contents,
|
||||
MD_Token token, MD_MessageKind kind,
|
||||
Token token, MD_MessageKind kind,
|
||||
MD_String8 str);
|
||||
|
||||
MD_FUNCTION void MD_MessageListPush(MD_MessageList *list, MD_Message *message);
|
||||
@@ -1107,49 +1107,49 @@ MD_FUNCTION void MD_MessageListConcat(MD_MessageList *list, MD_MessageList
|
||||
//~ Location Conversion
|
||||
|
||||
MD_FUNCTION MD_CodeLoc MD_CodeLocFromFileOffset(MD_String8 filename, MD_u8 *base, MD_u64 offset);
|
||||
MD_FUNCTION MD_CodeLoc MD_CodeLocFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_CodeLoc MD_CodeLocFromNode(Node *node);
|
||||
|
||||
//~ Tree/List Building
|
||||
|
||||
MD_FUNCTION MD_b32 MD_NodeIsNil(MD_Node *node);
|
||||
MD_FUNCTION MD_Node *MD_NilNode(void);
|
||||
MD_FUNCTION MD_Node *MD_MakeNode(MD_Arena *arena, MD_NodeKind kind, MD_String8 string,
|
||||
MD_FUNCTION MD_b32 MD_NodeIsNil(Node *node);
|
||||
MD_FUNCTION Node *MD_NilNode(void);
|
||||
MD_FUNCTION Node *MD_MakeNode(MD_Arena *arena, NodeKind kind, MD_String8 string,
|
||||
MD_String8 raw_string, MD_u64 offset);
|
||||
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
||||
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
||||
MD_FUNCTION void MD_PushChild(Node *parent, Node *new_child);
|
||||
MD_FUNCTION void MD_PushTag(Node *node, Node *tag);
|
||||
|
||||
MD_FUNCTION MD_Node *MD_MakeList(MD_Arena *arena);
|
||||
MD_FUNCTION void MD_ListConcatInPlace(MD_Node *list, MD_Node *to_push);
|
||||
MD_FUNCTION MD_Node *MD_PushNewReference(MD_Arena *arena, MD_Node *list, MD_Node *target);
|
||||
MD_FUNCTION Node *MD_MakeList(MD_Arena *arena);
|
||||
MD_FUNCTION void MD_ListConcatInPlace(Node *list, Node *to_push);
|
||||
MD_FUNCTION Node *MD_PushNewReference(MD_Arena *arena, Node *list, Node *target);
|
||||
|
||||
//~ Introspection Helpers
|
||||
|
||||
// These calls are for getting info from nodes, and introspecting
|
||||
// on trees that are returned to you by the parser.
|
||||
|
||||
MD_FUNCTION MD_Node * MD_FirstNodeWithString(MD_Node *first, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_Node * MD_NodeAtIndex(MD_Node *first, int n);
|
||||
MD_FUNCTION MD_Node * MD_FirstNodeWithFlags(MD_Node *first, MD_NodeFlags flags);
|
||||
MD_FUNCTION int MD_IndexFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_Node * MD_RootFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_Node * MD_ChildFromString(MD_Node *node, MD_String8 child_string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_Node * MD_TagFromString(MD_Node *node, MD_String8 tag_string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_Node * MD_ChildFromIndex(MD_Node *node, int n);
|
||||
MD_FUNCTION MD_Node * MD_TagFromIndex(MD_Node *node, int n);
|
||||
MD_FUNCTION MD_Node * MD_TagArgFromIndex(MD_Node *node, MD_String8 tag_string, MD_MatchFlags flags, int n);
|
||||
MD_FUNCTION MD_Node * MD_TagArgFromString(MD_Node *node, MD_String8 tag_string, MD_MatchFlags tag_str_flags, MD_String8 arg_string, MD_MatchFlags arg_str_flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeHasChild(MD_Node *node, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeHasTag(MD_Node *node, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_i64 MD_ChildCountFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_i64 MD_TagCountFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_Node * MD_ResolveNodeFromReference(MD_Node *node);
|
||||
MD_FUNCTION MD_Node* MD_NodeNextWithLimit(MD_Node *node, MD_Node *opl);
|
||||
MD_FUNCTION Node * MD_FirstNodeWithString(Node *first, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION Node * MD_NodeAtIndex(Node *first, int n);
|
||||
MD_FUNCTION Node * MD_FirstNodeWithFlags(Node *first, NodeFlags flags);
|
||||
MD_FUNCTION int MD_IndexFromNode(Node *node);
|
||||
MD_FUNCTION Node * MD_RootFromNode(Node *node);
|
||||
MD_FUNCTION Node * MD_ChildFromString(Node *node, MD_String8 child_string, MD_MatchFlags flags);
|
||||
MD_FUNCTION Node * MD_TagFromString(Node *node, MD_String8 tag_string, MD_MatchFlags flags);
|
||||
MD_FUNCTION Node * MD_ChildFromIndex(Node *node, int n);
|
||||
MD_FUNCTION Node * MD_TagFromIndex(Node *node, int n);
|
||||
MD_FUNCTION Node * MD_TagArgFromIndex(Node *node, MD_String8 tag_string, MD_MatchFlags flags, int n);
|
||||
MD_FUNCTION Node * MD_TagArgFromString(Node *node, MD_String8 tag_string, MD_MatchFlags tag_str_flags, MD_String8 arg_string, MD_MatchFlags arg_str_flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeHasChild(Node *node, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeHasTag(Node *node, MD_String8 string, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_i64 MD_ChildCountFromNode(Node *node);
|
||||
MD_FUNCTION MD_i64 MD_TagCountFromNode(Node *node);
|
||||
MD_FUNCTION Node * MD_ResolveNodeFromReference(Node *node);
|
||||
MD_FUNCTION Node* MD_NodeNextWithLimit(Node *node, Node *opl);
|
||||
|
||||
MD_FUNCTION MD_String8 MD_PrevCommentFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_String8 MD_NextCommentFromNode(MD_Node *node);
|
||||
MD_FUNCTION MD_String8 MD_PrevCommentFromNode(Node *node);
|
||||
MD_FUNCTION MD_String8 MD_NextCommentFromNode(Node *node);
|
||||
|
||||
// NOTE(rjf): For-Loop Helpers
|
||||
#define MD_EachNode(it, first) MD_Node *it = (first); !MD_NodeIsNil(it); it = it->next
|
||||
#define MD_EachNode(it, first) Node *it = (first); !MD_NodeIsNil(it); it = it->next
|
||||
|
||||
//~ Error/Warning Helpers
|
||||
|
||||
@@ -1173,8 +1173,8 @@ MD_FUNCTION void MD_PrintMessageFmt(FILE *file, MD_CodeLoc code_loc, MD_MessageK
|
||||
|
||||
//~ Tree Comparison/Verification
|
||||
|
||||
MD_FUNCTION MD_b32 MD_NodeMatch(MD_Node *a, MD_Node *b, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeDeepMatch(MD_Node *a, MD_Node *b, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeMatch(Node *a, Node *b, MD_MatchFlags flags);
|
||||
MD_FUNCTION MD_b32 MD_NodeDeepMatch(Node *a, Node *b, MD_MatchFlags flags);
|
||||
|
||||
//~ Expression Parsing
|
||||
|
||||
@@ -1189,34 +1189,34 @@ MD_FUNCTION MD_ExprOpr* MD_ExprOprFromKindString(MD_ExprOprTable *table,
|
||||
MD_ExprOprKind kind, MD_String8 s);
|
||||
|
||||
MD_FUNCTION MD_ExprParseResult MD_ExprParse(MD_Arena *arena, MD_ExprOprTable *op_table,
|
||||
MD_Node *first, MD_Node *one_past_last);
|
||||
Node *first, Node *one_past_last);
|
||||
|
||||
MD_FUNCTION MD_Expr* MD_Expr_NewLeaf(MD_Arena *arena, MD_Node *node);
|
||||
MD_FUNCTION MD_Expr* MD_Expr_NewOpr(MD_Arena *arena, MD_ExprOpr *op, MD_Node *op_node,
|
||||
MD_FUNCTION MD_Expr* MD_Expr_NewLeaf(MD_Arena *arena, Node *node);
|
||||
MD_FUNCTION MD_Expr* MD_Expr_NewOpr(MD_Arena *arena, MD_ExprOpr *op, Node *op_node,
|
||||
MD_Expr *left, MD_Expr *right);
|
||||
|
||||
MD_FUNCTION MD_ExprParseCtx MD_ExprParse_MakeContext(MD_ExprOprTable *table);
|
||||
|
||||
MD_FUNCTION MD_Expr* MD_ExprParse_TopLevel(MD_Arena *arena, MD_ExprParseCtx *ctx,
|
||||
MD_Node *first, MD_Node *opl);
|
||||
Node *first, Node *opl);
|
||||
MD_FUNCTION MD_b32 MD_ExprParse_OprConsume(MD_ExprParseCtx *ctx,
|
||||
MD_Node **iter, MD_Node *opl,
|
||||
Node **iter, Node *opl,
|
||||
MD_ExprOprKind kind,
|
||||
MD_u32 min_precedence,
|
||||
MD_ExprOpr **op_out);
|
||||
MD_FUNCTION MD_Expr* MD_ExprParse_Atom(MD_Arena *arena, MD_ExprParseCtx *ctx,
|
||||
MD_Node **iter, MD_Node *first, MD_Node *opl);
|
||||
Node **iter, Node *first, Node *opl);
|
||||
MD_FUNCTION MD_Expr* MD_ExprParse_MinPrecedence(MD_Arena *arena, MD_ExprParseCtx *ctx,
|
||||
MD_Node **iter, MD_Node *first, MD_Node *opl,
|
||||
Node **iter, Node *first, Node *opl,
|
||||
MD_u32 min_precedence);
|
||||
|
||||
|
||||
//~ String Generation
|
||||
|
||||
MD_FUNCTION void MD_DebugDumpFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
|
||||
MD_FUNCTION void MD_DebugDumpFromNode(MD_Arena *arena, MD_String8List *out, Node *node,
|
||||
int indent, MD_String8 indent_string,
|
||||
MD_GenerateFlags flags);
|
||||
MD_FUNCTION void MD_ReconstructionFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
|
||||
MD_FUNCTION void MD_ReconstructionFromNode(MD_Arena *arena, MD_String8List *out, Node *node,
|
||||
int indent, MD_String8 indent_string);
|
||||
|
||||
//~ Command Line Argument Helper
|
||||
|
||||
Reference in New Issue
Block a user