1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

cgen: cleanup generic_fn_name() (#15531)

This commit is contained in:
yuyi 2022-08-26 12:04:10 +08:00 committed by GitHub
parent 44137e07b0
commit fc9d2d5d5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 21 additions and 25 deletions

View File

@ -291,7 +291,7 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
if left_sym.kind == .struct_ && (left_sym.info as ast.Struct).generic_types.len > 0 {
concrete_types := (left_sym.info as ast.Struct).concrete_types
mut method_name := left_sym.cname + '_' + util.replace_op(extracted_op)
method_name = g.generic_fn_name(concrete_types, method_name, true)
method_name = g.generic_fn_name(concrete_types, method_name)
g.write(' = ${method_name}(')
g.expr(left)
g.write(', ')

View File

@ -77,7 +77,7 @@ fn (mut g Gen) get_str_fn(typ ast.Type) string {
}
}
if sym.has_method_with_generic_parent('str') && mut sym.info is ast.Struct {
str_fn_name = g.generic_fn_name(sym.info.concrete_types, str_fn_name, false)
str_fn_name = g.generic_fn_name(sym.info.concrete_types, str_fn_name)
}
g.str_types << StrType{
typ: unwrapped
@ -895,8 +895,7 @@ fn (mut g Gen) gen_str_for_struct(info ast.Struct, styp string, str_fn_name stri
field_styp_fn_name := if sym_has_str_method {
mut field_fn_name := '${field_styp}_str'
if sym.info is ast.Struct {
field_fn_name = g.generic_fn_name(sym.info.concrete_types, field_fn_name,
false)
field_fn_name = g.generic_fn_name(sym.info.concrete_types, field_fn_name)
}
field_fn_name
} else {

View File

@ -920,7 +920,7 @@ fn (mut g Gen) base_type(_t ast.Type) string {
return styp
}
fn (mut g Gen) generic_fn_name(types []ast.Type, before string, is_decl bool) string {
fn (mut g Gen) generic_fn_name(types []ast.Type, before string) string {
if types.len == 0 {
return before
}
@ -2202,7 +2202,7 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type_raw ast.Type, expected_typ
exp_styp := exp_sym.cname
mut fname := 'I_${got_styp}_to_Interface_$exp_styp'
if exp_sym.info.is_generic {
fname = g.generic_fn_name(exp_sym.info.concrete_types, fname, false)
fname = g.generic_fn_name(exp_sym.info.concrete_types, fname)
}
g.call_cfn_for_casting_expr(fname, expr, expected_is_ptr, exp_styp, true,
got_styp)
@ -2222,7 +2222,7 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type_raw ast.Type, expected_typ
}
fname = '/*$exp_sym*/$fname'
if exp_sym.info.is_generic {
fname = g.generic_fn_name(exp_sym.info.concrete_types, fname, false)
fname = g.generic_fn_name(exp_sym.info.concrete_types, fname)
}
g.call_cfn_for_casting_expr(fname, expr, expected_is_ptr, exp_styp, got_is_ptr,
got_styp)
@ -5844,8 +5844,7 @@ static inline __shared__$interface_name ${shared_fn_name}(__shared__$cctype* x)
parent_sym := g.table.sym(inter_info.parent_type)
match parent_sym.info {
ast.Struct, ast.Interface, ast.SumType {
name = g.generic_fn_name(parent_sym.info.concrete_types, method.name,
false)
name = g.generic_fn_name(parent_sym.info.concrete_types, method.name)
}
else {}
}
@ -5858,8 +5857,7 @@ static inline __shared__$interface_name ${shared_fn_name}(__shared__$cctype* x)
// .speak = Cat_speak
if st_sym.info is ast.Struct {
if method.generic_names.len > 0 && st_sym.info.parent_type.has_flag(.generic) {
name = g.generic_fn_name(st_sym.info.concrete_types, method.name,
false)
name = g.generic_fn_name(st_sym.info.concrete_types, method.name)
}
}
styp := g.cc_type(method.params[0].typ, true)

View File

@ -420,7 +420,7 @@ fn (mut g Gen) c_fn_name(node &ast.FnDecl) ?string {
}
if node.generic_names.len > 0 {
name = g.generic_fn_name(g.cur_concrete_types, name, true)
name = g.generic_fn_name(g.cur_concrete_types, name)
}
if g.pref.translated || g.file.is_translated {
@ -447,7 +447,7 @@ fn (mut g Gen) gen_anon_fn(mut node ast.AnonFn) {
g.gen_anon_fn_decl(mut node)
mut fn_name := node.decl.name
if node.decl.generic_names.len > 0 {
fn_name = g.generic_fn_name(g.cur_concrete_types, fn_name, true)
fn_name = g.generic_fn_name(g.cur_concrete_types, fn_name)
}
if !node.decl.scope.has_inherited_vars() {
@ -1009,7 +1009,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
}
}
concrete_types := node.concrete_types.map(g.unwrap_generic(it))
name = g.generic_fn_name(concrete_types, name, false)
name = g.generic_fn_name(concrete_types, name)
// TODO2
// g.generate_tmp_autofree_arg_vars(node, name)
if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.name == 'str' {
@ -1238,10 +1238,10 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
if func := g.table.find_fn(node.name) {
if func.generic_names.len > 0 {
if g.comptime_for_field_type != 0 && g.inside_comptime_for_field {
name = g.generic_fn_name([g.comptime_for_field_type], name, false)
name = g.generic_fn_name([g.comptime_for_field_type], name)
} else {
concrete_types := node.concrete_types.map(g.unwrap_generic(it))
name = g.generic_fn_name(concrete_types, name, false)
name = g.generic_fn_name(concrete_types, name)
}
}
}

View File

@ -346,8 +346,7 @@ fn (mut g Gen) for_in_stmt(node ast.ForInStmt) {
receiver_sym := g.table.sym(receiver_typ)
if receiver_sym.info is ast.Struct {
if receiver_sym.info.concrete_types.len > 0 {
fn_name = g.generic_fn_name(receiver_sym.info.concrete_types, fn_name,
false)
fn_name = g.generic_fn_name(receiver_sym.info.concrete_types, fn_name)
}
}
g.write('\t${g.typ(ret_typ)} $t_var = ${fn_name}(')

View File

@ -305,7 +305,7 @@ fn (mut g Gen) infix_expr_cmp_op(node ast.InfixExpr) {
}
concrete_types := (left.sym.info as ast.Struct).concrete_types
mut method_name := left.sym.cname + '__lt'
method_name = g.generic_fn_name(concrete_types, method_name, true)
method_name = g.generic_fn_name(concrete_types, method_name)
g.write(method_name)
if node.op in [.lt, .ge] {
g.write('(')
@ -660,7 +660,7 @@ fn (mut g Gen) infix_expr_arithmetic_op(node ast.InfixExpr) {
if left.sym.kind == .struct_ && (left.sym.info as ast.Struct).generic_types.len > 0 {
concrete_types := (left.sym.info as ast.Struct).concrete_types
mut method_name := left.sym.cname + '_' + util.replace_op(node.op.str())
method_name = g.generic_fn_name(concrete_types, method_name, true)
method_name = g.generic_fn_name(concrete_types, method_name)
g.write(method_name)
g.write('(')
g.expr(node.left)

View File

@ -332,7 +332,7 @@ fn (mut g JsGen) method_call(node ast.CallExpr) {
} else {
mut name := util.no_dots('${receiver_type_name}_$node.name')
name = g.generic_fn_name(node.concrete_types, name, false)
name = g.generic_fn_name(node.concrete_types, name)
g.write('${name}(')
g.expr(it.left)
g.gen_deref_ptr(it.left_type)
@ -434,7 +434,7 @@ fn (mut g JsGen) gen_call_expr(it ast.CallExpr) {
g.write(')')
return
}
name = g.generic_fn_name(node.concrete_types, name, false)
name = g.generic_fn_name(node.concrete_types, name)
g.expr(it.left)
g.write('${name}(')
@ -574,7 +574,7 @@ fn fn_has_go(node ast.FnDecl) bool {
return has_go
}
fn (mut g JsGen) generic_fn_name(types []ast.Type, before string, is_decl bool) string {
fn (mut g JsGen) generic_fn_name(types []ast.Type, before string) string {
if types.len == 0 {
return before
}
@ -623,7 +623,7 @@ fn (mut g JsGen) gen_method_decl(it ast.FnDecl, typ FnGenType) {
}
name = g.js_name(name)
name = g.generic_fn_name(g.cur_concrete_types, name, true)
name = g.generic_fn_name(g.cur_concrete_types, name)
if name in js.builtin_functions {
name = 'builtin__$name'
}
@ -797,7 +797,7 @@ fn (mut g JsGen) gen_anon_fn(mut fun ast.AnonFn) {
name = g.js_name(name)
name = g.generic_fn_name(g.table.cur_concrete_types, name, true)
name = g.generic_fn_name(g.table.cur_concrete_types, name)
if name in js.builtin_functions {
name = 'builtin__$name'
}