mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-01 16:31:13 +00:00
Fix transmute
This commit is contained in:
@@ -6423,7 +6423,8 @@ gbString write_expr_to_string(gbString str, AstNode *node) {
|
||||
str = gb_string_append_rune(str, ')');
|
||||
case_end;
|
||||
case_ast_node(tc, TypeCast, node);
|
||||
str = gb_string_appendc(str, "cast(");
|
||||
str = string_append_token(str, tc->token);
|
||||
str = gb_string_append_rune(str, '(');
|
||||
str = write_expr_to_string(str, tc->type);
|
||||
str = gb_string_append_rune(str, ')');
|
||||
str = write_expr_to_string(str, tc->expr);
|
||||
|
||||
13
src/ir.cpp
13
src/ir.cpp
@@ -3351,6 +3351,7 @@ bool ir_is_type_aggregate(Type *t) {
|
||||
case Type_Array:
|
||||
case Type_Slice:
|
||||
case Type_Struct:
|
||||
case Type_Union:
|
||||
case Type_Tuple:
|
||||
case Type_DynamicArray:
|
||||
case Type_Map:
|
||||
@@ -6020,7 +6021,17 @@ irAddr ir_build_addr(irProcedure *proc, AstNode *expr) {
|
||||
case_ast_node(tc, TypeCast, expr);
|
||||
Type *type = type_of_expr(proc->module->info, expr);
|
||||
irValue *x = ir_build_expr(proc, tc->expr);
|
||||
irValue *e = ir_emit_conv(proc, x, type);
|
||||
irValue *e = nullptr;
|
||||
switch (tc->token.kind) {
|
||||
case Token_cast:
|
||||
e = ir_emit_conv(proc, x, type);
|
||||
break;
|
||||
case Token_transmute:
|
||||
e = ir_emit_transmute(proc, x, type);
|
||||
break;
|
||||
default:
|
||||
GB_PANIC("Invalid AST TypeCast");
|
||||
}
|
||||
irValue *v = ir_add_local_generated(proc, type);
|
||||
ir_emit_store(proc, v, e);
|
||||
return ir_addr(v);
|
||||
|
||||
Reference in New Issue
Block a user