Adding lvalue rvalue concept, Cleanup

This commit is contained in:
Krzosa Karol
2022-06-01 13:23:21 +02:00
parent 94704a5340
commit a5267bb8ae
2 changed files with 6 additions and 5 deletions

View File

@@ -149,6 +149,7 @@ function Ast_Expr *parse_expr(S64 rbp = 0);
function Ast_Expr * function Ast_Expr *
parse_init_stmt(Ast_Expr *expr){ parse_init_stmt(Ast_Expr *expr){
Token *token = token_get(); Token *token = token_get();
if(token->kind == TK_ColonAssign && expr->kind != AST_IDENT) parsing_error(expr->pos, "Binding with [:=] to something that is not an identifier");
if(token_is_assign(token)){ if(token_is_assign(token)){
token_next(); token_next();
Ast_Expr *value = parse_expr(); Ast_Expr *value = parse_expr();

View File

@@ -404,13 +404,13 @@ resolve_expr(Ast_Expr *ast, Ast_Resolved_Type *expected_type, Sym *lambda_to_res
Operand result = {}; Operand result = {};
switch(node->op){ switch(node->op){
case TK_ColonAssign:{ case TK_ColonAssign:{
// @note: This is actually a statement so it doesn't need to return Operand
assert(is_flag_set(node->flags, AST_STMT)); assert(is_flag_set(node->flags, AST_STMT));
// Operand left = resolve_expr(node->left); // needs to be lvalue
Operand right = resolve_expr(node->right);
assert(node->left->kind == AST_IDENT); assert(node->left->kind == AST_IDENT);
Ast_Atom *atom = (Ast_Atom *)node->left; // @todo use left operand
Sym *sym = sym_new_resolved(SYM_VAR, atom->intern_val, right.type, right.value, node); Operand right = resolve_expr(node->right);
sym_insert(sym); Ast_Atom *atom = (Ast_Atom *)node->left;
sym_insert(SYM_VAR, atom->intern_val, right.type, right.value, node);
}break; }break;
case TK_Dot: { case TK_Dot: {
B32 required_to_be_const = false; B32 required_to_be_const = false;