diff --git a/vlib/v/gen/native/amd64.v b/vlib/v/gen/native/amd64.v index e1ee3c8c1b..29e73895ca 100644 --- a/vlib/v/gen/native/amd64.v +++ b/vlib/v/gen/native/amd64.v @@ -1757,7 +1757,7 @@ fn (mut c Amd64) sar8(r Amd64Register, val u8) { pub fn (mut c Amd64) call_fn(node ast.CallExpr) { name := node.name mut n := name - if !n.contains('.') { + if !n.contains('.') && n !in c.g.fn_addr.keys() { // if the name is in keys, it is a function from builtin n = 'main.${n}' } if node.is_method { diff --git a/vlib/v/gen/native/blacklist.v b/vlib/v/gen/native/blacklist.v index c2674b9ef6..b643724f71 100644 --- a/vlib/v/gen/native/blacklist.v +++ b/vlib/v/gen/native/blacklist.v @@ -29,7 +29,19 @@ already compiling functions: // false: whitelist function // true: blacklist function const whitelist = { - 'main.main': false + 'main.main': false + 'exit': false + 'gc_is_enabled': false + 'int_max': false + 'int_min': false + 'u8.is_alnum': false + 'u8.is_bin_digit': false + 'u8.is_capital': false + 'u8.is_digit': false + 'u8.is_hex_digit': false + 'u8.is_letter': false + 'u8.is_oct_digit': false + 'u8.is_space': false } fn (g &Gen) is_blacklisted(name string, is_builtin bool) bool { diff --git a/vlib/v/gen/native/builtins.v b/vlib/v/gen/native/builtins.v index 9f4196cf47..5b9fc76c54 100644 --- a/vlib/v/gen/native/builtins.v +++ b/vlib/v/gen/native/builtins.v @@ -19,7 +19,7 @@ mut: calls []i64 // call addresses } -pub const inline_builtins = ['assert', 'print', 'eprint', 'println', 'eprintln', 'exit', 'C.syscall'] // classic V builtin functions accessible to the user get inlined +pub const inline_builtins = ['print', 'eprint', 'println', 'eprintln', 'C.syscall'] // classic V builtin functions accessible to the user get inlined pub fn (mut g Gen) init_builtins() { g.builtins = { diff --git a/vlib/v/gen/native/expr.v b/vlib/v/gen/native/expr.v index 6d0c5cb25e..7cc73beb03 100644 --- a/vlib/v/gen/native/expr.v +++ b/vlib/v/gen/native/expr.v @@ -27,9 +27,6 @@ fn (mut g Gen) expr(node ast.Expr) { 'C.syscall' { g.code_gen.gen_syscall(node) } - 'exit' { - g.code_gen.gen_exit(node.args[0].expr) - } 'println', 'print', 'eprintln', 'eprint' { expr := node.args[0].expr typ := node.args[0].typ diff --git a/vlib/v/gen/native/gen.v b/vlib/v/gen/native/gen.v index f88527ae34..8579937929 100644 --- a/vlib/v/gen/native/gen.v +++ b/vlib/v/gen/native/gen.v @@ -1174,6 +1174,7 @@ fn (mut g Gen) println(comment string) { @[noreturn] pub fn (mut g Gen) n_error(s string) { + print_backtrace() util.verror('native error', s) } diff --git a/vlib/v/gen/native/tests/builtin.vv b/vlib/v/gen/native/tests/builtin.vv new file mode 100644 index 0000000000..b2fa2f71ad --- /dev/null +++ b/vlib/v/gen/native/tests/builtin.vv @@ -0,0 +1,46 @@ +/* uncomment when floats are supported +println(f32_abs(32.32)) +println(f32_abs(-32.32)) +println(f32_max(32.32, -32.32)) +println(f32_max(-32.32, 32.32)) +println(f32_min(32.32, -32.32)) +println(f32_min(-32.32, 32.32)) +println(f64_abs(32.32)) +println(f64_abs(-32.32)) +println(f64_max(32.32, -32.32)) +println(f64_max(-32.32, 32.32)) +println(f64_min(32.32, -32.32)) +println(f64_min(-32.32, 32.32)) +*/ +/* uncomment when C variables are working like C.stdout +flush_stderr() +flush_stdout() +*/ + +gc_is_enabled() // not yet enabled so only calling it + +println(int_max(32, -32)) +println(int_max(-32, 32)) +println(int_min(32, -32)) +println(int_min(-32, 32)) + +// print_character(`a`) enable when C vars will work + +assert u8(`a`).is_alnum() +assert !u8(`_`).is_alnum() +assert u8(`0`).is_bin_digit() +assert !u8(`3`).is_bin_digit() +assert u8(`A`).is_capital() +assert !u8(`a`).is_capital() +assert u8(`0`).is_digit() +assert !u8(`a`).is_digit() +assert u8(`A`).is_hex_digit() +assert !u8(`G`).is_hex_digit() +assert u8(`c`).is_letter() +assert !u8(`2`).is_letter() +assert u8(`7`).is_oct_digit() +assert !u8(`8`).is_oct_digit() +assert u8(` `).is_space() +assert !u8(`_`).is_space() + +exit(0) diff --git a/vlib/v/gen/native/tests/builtin.vv.out b/vlib/v/gen/native/tests/builtin.vv.out new file mode 100644 index 0000000000..88ce05a04f --- /dev/null +++ b/vlib/v/gen/native/tests/builtin.vv.out @@ -0,0 +1,4 @@ +32 +32 +-32 +-32