cgen: fixed array index for translated code
parent
725b472d37
commit
92bfd9b353
|
@ -189,6 +189,7 @@ fn (mut g Gen) gen_assign_stmt(node_ ast.AssignStmt) {
|
||||||
is_fixed_array_var := unaliased_right_sym.kind == .array_fixed && val !is ast.ArrayInit
|
is_fixed_array_var := unaliased_right_sym.kind == .array_fixed && val !is ast.ArrayInit
|
||||||
&& (val in [ast.Ident, ast.IndexExpr, ast.CallExpr, ast.SelectorExpr]
|
&& (val in [ast.Ident, ast.IndexExpr, ast.CallExpr, ast.SelectorExpr]
|
||||||
|| (val is ast.CastExpr && (val as ast.CastExpr).expr !is ast.ArrayInit))
|
|| (val is ast.CastExpr && (val as ast.CastExpr).expr !is ast.ArrayInit))
|
||||||
|
&& !g.pref.translated
|
||||||
g.is_assign_lhs = true
|
g.is_assign_lhs = true
|
||||||
g.assign_op = node.op
|
g.assign_op = node.op
|
||||||
if val_type.has_flag(.optional) {
|
if val_type.has_flag(.optional) {
|
||||||
|
@ -403,7 +404,7 @@ fn (mut g Gen) gen_assign_stmt(node_ ast.AssignStmt) {
|
||||||
}
|
}
|
||||||
g.is_shared = var_type.has_flag(.shared_f)
|
g.is_shared = var_type.has_flag(.shared_f)
|
||||||
if !cloned {
|
if !cloned {
|
||||||
if is_fixed_array_var && !g.pref.translated {
|
if is_fixed_array_var {
|
||||||
// TODO Instead of the translated check, check if it's a pointer already
|
// TODO Instead of the translated check, check if it's a pointer already
|
||||||
// and don't generate memcpy &
|
// and don't generate memcpy &
|
||||||
typ_str := g.typ(val_type).trim('*')
|
typ_str := g.typ(val_type).trim('*')
|
||||||
|
|
|
@ -336,7 +336,7 @@ fn (mut g Gen) index_of_fixed_array(node ast.IndexExpr, sym ast.TypeSymbol) {
|
||||||
}
|
}
|
||||||
g.write('[')
|
g.write('[')
|
||||||
direct := g.fn_decl != 0 && g.fn_decl.is_direct_arr
|
direct := g.fn_decl != 0 && g.fn_decl.is_direct_arr
|
||||||
if direct || node.index is ast.IntegerLiteral {
|
if (direct || node.index is ast.IntegerLiteral) || g.pref.translated {
|
||||||
g.expr(node.index)
|
g.expr(node.index)
|
||||||
} else {
|
} else {
|
||||||
// bounds check
|
// bounds check
|
||||||
|
|
Loading…
Reference in New Issue