mirror of
https://github.com/vlang/v.git
synced 2025-09-13 17:36:52 -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) {
|
pub fn (mut c Amd64) call_fn(node ast.CallExpr) {
|
||||||
name := node.name
|
name := node.name
|
||||||
mut n := 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}'
|
n = 'main.${n}'
|
||||||
}
|
}
|
||||||
if node.is_method {
|
if node.is_method {
|
||||||
|
@ -29,7 +29,19 @@ already compiling functions:
|
|||||||
// false: whitelist function
|
// false: whitelist function
|
||||||
// true: blacklist function
|
// true: blacklist function
|
||||||
const whitelist = {
|
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 {
|
fn (g &Gen) is_blacklisted(name string, is_builtin bool) bool {
|
||||||
|
@ -19,7 +19,7 @@ mut:
|
|||||||
calls []i64 // call addresses
|
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() {
|
pub fn (mut g Gen) init_builtins() {
|
||||||
g.builtins = {
|
g.builtins = {
|
||||||
|
@ -27,9 +27,6 @@ fn (mut g Gen) expr(node ast.Expr) {
|
|||||||
'C.syscall' {
|
'C.syscall' {
|
||||||
g.code_gen.gen_syscall(node)
|
g.code_gen.gen_syscall(node)
|
||||||
}
|
}
|
||||||
'exit' {
|
|
||||||
g.code_gen.gen_exit(node.args[0].expr)
|
|
||||||
}
|
|
||||||
'println', 'print', 'eprintln', 'eprint' {
|
'println', 'print', 'eprintln', 'eprint' {
|
||||||
expr := node.args[0].expr
|
expr := node.args[0].expr
|
||||||
typ := node.args[0].typ
|
typ := node.args[0].typ
|
||||||
|
@ -1174,6 +1174,7 @@ fn (mut g Gen) println(comment string) {
|
|||||||
|
|
||||||
@[noreturn]
|
@[noreturn]
|
||||||
pub fn (mut g Gen) n_error(s string) {
|
pub fn (mut g Gen) n_error(s string) {
|
||||||
|
print_backtrace()
|
||||||
util.verror('native error', s)
|
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