js: prefix V builtin functions, so they do not overlap with JS (#11483)

pull/11489/head
playX 2021-09-13 11:44:55 +03:00 committed by GitHub
parent 480fe8041a
commit b9dfc89aa9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 8 deletions

View File

@ -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)')
}

View File

@ -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)

View File

@ -13,7 +13,7 @@ import v.errors
import os
import hash.fnv1a
const (
pub const (
builtin_functions = ['print', 'println', 'eprint', 'eprintln', 'isnil', 'panic', 'exit']
)