diff --git a/lang/codegen/expr.c b/lang/codegen/expr.c index 12ded49..ecf840e 100644 --- a/lang/codegen/expr.c +++ b/lang/codegen/expr.c @@ -93,6 +93,30 @@ static struct code_generator_result gen_int( return CODEGEN_RESULT_OK(0); } +static struct code_generator_result gen_string( + struct ivy_codegen *gen, struct code_generator_state *state, + struct ivy_ast_node *node, size_t depth) +{ + struct expr_codegen_state *expr = (struct expr_codegen_state *)state; + + debug_printf("codegen: got string\n"); + struct ivy_ast_string_node *string_node + = (struct ivy_ast_string_node *)node; + + struct mie_value *var_ptr = mie_builder_get_string_ptr( + gen->c_builder, string_node->n_value->t_str); + struct mie_type *str = mie_ctx_get_type(gen->c_ctx, MIE_TYPE_STR); + struct mie_value *var_value + = mie_builder_load(gen->c_builder, str, var_ptr, NULL); + enum ivy_status status = push_operand(expr, node, var_value); + + if (status != IVY_OK) { + return CODEGEN_RESULT_ERR(status); + } + + return CODEGEN_RESULT_OK(0); +} + static struct code_generator_result gen_op( struct ivy_codegen *gen, struct code_generator_state *state, struct ivy_ast_node *node, size_t depth) @@ -385,6 +409,7 @@ struct code_generator expr_generator = { NODE_CODEGEN(INT, gen_int), NODE_CODEGEN(OP, gen_op), NODE_CODEGEN(MSG, gen_msg), + NODE_CODEGEN(STRING, gen_string), NODE_CODEGEN(IDENT, gen_var_reference), }, };