KL_Block* KL_create_block(KL_StmtList* stmt_list) { KL_Block* block = (KL_Block*)KL_util_malloc(sizeof(*block)); block->stmt_list = stmt_list; return block; }
char* KL_create_identifier(const char* str) { char* new_str = (char*)KL_util_malloc(strlen(str) + 1); strcpy(new_str, str); return new_str; }
char* KL_close_string_literal(void) { char* new_str = KL_util_malloc(s_str_literal_buffer_size + 1); memcpy(new_str, s_str_literal_buffer, s_str_literal_buffer_size); new_str[s_str_literal_buffer_size] = 0; return new_str; }
KL_ArgList* KL_create_arg_list(KL_Expr* expr) { KL_ArgList* arg = (KL_ArgList*)KL_util_malloc(sizeof(*arg)); arg->expr = expr; arg->next = NULL; return arg; }
KL_ParamList* KL_create_param(const char* identifier) { KL_ParamList* p = (KL_ParamList*)KL_util_malloc(sizeof(*p)); p->name = (char*)identifier; p->next = NULL; return p; }
KL_IDList* KL_create_global_identifier(const char* identifier) { KL_IDList* id_list = (KL_IDList*)KL_util_malloc(sizeof(*id_list)); id_list->name = (char*)identifier; id_list->next = NULL; return id_list; }
static KL_Stmt* alloc_stmt(int stmt_type) { KL_Stmt* stmt = (KL_Stmt*)KL_util_malloc(sizeof(*stmt)); stmt->stmt_type = stmt_type; stmt->lineno = KL_get_state()->lineno; return stmt; }
KL_Expr* KL_alloc_expr(int expr_type) { KL_Expr* expr = (KL_Expr*)KL_util_malloc(sizeof(*expr)); expr->expr_type = expr_type; expr->lineno = KL_get_state()->lineno; return expr; }
KL_StmtList* KL_create_stmt_list(KL_Stmt* stmt) { KL_StmtList* stmt_list = (KL_StmtList*)KL_util_malloc(sizeof(*stmt_list)); stmt_list->stmt = stmt; stmt_list->next = NULL; return stmt_list; }
void KL_function_def(const char* identifier, KL_ParamList* param_list, KL_Block* block) { KL_Function* func; KL_State* L; if (KL_lookup_func(identifier)) return; L = KL_get_state(); func = KL_util_malloc(sizeof(*func)); func->name = (char*)identifier; func->func_type = FT_DEFINE; func->func.define.param = param_list; func->func.define.block = block; func->next = L->func_list; L->func_list = func; }