Skip to content

Commit 464e297

Browse files
authored
native: use builtin exit function (#24578)
1 parent eeeef41 commit 464e297

File tree

7 files changed

+66
-6
lines changed

7 files changed

+66
-6
lines changed

vlib/v/gen/native/amd64.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1757,7 +1757,7 @@ fn (mut c Amd64) sar8(r Amd64Register, val u8) {
17571757
pub fn (mut c Amd64) call_fn(node ast.CallExpr) {
17581758
name := node.name
17591759
mut n := name
1760-
if !n.contains('.') {
1760+
if !n.contains('.') && n !in c.g.fn_addr.keys() { // if the name is in keys, it is a function from builtin
17611761
n = 'main.${n}'
17621762
}
17631763
if node.is_method {

vlib/v/gen/native/blacklist.v

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,19 @@ already compiling functions:
2929
// false: whitelist function
3030
// true: blacklist function
3131
const whitelist = {
32-
'main.main': false
32+
'main.main': false
33+
'exit': false
34+
'gc_is_enabled': false
35+
'int_max': false
36+
'int_min': false
37+
'u8.is_alnum': false
38+
'u8.is_bin_digit': false
39+
'u8.is_capital': false
40+
'u8.is_digit': false
41+
'u8.is_hex_digit': false
42+
'u8.is_letter': false
43+
'u8.is_oct_digit': false
44+
'u8.is_space': false
3345
}
3446

3547
fn (g &Gen) is_blacklisted(name string, is_builtin bool) bool {

vlib/v/gen/native/builtins.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mut:
1919
calls []i64 // call addresses
2020
}
2121

22-
pub const inline_builtins = ['assert', 'print', 'eprint', 'println', 'eprintln', 'exit', 'C.syscall'] // classic V builtin functions accessible to the user get inlined
22+
pub const inline_builtins = ['print', 'eprint', 'println', 'eprintln', 'C.syscall'] // classic V builtin functions accessible to the user get inlined
2323

2424
pub fn (mut g Gen) init_builtins() {
2525
g.builtins = {

vlib/v/gen/native/expr.v

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ fn (mut g Gen) expr(node ast.Expr) {
2727
'C.syscall' {
2828
g.code_gen.gen_syscall(node)
2929
}
30-
'exit' {
31-
g.code_gen.gen_exit(node.args[0].expr)
32-
}
3330
'println', 'print', 'eprintln', 'eprint' {
3431
expr := node.args[0].expr
3532
typ := node.args[0].typ

vlib/v/gen/native/gen.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,7 @@ fn (mut g Gen) println(comment string) {
11741174

11751175
@[noreturn]
11761176
pub fn (mut g Gen) n_error(s string) {
1177+
print_backtrace()
11771178
util.verror('native error', s)
11781179
}
11791180

vlib/v/gen/native/tests/builtin.vv

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* uncomment when floats are supported
2+
println(f32_abs(32.32))
3+
println(f32_abs(-32.32))
4+
println(f32_max(32.32, -32.32))
5+
println(f32_max(-32.32, 32.32))
6+
println(f32_min(32.32, -32.32))
7+
println(f32_min(-32.32, 32.32))
8+
println(f64_abs(32.32))
9+
println(f64_abs(-32.32))
10+
println(f64_max(32.32, -32.32))
11+
println(f64_max(-32.32, 32.32))
12+
println(f64_min(32.32, -32.32))
13+
println(f64_min(-32.32, 32.32))
14+
*/
15+
/* uncomment when C variables are working like C.stdout
16+
flush_stderr()
17+
flush_stdout()
18+
*/
19+
20+
gc_is_enabled() // not yet enabled so only calling it
21+
22+
println(int_max(32, -32))
23+
println(int_max(-32, 32))
24+
println(int_min(32, -32))
25+
println(int_min(-32, 32))
26+
27+
// print_character(`a`) enable when C vars will work
28+
29+
assert u8(`a`).is_alnum()
30+
assert !u8(`_`).is_alnum()
31+
assert u8(`0`).is_bin_digit()
32+
assert !u8(`3`).is_bin_digit()
33+
assert u8(`A`).is_capital()
34+
assert !u8(`a`).is_capital()
35+
assert u8(`0`).is_digit()
36+
assert !u8(`a`).is_digit()
37+
assert u8(`A`).is_hex_digit()
38+
assert !u8(`G`).is_hex_digit()
39+
assert u8(`c`).is_letter()
40+
assert !u8(`2`).is_letter()
41+
assert u8(`7`).is_oct_digit()
42+
assert !u8(`8`).is_oct_digit()
43+
assert u8(` `).is_space()
44+
assert !u8(`_`).is_space()
45+
46+
exit(0)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
32
2+
32
3+
-32
4+
-32

0 commit comments

Comments
 (0)