mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: generate #ifdefs
This commit is contained in:
parent
8d8907b61e
commit
c2ce06eba7
@ -386,7 +386,8 @@ pub:
|
|||||||
|
|
||||||
pub struct CompIf {
|
pub struct CompIf {
|
||||||
pub:
|
pub:
|
||||||
cond Expr
|
// cond Expr
|
||||||
|
val string
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
pos token.Position
|
pos token.Position
|
||||||
mut:
|
mut:
|
||||||
|
@ -530,7 +530,7 @@ fn (c mut Checker) stmt(node ast.Stmt) {
|
|||||||
}
|
}
|
||||||
// ast.Attr {}
|
// ast.Attr {}
|
||||||
ast.CompIf {
|
ast.CompIf {
|
||||||
c.expr(it.cond)
|
// c.expr(it.cond)
|
||||||
c.stmts(it.stmts)
|
c.stmts(it.stmts)
|
||||||
}
|
}
|
||||||
ast.ConstDecl {
|
ast.ConstDecl {
|
||||||
|
@ -268,12 +268,13 @@ fn (g mut Gen) stmt(node ast.Stmt) {
|
|||||||
g.const_decl(it)
|
g.const_decl(it)
|
||||||
}
|
}
|
||||||
ast.CompIf {
|
ast.CompIf {
|
||||||
g.writeln('//#ifdef ')
|
g.writeln('\n#ifdef ' + comp_if_to_ifdef(it.val))
|
||||||
g.expr(it.cond)
|
g.writeln('// #if $it.val')
|
||||||
|
// g.expr(it.cond)
|
||||||
// println('comp if stmts $g.file.path:$it.pos.line_nr')
|
// println('comp if stmts $g.file.path:$it.pos.line_nr')
|
||||||
g.stmts(it.stmts)
|
g.stmts(it.stmts)
|
||||||
// println('done')
|
// println('done')
|
||||||
g.writeln('//#endif')
|
g.writeln('#endif')
|
||||||
}
|
}
|
||||||
ast.DeferStmt {
|
ast.DeferStmt {
|
||||||
g.writeln('// defer')
|
g.writeln('// defer')
|
||||||
@ -1965,3 +1966,64 @@ fn op_to_fn_name(name string) string {
|
|||||||
'bad op $name'}
|
'bad op $name'}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn comp_if_to_ifdef(name string) string {
|
||||||
|
match name {
|
||||||
|
'windows' {
|
||||||
|
return '_WIN32'
|
||||||
|
}
|
||||||
|
'mac' {
|
||||||
|
return '__APPLE__'
|
||||||
|
}
|
||||||
|
'macos' {
|
||||||
|
return '__APPLE__'
|
||||||
|
}
|
||||||
|
'linux' {
|
||||||
|
return '__linux__'
|
||||||
|
}
|
||||||
|
'freebsd' {
|
||||||
|
return '__FreeBSD__'
|
||||||
|
}
|
||||||
|
'openbsd' {
|
||||||
|
return '__OpenBSD__'
|
||||||
|
}
|
||||||
|
'netbsd' {
|
||||||
|
return '__NetBSD__'
|
||||||
|
}
|
||||||
|
'dragonfly' {
|
||||||
|
return '__DragonFly__'
|
||||||
|
}
|
||||||
|
'msvc' {
|
||||||
|
return '_MSC_VER'
|
||||||
|
}
|
||||||
|
'android' {
|
||||||
|
return '__ANDROID__'
|
||||||
|
}
|
||||||
|
'js' {
|
||||||
|
return '_VJS'
|
||||||
|
}
|
||||||
|
'solaris' {
|
||||||
|
return '__sun'
|
||||||
|
}
|
||||||
|
'haiku' {
|
||||||
|
return '__haiku__'
|
||||||
|
}
|
||||||
|
'tinyc' {
|
||||||
|
return 'tinyc'
|
||||||
|
}
|
||||||
|
'debug' {
|
||||||
|
return '_VDEBUG'
|
||||||
|
}
|
||||||
|
'linux_or_macos' {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
'no_bounds_checking' {
|
||||||
|
return 'NO_BOUNDS_CHECK'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
verror('bad os ifdef name "$name"')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// verror('bad os ifdef name "$name"')
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
@ -11,13 +11,14 @@ pub fn (p mut Parser) comp_if() ast.CompIf {
|
|||||||
if p.tok.kind == .not {
|
if p.tok.kind == .not {
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
p.check_name()
|
val := p.check_name()
|
||||||
if p.tok.kind == .question {
|
if p.tok.kind == .question {
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
mut node := ast.CompIf{
|
mut node := ast.CompIf{
|
||||||
stmts: p.parse_block()
|
stmts: p.parse_block()
|
||||||
pos: pos
|
pos: pos
|
||||||
|
val: val
|
||||||
}
|
}
|
||||||
if p.tok.kind == .dollar && p.peek_tok.kind == .key_else {
|
if p.tok.kind == .dollar && p.peek_tok.kind == .key_else {
|
||||||
p.next()
|
p.next()
|
||||||
|
Loading…
Reference in New Issue
Block a user