Skip to content

Commit

Permalink
cgen: minor refactor - reduce repeated code (#16886)
Browse files Browse the repository at this point in the history
  • Loading branch information
felipensp committed Jan 7, 2023
1 parent de2ed74 commit 7fa7fec
Show file tree
Hide file tree
Showing 8 changed files with 225 additions and 263 deletions.
9 changes: 1 addition & 8 deletions vlib/v/gen/c/array.v
Expand Up @@ -529,14 +529,7 @@ fn (mut g Gen) gen_array_sort(node ast.CallExpr) {
}

fn (mut g Gen) gen_array_sort_call(node ast.CallExpr, compare_fn string) {
mut deref_field := if node.left_type.is_ptr() || node.left_type.is_pointer() {
'->'
} else {
'.'
}
if node.left_type.has_flag(.shared_f) {
deref_field += 'val.'
}
mut deref_field := g.dot_or_ptr(node.left_type)
// eprintln('> qsort: pointer $node.left_type | deref_field: `$deref_field`')
g.empty_line = true
g.write('qsort(')
Expand Down
19 changes: 5 additions & 14 deletions vlib/v/gen/c/assign.v
Expand Up @@ -121,12 +121,10 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
}
if mut left.obj is ast.Var {
if val is ast.ComptimeSelector {
if val.field_expr is ast.SelectorExpr {
if val.field_expr.expr is ast.Ident {
key_str := '${val.field_expr.expr.name}.typ'
var_type = g.comptime_var_type_map[key_str] or { var_type }
left.obj.typ = var_type
}
key_str := g.get_comptime_selector_key_type(val)
if key_str != '' {
var_type = g.comptime_var_type_map[key_str] or { var_type }
left.obj.typ = var_type
}
} else if val is ast.ComptimeCall {
key_str := '${val.method_name}.return_type'
Expand Down Expand Up @@ -733,14 +731,7 @@ fn (mut g Gen) gen_cross_var_assign(node &ast.AssignStmt) {
styp := g.typ(left.typ)
g.write('${styp} _var_${left.pos.pos} = ')
g.expr(left.expr)
mut sel := '.'
if left.expr_type.is_ptr() {
if left.expr_type.has_flag(.shared_f) {
sel = '->val.'
} else {
sel = '->'
}
}
sel := g.dot_or_ptr(left.expr_type)
g.writeln('${sel}${left.field_name};')
}
else {}
Expand Down
8 changes: 3 additions & 5 deletions vlib/v/gen/c/cgen.v
Expand Up @@ -3556,11 +3556,9 @@ fn (mut g Gen) typeof_expr(node ast.TypeOf) {

fn (mut g Gen) comptime_typeof(node ast.TypeOf, default_type ast.Type) ast.Type {
if node.expr is ast.ComptimeSelector {
if node.expr.field_expr is ast.SelectorExpr {
if node.expr.field_expr.expr is ast.Ident {
key_str := '${node.expr.field_expr.expr.name}.typ'
return g.comptime_var_type_map[key_str] or { default_type }
}
key_str := g.get_comptime_selector_key_type(node.expr)
if key_str != '' {
return g.comptime_var_type_map[key_str] or { default_type }
}
} else if g.inside_comptime_for_field && node.expr is ast.Ident
&& (node.expr as ast.Ident).obj is ast.Var && ((node.expr as ast.Ident).obj as ast.Var).is_comptime_field == true {
Expand Down
9 changes: 9 additions & 0 deletions vlib/v/gen/c/comptime.v
Expand Up @@ -8,6 +8,15 @@ import v.ast
import v.util
import v.pref

fn (mut g Gen) get_comptime_selector_key_type(val ast.ComptimeSelector) string {
if val.field_expr is ast.SelectorExpr {
if val.field_expr.expr is ast.Ident {
return '${val.field_expr.expr.name}.typ'
}
}
return ''
}

fn (mut g Gen) get_comptime_selector_var_type(node ast.ComptimeSelector) (ast.StructField, string) {
field_name := g.comptime_for_field_value.name
left_sym := g.table.sym(g.unwrap_generic(node.left_type))
Expand Down

0 comments on commit 7fa7fec

Please sign in to comment.