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:
parent
44137e07b0
commit
fc9d2d5d5e
@ -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 {
|
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
|
concrete_types := (left_sym.info as ast.Struct).concrete_types
|
||||||
mut method_name := left_sym.cname + '_' + util.replace_op(extracted_op)
|
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.write(' = ${method_name}(')
|
||||||
g.expr(left)
|
g.expr(left)
|
||||||
g.write(', ')
|
g.write(', ')
|
||||||
|
@ -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 {
|
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{
|
g.str_types << StrType{
|
||||||
typ: unwrapped
|
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 {
|
field_styp_fn_name := if sym_has_str_method {
|
||||||
mut field_fn_name := '${field_styp}_str'
|
mut field_fn_name := '${field_styp}_str'
|
||||||
if sym.info is ast.Struct {
|
if sym.info is ast.Struct {
|
||||||
field_fn_name = g.generic_fn_name(sym.info.concrete_types, field_fn_name,
|
field_fn_name = g.generic_fn_name(sym.info.concrete_types, field_fn_name)
|
||||||
false)
|
|
||||||
}
|
}
|
||||||
field_fn_name
|
field_fn_name
|
||||||
} else {
|
} else {
|
||||||
|
@ -920,7 +920,7 @@ fn (mut g Gen) base_type(_t ast.Type) string {
|
|||||||
return styp
|
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 {
|
if types.len == 0 {
|
||||||
return before
|
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
|
exp_styp := exp_sym.cname
|
||||||
mut fname := 'I_${got_styp}_to_Interface_$exp_styp'
|
mut fname := 'I_${got_styp}_to_Interface_$exp_styp'
|
||||||
if exp_sym.info.is_generic {
|
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,
|
g.call_cfn_for_casting_expr(fname, expr, expected_is_ptr, exp_styp, true,
|
||||||
got_styp)
|
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'
|
fname = '/*$exp_sym*/$fname'
|
||||||
if exp_sym.info.is_generic {
|
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,
|
g.call_cfn_for_casting_expr(fname, expr, expected_is_ptr, exp_styp, got_is_ptr,
|
||||||
got_styp)
|
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)
|
parent_sym := g.table.sym(inter_info.parent_type)
|
||||||
match parent_sym.info {
|
match parent_sym.info {
|
||||||
ast.Struct, ast.Interface, ast.SumType {
|
ast.Struct, ast.Interface, ast.SumType {
|
||||||
name = g.generic_fn_name(parent_sym.info.concrete_types, method.name,
|
name = g.generic_fn_name(parent_sym.info.concrete_types, method.name)
|
||||||
false)
|
|
||||||
}
|
}
|
||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
@ -5858,8 +5857,7 @@ static inline __shared__$interface_name ${shared_fn_name}(__shared__$cctype* x)
|
|||||||
// .speak = Cat_speak
|
// .speak = Cat_speak
|
||||||
if st_sym.info is ast.Struct {
|
if st_sym.info is ast.Struct {
|
||||||
if method.generic_names.len > 0 && st_sym.info.parent_type.has_flag(.generic) {
|
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,
|
name = g.generic_fn_name(st_sym.info.concrete_types, method.name)
|
||||||
false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
styp := g.cc_type(method.params[0].typ, true)
|
styp := g.cc_type(method.params[0].typ, true)
|
||||||
|
@ -420,7 +420,7 @@ fn (mut g Gen) c_fn_name(node &ast.FnDecl) ?string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if node.generic_names.len > 0 {
|
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 {
|
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)
|
g.gen_anon_fn_decl(mut node)
|
||||||
mut fn_name := node.decl.name
|
mut fn_name := node.decl.name
|
||||||
if node.decl.generic_names.len > 0 {
|
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() {
|
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))
|
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
|
// TODO2
|
||||||
// g.generate_tmp_autofree_arg_vars(node, name)
|
// g.generate_tmp_autofree_arg_vars(node, name)
|
||||||
if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.name == 'str' {
|
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 := g.table.find_fn(node.name) {
|
||||||
if func.generic_names.len > 0 {
|
if func.generic_names.len > 0 {
|
||||||
if g.comptime_for_field_type != 0 && g.inside_comptime_for_field {
|
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 {
|
} else {
|
||||||
concrete_types := node.concrete_types.map(g.unwrap_generic(it))
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -346,8 +346,7 @@ fn (mut g Gen) for_in_stmt(node ast.ForInStmt) {
|
|||||||
receiver_sym := g.table.sym(receiver_typ)
|
receiver_sym := g.table.sym(receiver_typ)
|
||||||
if receiver_sym.info is ast.Struct {
|
if receiver_sym.info is ast.Struct {
|
||||||
if receiver_sym.info.concrete_types.len > 0 {
|
if receiver_sym.info.concrete_types.len > 0 {
|
||||||
fn_name = g.generic_fn_name(receiver_sym.info.concrete_types, fn_name,
|
fn_name = g.generic_fn_name(receiver_sym.info.concrete_types, fn_name)
|
||||||
false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.write('\t${g.typ(ret_typ)} $t_var = ${fn_name}(')
|
g.write('\t${g.typ(ret_typ)} $t_var = ${fn_name}(')
|
||||||
|
@ -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
|
concrete_types := (left.sym.info as ast.Struct).concrete_types
|
||||||
mut method_name := left.sym.cname + '__lt'
|
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)
|
g.write(method_name)
|
||||||
if node.op in [.lt, .ge] {
|
if node.op in [.lt, .ge] {
|
||||||
g.write('(')
|
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 {
|
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
|
concrete_types := (left.sym.info as ast.Struct).concrete_types
|
||||||
mut method_name := left.sym.cname + '_' + util.replace_op(node.op.str())
|
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(method_name)
|
||||||
g.write('(')
|
g.write('(')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
|
@ -332,7 +332,7 @@ fn (mut g JsGen) method_call(node ast.CallExpr) {
|
|||||||
} else {
|
} else {
|
||||||
mut name := util.no_dots('${receiver_type_name}_$node.name')
|
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.write('${name}(')
|
||||||
g.expr(it.left)
|
g.expr(it.left)
|
||||||
g.gen_deref_ptr(it.left_type)
|
g.gen_deref_ptr(it.left_type)
|
||||||
@ -434,7 +434,7 @@ fn (mut g JsGen) gen_call_expr(it ast.CallExpr) {
|
|||||||
g.write(')')
|
g.write(')')
|
||||||
return
|
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.expr(it.left)
|
||||||
|
|
||||||
g.write('${name}(')
|
g.write('${name}(')
|
||||||
@ -574,7 +574,7 @@ fn fn_has_go(node ast.FnDecl) bool {
|
|||||||
return has_go
|
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 {
|
if types.len == 0 {
|
||||||
return before
|
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.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 {
|
if name in js.builtin_functions {
|
||||||
name = 'builtin__$name'
|
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.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 {
|
if name in js.builtin_functions {
|
||||||
name = 'builtin__$name'
|
name = 'builtin__$name'
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user