mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: fix high order map assignment (#8198)
This commit is contained in:
parent
ca70d815b6
commit
15cc1cd884
@ -73,6 +73,7 @@ mut:
|
|||||||
inside_ternary int // ?: comma separated statements on a single line
|
inside_ternary int // ?: comma separated statements on a single line
|
||||||
inside_map_postfix bool // inside map++/-- postfix expr
|
inside_map_postfix bool // inside map++/-- postfix expr
|
||||||
inside_map_infix bool // inside map<</+=/-= infix expr
|
inside_map_infix bool // inside map<</+=/-= infix expr
|
||||||
|
inside_map_index bool
|
||||||
// inside_if_expr bool
|
// inside_if_expr bool
|
||||||
ternary_names map[string]string
|
ternary_names map[string]string
|
||||||
ternary_level_names map[string][]string
|
ternary_level_names map[string][]string
|
||||||
@ -4145,7 +4146,13 @@ fn (mut g Gen) index_expr(node ast.IndexExpr) {
|
|||||||
if !left_is_ptr || node.left_type.has_flag(.shared_f) {
|
if !left_is_ptr || node.left_type.has_flag(.shared_f) {
|
||||||
g.write('&')
|
g.write('&')
|
||||||
}
|
}
|
||||||
|
if node.left is ast.IndexExpr {
|
||||||
|
g.inside_map_index = true
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
|
g.inside_map_index = false
|
||||||
|
} else {
|
||||||
|
g.expr(node.left)
|
||||||
|
}
|
||||||
if node.left_type.has_flag(.shared_f) {
|
if node.left_type.has_flag(.shared_f) {
|
||||||
if left_is_ptr {
|
if left_is_ptr {
|
||||||
g.write('->val')
|
g.write('->val')
|
||||||
@ -4165,7 +4172,7 @@ fn (mut g Gen) index_expr(node ast.IndexExpr) {
|
|||||||
zero := g.type_default(info.value_type)
|
zero := g.type_default(info.value_type)
|
||||||
g.write('$zero })))')
|
g.write('$zero })))')
|
||||||
}
|
}
|
||||||
} else if (g.inside_map_postfix || g.inside_map_infix) ||
|
} else if g.inside_map_postfix || g.inside_map_infix || g.inside_map_index ||
|
||||||
(g.is_assign_lhs && !g.is_array_set && get_and_set_types)
|
(g.is_assign_lhs && !g.is_array_set && get_and_set_types)
|
||||||
{
|
{
|
||||||
zero := g.type_default(info.value_type)
|
zero := g.type_default(info.value_type)
|
||||||
|
6
vlib/v/tests/map_high_order_assign_test.v
Normal file
6
vlib/v/tests/map_high_order_assign_test.v
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
fn test_high_order_map_assign() {
|
||||||
|
mut m := map[string]map[string]int
|
||||||
|
m['hello']['hi'] = 1
|
||||||
|
println(m)
|
||||||
|
assert '$m' == "{'hello': {'hi': 1}}"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user