ast_binary_new to initialize codegen function ptr, codegen proto for store and binary ast nodes

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-04-26 10:38:00 +02:00
parent c692794eb5
commit 41a39125be
2 changed files with 45 additions and 8 deletions

41
ast.c
View file

@ -111,7 +111,36 @@ ast_binary* ast_binary_new(lex_ctx_t ctx, int op,
ast_value* left, ast_value* right)
{
ast_instantiate(ast_binary, ctx, ast_binary_delete);
ast_expression_init((ast_expression*)self, NULL); /* FIXME */
switch (op) {
case INSTR_STORE_F:
case INSTR_STORE_V:
case INSTR_STORE_S:
case INSTR_STORE_ENT:
case INSTR_STORE_FLD:
case INSTR_STORE_FNC:
case INSTR_STOREP_F:
case INSTR_STOREP_V:
case INSTR_STOREP_S:
case INSTR_STOREP_ENT:
case INSTR_STOREP_FLD:
case INSTR_STOREP_FNC:
#if 0
case INSTR_STORE_I:
case INSTR_STORE_IF:
case INSTR_STORE_FI:
case INSTR_STOREP_I:
case INSTR_STOREP_IF:
case INSTR_STOREP_FI:
case INSTR_STORE_P:
case INSTR_STOREP_P:
case INSTR_STOREP_C:
#endif
ast_expression_init((ast_expression*)self, (ast_expression_codegen*)&ast_bin_store_codegen);
break;
default:
ast_expression_init((ast_expression*)self, (ast_expression_codegen*)&ast_binary_codegen);
break;
}
self->op = op;
self->left = left;
@ -191,3 +220,13 @@ bool ast_block_codegen(ast_block *self, ast_function *func, ir_value **out)
{
return false;
}
bool ast_bin_store_codegen(ast_binary *self, ast_function *func, ir_value **out)
{
return false;
}
bool ast_binary_codegen(ast_binary *self, ast_function *func, ir_value **out)
{
return false;
}

12
ast.h
View file

@ -122,15 +122,13 @@ ast_binary* ast_binary_new(lex_ctx_t ctx,
ast_value *right);
void ast_binary_delete(ast_binary*);
/* hmm, seperate functions? */
bool ast_bin_add_codegen(ast_binary*, ir_function*, ir_value**);
/* ... */
/* hmm, seperate functions?
bool ast_block_codegen(ast_block*, ast_function*, ir_value**);
*/
/* maybe for this one */
bool ast_bin_store_codegen(ast_binary*, ir_function*, ir_value**);
bool ast_bin_store_codegen(ast_binary*, ast_function*, ir_value**);
/* could decide what to use */
bool ast_binary_codegen(ast_binary*, ir_function*, ir_value**);
bool ast_binary_codegen(ast_binary*, ast_function*, ir_value**);
/* Blocks
*