From b9dfc89aa99a755058cd66d5ca9dfb6210e948fd Mon Sep 17 00:00:00 2001 From: playX Date: Mon, 13 Sep 2021 11:44:55 +0300 Subject: [PATCH] js: prefix V builtin functions, so they do not overlap with JS (#11483) --- vlib/v/gen/js/fn.v | 11 ++++++++--- vlib/v/gen/js/js.v | 11 +++++++---- vlib/v/parser/parser.v | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/vlib/v/gen/js/fn.v b/vlib/v/gen/js/fn.v index 75387d61cc..eeaa5e3bdf 100644 --- a/vlib/v/gen/js/fn.v +++ b/vlib/v/gen/js/fn.v @@ -2,6 +2,7 @@ module js import v.ast import v.util +import v.parser fn (mut g JsGen) js_mname(name_ string) string { mut is_js := false @@ -234,9 +235,9 @@ fn (mut g JsGen) method_call(node ast.CallExpr) { g.stmt(it.or_block.stmts.last()) } .propagate { - panicstr := '`optional not set (\${err})`' + panicstr := '`optional not set (\${err.val.msg})`' if g.file.mod.name == 'main' && g.fn_decl.name == 'main.main' { - g.writeln('return panic($panicstr)') + g.writeln('return builtin__panic($panicstr)') } else { g.writeln('js_throw(err)') } @@ -268,7 +269,11 @@ fn (mut g JsGen) gen_call_expr(it ast.CallExpr) { node := it g.call_stack << it mut name := g.js_name(it.name) + is_print := name in ['print', 'println', 'eprint', 'eprintln', 'panic'] + if name in parser.builtin_functions { + name = 'builtin__$name' + } print_method := name ret_sym := g.table.get_type_symbol(it.return_type) if it.language == .js && ret_sym.name in v_types && ret_sym.name != 'void' { @@ -324,7 +329,7 @@ fn (mut g JsGen) gen_call_expr(it ast.CallExpr) { .propagate { panicstr := '`optional not set (\${err.val.msg})`' if g.file.mod.name == 'main' && g.fn_decl.name == 'main.main' { - g.writeln('return panic($panicstr)') + g.writeln('return builtin__panic($panicstr)') } else { g.writeln('js_throw(err)') } diff --git a/vlib/v/gen/js/js.v b/vlib/v/gen/js/js.v index 01e2822872..7a5e07c384 100644 --- a/vlib/v/gen/js/js.v +++ b/vlib/v/gen/js/js.v @@ -9,6 +9,7 @@ import v.util.version import v.depgraph import encoding.base64 import v.gen.js.sourcemap +import v.parser struct MutArg { tmp_var string @@ -1101,14 +1102,14 @@ fn (mut g JsGen) gen_assert_stmt(a ast.AssertStmt) { metaname_fail := g.gen_assert_metainfo(a) g.writeln(' g_test_fails++;') g.writeln(' main__cb_assertion_failed($metaname_fail);') - g.writeln(' exit(1);') + g.writeln(' builtin__exit(1);') g.writeln('}') return } g.writeln('} else {') g.inc_indent() - g.writeln('eprintln(new string("$mod_path:${a.pos.line_nr + 1}: FAIL: fn ${g.fn_decl.name}(): assert $s_assertion"));') - g.writeln('exit(1);') + g.writeln('builtin__eprintln(new string("$mod_path:${a.pos.line_nr + 1}: FAIL: fn ${g.fn_decl.name}(): assert $s_assertion"));') + g.writeln('builtin__exit(1);') g.dec_indent() g.writeln('}') } @@ -1440,7 +1441,9 @@ fn (mut g JsGen) gen_method_decl(it ast.FnDecl, typ FnGenType) { name = g.js_name(name) name = g.generic_fn_name(g.table.cur_concrete_types, name, true) - + if name in parser.builtin_functions { + name = 'builtin__$name' + } has_go := fn_has_go(it) if it.is_pub && !it.is_method { g.push_pub_var(name) diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index cf6ef95222..e4180ea59f 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -13,7 +13,7 @@ import v.errors import os import hash.fnv1a -const ( +pub const ( builtin_functions = ['print', 'println', 'eprint', 'eprintln', 'isnil', 'panic', 'exit'] )