mirror of
https://github.com/vlang/v.git
synced 2025-08-04 02:07:28 -04:00
checker: improve virtual C consts
This commit is contained in:
parent
4dc9167b60
commit
d87b8c2627
@ -34,6 +34,8 @@ mut:
|
|||||||
sin_zero [8]char
|
sin_zero [8]char
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const C.AF_INET u8
|
||||||
|
|
||||||
pub struct C.sockaddr_un {
|
pub struct C.sockaddr_un {
|
||||||
mut:
|
mut:
|
||||||
sun_len u8
|
sun_len u8
|
||||||
|
@ -4297,8 +4297,7 @@ fn (mut c Checker) ident(mut node ast.Ident) ast.Type {
|
|||||||
if node.name == 'C.NULL' {
|
if node.name == 'C.NULL' {
|
||||||
return ast.voidptr_type
|
return ast.voidptr_type
|
||||||
}
|
}
|
||||||
// TODO remove main. to avoid extra concats
|
if x := c.table.global_scope.find_const(node.name) {
|
||||||
if x := c.table.global_scope.find_const('main.' + node.name) {
|
|
||||||
return x.typ
|
return x.typ
|
||||||
}
|
}
|
||||||
return ast.int_type
|
return ast.int_type
|
||||||
|
@ -309,6 +309,9 @@ fn (mut g Gen) c_const_name(name string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn (mut g Gen) const_decl_init_later(mod string, name string, expr ast.Expr, typ ast.Type, surround_cbr bool) {
|
fn (mut g Gen) const_decl_init_later(mod string, name string, expr ast.Expr, typ ast.Type, surround_cbr bool) {
|
||||||
|
if name.starts_with('C__') {
|
||||||
|
return
|
||||||
|
}
|
||||||
// Initialize more complex consts in `void _vinit/2{}`
|
// Initialize more complex consts in `void _vinit/2{}`
|
||||||
// (C doesn't allow init expressions that can't be resolved at compile time).
|
// (C doesn't allow init expressions that can't be resolved at compile time).
|
||||||
mut styp := g.styp(typ)
|
mut styp := g.styp(typ)
|
||||||
|
@ -2384,7 +2384,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
|||||||
p.error_with_pos('const names cannot contain uppercase letters, use snake_case instead',
|
p.error_with_pos('const names cannot contain uppercase letters, use snake_case instead',
|
||||||
pos)
|
pos)
|
||||||
}
|
}
|
||||||
full_name := p.prepend_mod(name)
|
full_name := if is_virtual_c_const { name } else { p.prepend_mod(name) }
|
||||||
if p.tok.kind == .comma {
|
if p.tok.kind == .comma {
|
||||||
p.error_with_pos('const declaration do not support multiple assign yet', p.tok.pos())
|
p.error_with_pos('const declaration do not support multiple assign yet', p.tok.pos())
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,17 @@
|
|||||||
const C.AF_INET u16
|
import net
|
||||||
|
|
||||||
fn x(n u16) bool {
|
const C.AF_UNIX u16
|
||||||
|
|
||||||
|
fn x16(n u16) bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn xint(n int) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_const() {
|
fn test_const() {
|
||||||
assert x(C.AF_INET) == true
|
assert xint(C.EOF) == true // a random libc const is int by default
|
||||||
|
|
||||||
|
assert x16(C.AF_INET) == true // defined in V's net module
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user