Fix value transfer in structs and arrays
This commit is contained in:
parent
9a4f0dc5d8
commit
8abee593f0
@ -415,12 +415,11 @@ impl mir::Expression {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mir::ExprKind::Indexed(expression, val_t, idx_expr) => {
|
mir::ExprKind::Indexed(expression, val_t, idx_expr) => {
|
||||||
dbg!(&expression, &idx_expr);
|
|
||||||
let array = expression
|
let array = expression
|
||||||
.codegen(scope, state)
|
.codegen(scope, &state.load(true))
|
||||||
.expect("array returned none!");
|
.expect("array returned none!");
|
||||||
let idx = idx_expr
|
let idx = idx_expr
|
||||||
.codegen(scope, state)
|
.codegen(scope, &state.load(true))
|
||||||
.expect("index returned none!");
|
.expect("index returned none!");
|
||||||
|
|
||||||
let mut ptr = scope
|
let mut ptr = scope
|
||||||
@ -488,6 +487,8 @@ impl mir::Expression {
|
|||||||
let TypeDefinitionKind::Struct(struct_ty) = scope.get_typedef(&name).unwrap();
|
let TypeDefinitionKind::Struct(struct_ty) = scope.get_typedef(&name).unwrap();
|
||||||
let idx = struct_ty.find_index(field).unwrap();
|
let idx = struct_ty.find_index(field).unwrap();
|
||||||
|
|
||||||
|
dbg!(&scope.context);
|
||||||
|
dbg!(&struct_val);
|
||||||
let mut value = scope
|
let mut value = scope
|
||||||
.block
|
.block
|
||||||
.build(Instr::GetStructElemPtr(struct_val, idx as u32))
|
.build(Instr::GetStructElemPtr(struct_val, idx as u32))
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
// Arithmetic, function calls and imports!
|
// Arithmetic, function calls and imports!
|
||||||
|
|
||||||
fn array() -> [u16; 4] {
|
fn array() -> [[[u16; 4];1];1] {
|
||||||
return [10, 15, 7, 9];
|
return [[[10, 15, 7, 9]]];
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> u16 {
|
fn main() -> u16 {
|
||||||
let mut list = array();
|
let mut list = array();
|
||||||
|
|
||||||
|
list[0][0][2] = 19;
|
||||||
let a = 1;
|
let a = 1;
|
||||||
|
|
||||||
return list[a + 1];
|
return list[0][0][a + 1];
|
||||||
}
|
}
|
||||||
|
@ -19,5 +19,5 @@ fn main() -> u32 {
|
|||||||
let mut b = value[val1];
|
let mut b = value[val1];
|
||||||
b.second[2] = 99;
|
b.second[2] = 99;
|
||||||
|
|
||||||
return value[0].second[2];
|
return value[val1].second[2];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user