diff --git a/vlib/v/ast/str.v b/vlib/v/ast/str.v index 3671643102..7855aa457b 100644 --- a/vlib/v/ast/str.v +++ b/vlib/v/ast/str.v @@ -43,11 +43,13 @@ pub fn (node &FnDecl) stringify(t &table.Table, cur_mod string) string { receiver = '($node.receiver.name $m$name) ' */ } - mut name := if node.is_anon { '' } else { node.name.after('.') } - if node.language == .c { - name = 'C.$name' - } else if node.language == .js { - name = 'JS.$name' + mut name := if node.is_anon { '' } else { node.name.after_char(`.`) } + if !node.is_method { + if node.language == .c { + name = 'C.$name' + } else if node.language == .js { + name = 'JS.$name' + } } f.write('fn $receiver$name') if name in ['+', '-', '*', '/', '%'] { diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index e76d90ebd7..7e36e4e132 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -1502,6 +1502,8 @@ pub fn (mut f Fmt) call_expr(node ast.CallExpr) { f.write_language_prefix(node.language) if node.left is ast.AnonFn { f.fn_decl(node.left.decl) + } else if node.language != .v { + f.write('${node.name.after_char(`.`)}') } else { mut name := f.short_module(node.name) f.mark_module_as_used(name) diff --git a/vlib/v/fmt/tests/fn_js_object_keep.vv b/vlib/v/fmt/tests/fn_js_object_keep.vv new file mode 100644 index 0000000000..3a2f172499 --- /dev/null +++ b/vlib/v/fmt/tests/fn_js_object_keep.vv @@ -0,0 +1,7 @@ +fn (v JS.String) toString() JS.String + +fn JS.Math.abs(f64) f64 + +fn main() { + JS.Math.abs(0) +}