cgen: map_get/map_set
parent
6c56528cd7
commit
b5cb1b1fe2
|
@ -65,7 +65,7 @@ pub fn (g mut Gen) typ(t table.Type) string {
|
||||||
if styp.starts_with('C__') {
|
if styp.starts_with('C__') {
|
||||||
styp = styp[3..]
|
styp = styp[3..]
|
||||||
}
|
}
|
||||||
if styp in ['stat', 'dirent*', 'tm', 'tm*'] {
|
if styp in ['stat', 'dirent*', 'tm', 'tm*', 'winsize'] {
|
||||||
// TODO perf and other C structs
|
// TODO perf and other C structs
|
||||||
styp = 'struct $styp'
|
styp = 'struct $styp'
|
||||||
}
|
}
|
||||||
|
@ -1261,6 +1261,25 @@ fn (g mut Gen) index_expr(node ast.IndexExpr) {
|
||||||
g.write('))')
|
g.write('))')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if sym.kind == .map {
|
||||||
|
info := sym.info as table.Map
|
||||||
|
elem_type_str := g.typ(info.value_type)
|
||||||
|
if g.is_assign_expr {
|
||||||
|
g.is_array_set = true
|
||||||
|
g.write('map_set(&')
|
||||||
|
g.expr(node.left)
|
||||||
|
g.write(', ')
|
||||||
|
g.expr(node.index)
|
||||||
|
g.write(', &($elem_type_str[]) { ')
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g.write('(*($elem_type_str*)map_get2(')
|
||||||
|
g.expr(node.left)
|
||||||
|
g.write(', ')
|
||||||
|
g.expr(node.index)
|
||||||
|
g.write('))')
|
||||||
|
}
|
||||||
|
}
|
||||||
else if sym.kind == .string && !table.type_is_ptr(node.container_type) {
|
else if sym.kind == .string && !table.type_is_ptr(node.container_type) {
|
||||||
g.write('string_at(')
|
g.write('string_at(')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
|
|
Loading…
Reference in New Issue