Fixing codegen issues because of name resolution, invalid constants rewritten
This commit is contained in:
8
main.cpp
8
main.cpp
@@ -203,10 +203,10 @@ int main(int argument_count, char **arguments){
|
|||||||
#endif
|
#endif
|
||||||
Scratch scratch;
|
Scratch scratch;
|
||||||
Array<String> files = {scratch};
|
Array<String> files = {scratch};
|
||||||
// files.add("lambdas.kl"_s);
|
files.add("lambdas.kl"_s);
|
||||||
// files.add("order1.kl"_s);
|
files.add("order1.kl"_s);
|
||||||
// files.add("order2.kl"_s);
|
files.add("order2.kl"_s);
|
||||||
// files.add("new_types.kl"_s);
|
files.add("new_types.kl"_s);
|
||||||
files.add("enums.kl"_s);
|
files.add("enums.kl"_s);
|
||||||
// files.add("G.globals.kl"_s);
|
// files.add("G.globals.kl"_s);
|
||||||
// files.add("euler.kl"_s);
|
// files.add("euler.kl"_s);
|
||||||
|
|||||||
@@ -670,7 +670,7 @@ resolve_expr(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_context){
|
|||||||
node->resolved_decl = resolve_name(node->parent_scope, node->pos, node->intern_val);
|
node->resolved_decl = resolve_name(node->parent_scope, node->pos, node->intern_val);
|
||||||
|
|
||||||
Operand result = operand(node->resolved_decl);
|
Operand result = operand(node->resolved_decl);
|
||||||
if(node->resolved_decl->kind == AST_CONST){
|
if(result.is_const){
|
||||||
rewrite_into_const(node, Ast_Atom, node->resolved_decl->value);
|
rewrite_into_const(node, Ast_Atom, node->resolved_decl->value);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ operand(Ast_Decl *decl){
|
|||||||
result.is_const = decl->kind != AST_VAR ? true : false;
|
result.is_const = decl->kind != AST_VAR ? true : false;
|
||||||
result.is_lvalue= decl->kind == AST_CONST ? false : true; // Cant assign to const values
|
result.is_lvalue= decl->kind == AST_CONST ? false : true; // Cant assign to const values
|
||||||
result.value = decl->value;
|
result.value = decl->value;
|
||||||
|
if(decl->kind == AST_LAMBDA){
|
||||||
|
result.is_const = false;
|
||||||
|
} else assert(!is_lambda(decl->type));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user