mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
ast,parser,cgen: add a new ast.FnDecl field is_c_extern
, set it during parsing, to be available in markused and checker too
This commit is contained in:
parent
c4aaa2ef4d
commit
b1142548b9
4 changed files with 19 additions and 1 deletions
|
@ -546,9 +546,12 @@ fn (t Tree) fn_decl(node ast.FnDecl) &Node {
|
|||
mut obj := new_object()
|
||||
obj.add_terse('ast_type', t.string_node('FnDecl'))
|
||||
obj.add_terse('name', t.string_node(node.name))
|
||||
obj.add_terse('short_name', t.string_node(node.short_name))
|
||||
obj.add_terse('mod', t.string_node(node.mod))
|
||||
obj.add_terse('is_deprecated', t.bool_node(node.is_deprecated))
|
||||
obj.add_terse('is_pub', t.bool_node(node.is_pub))
|
||||
obj.add_terse('is_c_variadic', t.bool_node(node.is_c_variadic))
|
||||
obj.add_terse('is_c_extern', t.bool_node(node.is_c_extern))
|
||||
obj.add_terse('is_variadic', t.bool_node(node.is_variadic))
|
||||
obj.add('is_anon', t.bool_node(node.is_anon))
|
||||
obj.add_terse('is_noreturn', t.bool_node(node.is_noreturn))
|
||||
|
@ -559,17 +562,23 @@ fn (t Tree) fn_decl(node ast.FnDecl) &Node {
|
|||
obj.add_terse('is_exported', t.bool_node(node.is_exported))
|
||||
obj.add('is_keep_alive', t.bool_node(node.is_keep_alive))
|
||||
obj.add_terse('is_unsafe', t.bool_node(node.is_unsafe))
|
||||
obj.add_terse('is_markused', t.bool_node(node.is_markused))
|
||||
obj.add_terse('is_file_translated', t.bool_node(node.is_file_translated))
|
||||
obj.add_terse('receiver', t.struct_field(node.receiver))
|
||||
obj.add('receiver_pos', t.pos(node.receiver_pos))
|
||||
obj.add_terse('is_method', t.bool_node(node.is_method))
|
||||
obj.add_terse('is_static_type_method', t.bool_node(node.is_static_type_method))
|
||||
obj.add('method_type_pos', t.pos(node.method_type_pos))
|
||||
obj.add('method_idx', t.number_node(node.method_idx))
|
||||
obj.add_terse('rec_mut', t.bool_node(node.rec_mut))
|
||||
obj.add_terse('has_prev_newline', t.bool_node(node.has_prev_newline))
|
||||
obj.add_terse('has_break_line', t.bool_node(node.has_break_line))
|
||||
obj.add('rec_share', t.enum_node(node.rec_share))
|
||||
obj.add_terse('language', t.enum_node(node.language))
|
||||
obj.add('file_mode', t.enum_node(node.file_mode))
|
||||
obj.add('no_body', t.bool_node(node.no_body))
|
||||
obj.add('is_builtin', t.bool_node(node.is_builtin))
|
||||
obj.add('file', t.string_node(node.file))
|
||||
obj.add('is_direct_arr', t.bool_node(node.is_direct_arr))
|
||||
obj.add('ctdefine_idx', t.number_node(node.ctdefine_idx))
|
||||
obj.add('pos', t.pos(node.pos))
|
||||
|
|
|
@ -560,6 +560,7 @@ pub:
|
|||
is_deprecated bool
|
||||
is_pub bool
|
||||
is_c_variadic bool
|
||||
is_c_extern bool
|
||||
is_variadic bool
|
||||
is_anon bool
|
||||
is_noreturn bool // true, when @[noreturn] is used on a fn
|
||||
|
|
|
@ -10,6 +10,9 @@ import v.util
|
|||
const c_fn_name_escape_seq = ['[', '_T_', ']', '']
|
||||
|
||||
fn (mut g Gen) is_used_by_main(node ast.FnDecl) bool {
|
||||
if node.is_c_extern {
|
||||
return true
|
||||
}
|
||||
mut is_used_by_main := true
|
||||
if g.pref.skip_unused {
|
||||
fkey := node.fkey()
|
||||
|
@ -71,7 +74,7 @@ fn (mut g Gen) fn_decl(node ast.FnDecl) {
|
|||
defer {
|
||||
g.inside_c_extern = old_inside_c_extern
|
||||
}
|
||||
if node.language == .c && node.attrs.contains('c_extern') {
|
||||
if node.language == .c && node.is_c_extern {
|
||||
g.inside_c_extern = true
|
||||
}
|
||||
|
||||
|
|
|
@ -196,6 +196,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
|||
mut is_noreturn := false
|
||||
mut is_ctor_new := false
|
||||
mut is_c2v_variadic := false
|
||||
mut is_c_extern := false
|
||||
mut is_markused := false
|
||||
mut is_expand_simple_interpolation := false
|
||||
mut comments := []ast.Comment{}
|
||||
|
@ -237,6 +238,9 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
|||
'markused' {
|
||||
is_markused = true
|
||||
}
|
||||
'c_extern' {
|
||||
is_c_extern = true
|
||||
}
|
||||
'windows_stdcall' {
|
||||
p.note_with_pos('the tag [windows_stdcall] has been deprecated, it will be an error after 2022-06-01, use `[callconv: stdcall]` instead',
|
||||
p.tok.pos())
|
||||
|
@ -662,6 +666,7 @@ run them via `v file.v` instead',
|
|||
is_pub: is_pub
|
||||
is_variadic: is_variadic
|
||||
is_c_variadic: is_c_variadic
|
||||
is_c_extern: is_c_extern
|
||||
is_main: is_main
|
||||
is_test: is_test
|
||||
is_keep_alive: is_keep_alive
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue