mirror of
https://github.com/vlang/v.git
synced 2025-09-12 08:57:09 -04:00
native: use builtin exit function (#24578)
This commit is contained in:
parent
eeeef41030
commit
464e297351
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 = {
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
46
vlib/v/gen/native/tests/builtin.vv
Normal file
46
vlib/v/gen/native/tests/builtin.vv
Normal file
@ -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)
|
4
vlib/v/gen/native/tests/builtin.vv.out
Normal file
4
vlib/v/gen/native/tests/builtin.vv.out
Normal file
@ -0,0 +1,4 @@
|
||||
32
|
||||
32
|
||||
-32
|
||||
-32
|
Loading…
x
Reference in New Issue
Block a user