mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: format the generated c code of arrays map and filter (#8016)
This commit is contained in:
parent
33694665f0
commit
33976246c8
@ -141,14 +141,14 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
|||||||
if inp_sym.kind != .array {
|
if inp_sym.kind != .array {
|
||||||
verror('map() requires an array')
|
verror('map() requires an array')
|
||||||
}
|
}
|
||||||
g.write('${g.typ(node.left_type)} ${tmp}_orig = ')
|
g.write('\t${g.typ(node.left_type)} ${tmp}_orig = ')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
g.write('int ${tmp}_len = ${tmp}_orig.len;')
|
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
||||||
g.writeln('$ret_typ $tmp = __new_array(0, ${tmp}_len, sizeof($ret_elem_type));')
|
g.writeln('$ret_typ $tmp = __new_array(0, ${tmp}_len, sizeof($ret_elem_type));\n')
|
||||||
i := g.new_tmp_var()
|
i := g.new_tmp_var()
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.write('\t$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
g.writeln('\t$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
expr := node.args[0].expr
|
expr := node.args[0].expr
|
||||||
match expr {
|
match expr {
|
||||||
@ -192,6 +192,7 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
|||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
|
g.write('\n')
|
||||||
g.write(s)
|
g.write(s)
|
||||||
g.write(tmp)
|
g.write(tmp)
|
||||||
g.inside_lambda = false
|
g.inside_lambda = false
|
||||||
@ -315,24 +316,24 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
|||||||
info := sym.info as table.Array
|
info := sym.info as table.Array
|
||||||
styp := g.typ(node.return_type)
|
styp := g.typ(node.return_type)
|
||||||
elem_type_str := g.typ(info.elem_type)
|
elem_type_str := g.typ(info.elem_type)
|
||||||
g.write('${g.typ(node.left_type)} ${tmp}_orig = ')
|
g.write('\t${g.typ(node.left_type)} ${tmp}_orig = ')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
g.write('int ${tmp}_len = ${tmp}_orig.len;')
|
g.writeln('int ${tmp}_len = ${tmp}_orig.len;')
|
||||||
g.writeln('$styp $tmp = __new_array(0, ${tmp}_len, sizeof($elem_type_str));')
|
g.writeln('$styp $tmp = __new_array(0, ${tmp}_len, sizeof($elem_type_str));\n')
|
||||||
i := g.new_tmp_var()
|
i := g.new_tmp_var()
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.writeln(' $elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
g.writeln('\t$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
expr := node.args[0].expr
|
expr := node.args[0].expr
|
||||||
match expr {
|
match expr {
|
||||||
ast.AnonFn {
|
ast.AnonFn {
|
||||||
g.write('if (')
|
g.write('\tif (')
|
||||||
g.gen_anon_fn_decl(expr)
|
g.gen_anon_fn_decl(expr)
|
||||||
g.write('${expr.decl.name}(it)')
|
g.write('${expr.decl.name}(it)')
|
||||||
}
|
}
|
||||||
ast.Ident {
|
ast.Ident {
|
||||||
g.write('if (')
|
g.write('\tif (')
|
||||||
if expr.kind == .function {
|
if expr.kind == .function {
|
||||||
g.write('${c_name(expr.name)}(it)')
|
g.write('${c_name(expr.name)}(it)')
|
||||||
} else if expr.kind == .variable {
|
} else if expr.kind == .variable {
|
||||||
@ -352,20 +353,22 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
|||||||
is_embed_map_filter = true
|
is_embed_map_filter = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
g.write('if (')
|
g.write('\tif (')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g.write('if (')
|
g.write('\tif (')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.writeln(') array_push(&$tmp, &it); \n }')
|
g.writeln(') {')
|
||||||
|
g.writeln('\t\tarray_push(&$tmp, &it); \n\t\t}')
|
||||||
|
g.writeln('}')
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
|
g.write('\n')
|
||||||
g.write(s)
|
g.write(s)
|
||||||
g.write(' ')
|
|
||||||
g.write(tmp)
|
g.write(tmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user