mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-11-03 23:36:12 -08:00 
			
		
		
		
	preparing to revamp lexer
This commit is contained in:
		@@ -15,38 +15,6 @@
 | 
				
			|||||||
  \▓▓▓▓▓▓  \▓▓▓▓▓▓▓\▓▓   \▓▓     \▓▓▓▓▓▓\▓▓   \▓▓   \▓▓▓▓  \▓▓▓▓▓▓▓\▓▓      \▓▓       \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓
 | 
					  \▓▓▓▓▓▓  \▓▓▓▓▓▓▓\▓▓   \▓▓     \▓▓▓▓▓▓\▓▓   \▓▓   \▓▓▓▓  \▓▓▓▓▓▓▓\▓▓      \▓▓       \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum LogLevel //: u32
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	LL_Null,
 | 
					 | 
				
			||||||
	LL_Note,
 | 
					 | 
				
			||||||
	LL_Warning,
 | 
					 | 
				
			||||||
	LL_Error,
 | 
					 | 
				
			||||||
	LL_Fatal,
 | 
					 | 
				
			||||||
	LL_UnderlyingType = GEN_U32_MAX,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
typedef enum LogLevel LogLevel;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Str loglevel_to_str(LogLevel level) 
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local_persist
 | 
					 | 
				
			||||||
	Str lookup[] = {
 | 
					 | 
				
			||||||
		{ "Null",    sizeof("Null")  - 1 },
 | 
					 | 
				
			||||||
		{ "Note",    sizeof("Note")  - 1 },
 | 
					 | 
				
			||||||
		{ "Warning", sizeof("Info")  - 1 },
 | 
					 | 
				
			||||||
		{ "Error",   sizeof("Error") - 1 },
 | 
					 | 
				
			||||||
		{ "Fatal",   sizeof("Fatal") - 1 },
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	return lookup[level];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct LogEntry
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Str      msg;
 | 
					 | 
				
			||||||
	LogLevel level;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef void LoggerProc(LogEntry entry);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Note(Ed): This is subject to heavily change 
 | 
					// Note(Ed): This is subject to heavily change 
 | 
				
			||||||
// with upcoming changes to the library's fallback (default) allocations strategy;
 | 
					// with upcoming changes to the library's fallback (default) allocations strategy;
 | 
				
			||||||
// and major changes to lexer/parser context usage.
 | 
					// and major changes to lexer/parser context usage.
 | 
				
			||||||
@@ -411,7 +379,7 @@ struct ParseMessage
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ParseMessage*   Next;
 | 
						ParseMessage*   Next;
 | 
				
			||||||
	ParseStackNode* Scope;
 | 
						ParseStackNode* Scope;
 | 
				
			||||||
	Str             Log;
 | 
						Str             Content;
 | 
				
			||||||
	LogLevel        Level;
 | 
						LogLevel        Level;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -568,6 +568,23 @@ void lex_found_token( LexContext* ctx )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// TODO(Ed): We need to to attempt to recover from a lex failure?
 | 
					// TODO(Ed): We need to to attempt to recover from a lex failure?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					neverinline
 | 
				
			||||||
 | 
					LexedInfo lex_WIP(Context* lib_ctx, Str content)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LexedInfo result = struct_zero();
 | 
				
			||||||
 | 
						result.text   = content;
 | 
				
			||||||
 | 
						result.tokens = array_init_reserve(Token, ctx->Allocator_DyanmicContainers, ctx->InitSize_LexerTokens );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						LexContext c = struct_zero(); LexContext* ctx = & c;
 | 
				
			||||||
 | 
						c.content = content;
 | 
				
			||||||
 | 
						c.left    = content.Len;
 | 
				
			||||||
 | 
						c.scanner = content.Ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
neverinline
 | 
					neverinline
 | 
				
			||||||
// void lex( Array<Token> tokens, Str content )
 | 
					// void lex( Array<Token> tokens, Str content )
 | 
				
			||||||
TokArray lex( Str content )
 | 
					TokArray lex( Str content )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -128,10 +128,19 @@ struct LexContext
 | 
				
			|||||||
	Token           token;
 | 
						Token           token;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct LexerMessage LexerMessage;
 | 
				
			||||||
 | 
					struct LexerMessage
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LexerMessage* next;
 | 
				
			||||||
 | 
						Str           content;
 | 
				
			||||||
 | 
						LogLevel      level;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct LexedInfo
 | 
					struct LexedInfo
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Str        text;
 | 
						LexerMessage messages;
 | 
				
			||||||
	TokenSlice tokens;
 | 
						Str          text;
 | 
				
			||||||
 | 
						TokenSlice   tokens;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct ParseStackNode ParseStackNode;
 | 
					typedef struct ParseStackNode ParseStackNode;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,38 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum LogLevel //: u32
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LL_Null,
 | 
				
			||||||
 | 
						LL_Note,
 | 
				
			||||||
 | 
						LL_Warning,
 | 
				
			||||||
 | 
						LL_Error,
 | 
				
			||||||
 | 
						LL_Fatal,
 | 
				
			||||||
 | 
						LL_UnderlyingType = GEN_U32_MAX,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					typedef enum LogLevel LogLevel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Str loglevel_to_str(LogLevel level) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local_persist
 | 
				
			||||||
 | 
						Str lookup[] = {
 | 
				
			||||||
 | 
							{ "Null",    sizeof("Null")  - 1 },
 | 
				
			||||||
 | 
							{ "Note",    sizeof("Note")  - 1 },
 | 
				
			||||||
 | 
							{ "Warning", sizeof("Info")  - 1 },
 | 
				
			||||||
 | 
							{ "Error",   sizeof("Error") - 1 },
 | 
				
			||||||
 | 
							{ "Fatal",   sizeof("Fatal") - 1 },
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						return lookup[level];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct LogEntry
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Str      msg;
 | 
				
			||||||
 | 
						LogLevel level;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef void LoggerProc(LogEntry entry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum AccessSpec : u32
 | 
					enum AccessSpec : u32
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	AccessSpec_Default,
 | 
						AccessSpec_Default,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user