Allocator logging
This commit is contained in:
23
new_ast.cpp
23
new_ast.cpp
@@ -14,6 +14,7 @@ const U64 Parse_Ctx_ID = 115151;
|
||||
struct Parse_Ctx:Lexer{
|
||||
Arena ast_arena;
|
||||
Token empty_token;
|
||||
S64 indent;
|
||||
S64 pt[256]; // precedence table
|
||||
|
||||
void init(){
|
||||
@@ -24,7 +25,7 @@ struct Parse_Ctx:Lexer{
|
||||
pt[TK_Div] = mulp;
|
||||
pt[TK_Mul] = mulp;
|
||||
|
||||
arena_init(&ast_arena);
|
||||
arena_init(&ast_arena, "AST Arena"_s);
|
||||
lex_init(this);
|
||||
keyword_const = intern_string(&interns, "const"_s);
|
||||
keyword_struct= intern_string(&interns, "struct"_s);
|
||||
@@ -41,6 +42,8 @@ struct Parse_Ctx:Lexer{
|
||||
enum Ast_Kind{
|
||||
AK_None,
|
||||
|
||||
AK_Package,
|
||||
|
||||
AK_Expr_Str,
|
||||
AK_Expr_Int,
|
||||
AK_Expr_Ident,
|
||||
@@ -49,6 +52,7 @@ enum Ast_Kind{
|
||||
AK_Decl_Func,
|
||||
AK_Decl_Func_Arg,
|
||||
AK_Decl_Const,
|
||||
AK_Decl_Var,
|
||||
|
||||
AK_Typespec_Ident,
|
||||
AK_Typespec_Pointer,
|
||||
@@ -103,6 +107,11 @@ struct Ast_Decl:Ast{
|
||||
};
|
||||
};
|
||||
|
||||
struct Ast_Package:Ast{
|
||||
Intern_String name;
|
||||
Array<Ast_Decl *> decls;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// AST Constructors beginning with expressions
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -178,9 +187,17 @@ ast_decl_func(Token *pos, Intern_String name){
|
||||
}
|
||||
|
||||
function Ast_Decl *
|
||||
ast_decl_const(Token *pos, Intern_String name, Ast_Expr *expr){
|
||||
AST_NEW(Decl, AK_Decl_Const, pos);
|
||||
ast_decl_var(Token *pos, Ast_Typespec *typespec, Intern_String name, Ast_Expr *expr){
|
||||
AST_NEW(Decl, AK_Decl_Var, pos);
|
||||
result->var.expr = expr;
|
||||
result->var.typespec = typespec;
|
||||
result->name = name;
|
||||
return result;
|
||||
}
|
||||
|
||||
function Ast_Package *
|
||||
ast_package(Token *pos, String name){
|
||||
AST_NEW(Package, AK_Package, pos);
|
||||
result->name = intern_string(&ctx->interns, name);
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user