Swinging in a different direction, different syntax
This commit is contained in:
68
ast.c
68
ast.c
@@ -15,12 +15,47 @@ ast_node_new(Parser *p, AST_Kind kind, Token *token, Intern_String name){
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_note(Parser *p, Token *token, Intern_String name, Expr *expr){
|
||||
AST_Node *node = ast_node_new(p, AK_Note, token, name);
|
||||
node->expr = expr;
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_enum(Parser *p, Token *token, Intern_String name){
|
||||
AST_Node *node = ast_node_new(p, AK_Enum, token, name);
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_struct(Parser *p, Token *token, Intern_String name, AST_Kind kind){
|
||||
AST_Node *node = ast_node_new(p, kind, token, name);
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_variable(Parser *p, Token *token, Intern_String name, AST_Node *type, Expr *expr){
|
||||
AST_Node *node = ast_node_new(p, AK_Variable, token, name);
|
||||
node->variable_type = type;
|
||||
node->expr = expr;
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_typedef(Parser *p, Token *token, Intern_String name, AST_Node *type){
|
||||
AST_Node *node = ast_node_new(p, AK_Typedef, token, name);
|
||||
node->typedef_type = type;
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_function(Parser *p, Token *token, Intern_String name, AST_Node *return_type){
|
||||
AST_Node *node = ast_node_new(p, AK_Function, token, name);
|
||||
node->func_return_type = return_type;
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_enum_child(Parser *p, Token *token, Intern_String name, Expr *expr){
|
||||
AST_Node *node = ast_node_new(p, AK_EnumChild, token, name);
|
||||
@@ -28,6 +63,39 @@ ast_enum_child(Parser *p, Token *token, Intern_String name, Expr *expr){
|
||||
return node;
|
||||
}
|
||||
|
||||
function void
|
||||
ast_copy_symbol(AST_Node *dst, AST_Node *src){
|
||||
AST_Node *scope_next = dst->next_scope;
|
||||
*dst = *src;
|
||||
dst->next_scope = scope_next;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_type_pointer(Parser *p, Token *token, AST_Node *pointer_to){
|
||||
AST_Node *node = ast_node_new(p, AK_Pointer, token, intern_empty);
|
||||
node->pointer = pointer_to;
|
||||
return node;
|
||||
}
|
||||
|
||||
function AST_Node *
|
||||
ast_type_array(Parser *p, Token *token, AST_Node *pointer_to, Expr *expr){
|
||||
AST_Node *node = ast_node_new(p, AK_Array, token, intern_empty);
|
||||
node->pointer = pointer_to;
|
||||
node->expr = expr;
|
||||
return node;
|
||||
}
|
||||
|
||||
function void
|
||||
ast_node_pass_note_list(AST_Node *node, AST_Node *notes){
|
||||
node->first_note = notes->first_note;
|
||||
node->last_note = notes->last_note;
|
||||
}
|
||||
|
||||
function void
|
||||
ast_node_push_note(AST_Node *node, AST_Node *child){
|
||||
SLLQueuePush(node->first_note, node->last_note, child);
|
||||
}
|
||||
|
||||
function void
|
||||
ast_node_push_child(AST_Node *node, AST_Node *child){
|
||||
SLLQueuePush(node->first_child, node->last_child, child);
|
||||
|
||||
Reference in New Issue
Block a user