mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-24 06:35:00 -07:00
Fix #2002 (allow array *= matrix)
This commit is contained in:
@@ -1959,8 +1959,18 @@ void lb_build_assign_stmt(lbProcedure *p, AstAssignStmt *as) {
|
||||
} else {
|
||||
lbAddr lhs = lb_build_addr(p, as->lhs[0]);
|
||||
lbValue value = lb_build_expr(p, as->rhs[0]);
|
||||
|
||||
Type *lhs_type = lb_addr_type(lhs);
|
||||
|
||||
// NOTE(bill): Allow for the weird edge case of:
|
||||
// array *= matrix
|
||||
if (op == Token_Mul && is_type_matrix(value.type) && is_type_array(lhs_type)) {
|
||||
lbValue old_value = lb_addr_load(p, lhs);
|
||||
Type *type = old_value.type;
|
||||
lbValue new_value = lb_emit_vector_mul_matrix(p, old_value, value, type);
|
||||
lb_addr_store(p, lhs, new_value);
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_type_array(lhs_type)) {
|
||||
lb_build_assign_stmt_array(p, op, lhs, value);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user