mirror of
https://github.com/vlang/v.git
synced 2025-09-14 18:06:48 -04:00
parent
1345eac570
commit
c1df71abcc
@ -742,7 +742,15 @@ fn (mut c Checker) comptime_if_cond(mut cond ast.Expr, pos token.Pos) ComptimeBr
|
||||
should_record_ident = true
|
||||
is_user_ident = true
|
||||
ident_name = cond.expr.name
|
||||
return if cond.expr.name in c.pref.compile_defines_all { .eval } else { .skip }
|
||||
return if cond.expr.name in c.pref.compile_defines {
|
||||
.eval
|
||||
} else {
|
||||
if cond.expr.name in c.pref.compile_defines_all {
|
||||
ComptimeBranchSkipState.unknown
|
||||
} else {
|
||||
ComptimeBranchSkipState.skip
|
||||
}
|
||||
}
|
||||
} else {
|
||||
c.error('invalid `\$if` condition', cond.pos)
|
||||
}
|
||||
|
@ -511,12 +511,17 @@ fn (mut g Gen) comptime_if_cond(cond ast.Expr, pkg_exist bool) (bool, bool) {
|
||||
return is_cond_true, false
|
||||
}
|
||||
ast.PostfixExpr {
|
||||
ifdef := g.comptime_if_to_ifdef((cond.expr as ast.Ident).name, true) or {
|
||||
dname := (cond.expr as ast.Ident).name
|
||||
ifdef := g.comptime_if_to_ifdef(dname, true) or {
|
||||
verror(err.str())
|
||||
return false, true
|
||||
}
|
||||
g.write('defined(${ifdef})')
|
||||
return true, false
|
||||
if dname in g.pref.compile_defines_all && dname !in g.pref.compile_defines {
|
||||
return false, true
|
||||
} else {
|
||||
return true, false
|
||||
}
|
||||
}
|
||||
ast.InfixExpr {
|
||||
match cond.op {
|
||||
|
2
vlib/v/gen/c/testdata/if_define_check_not_set.out
vendored
Normal file
2
vlib/v/gen/c/testdata/if_define_check_not_set.out
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
some_define was not passed
|
||||
|
12
vlib/v/gen/c/testdata/if_define_check_not_set.vv
vendored
Normal file
12
vlib/v/gen/c/testdata/if_define_check_not_set.vv
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
module main
|
||||
|
||||
// vtest vflags: -d some_define=
|
||||
|
||||
fn main() {
|
||||
$if some_define ? {
|
||||
println('some_define was passed')
|
||||
} $else {
|
||||
println('some_define was not passed')
|
||||
}
|
||||
println($d('some_define', 'unknown'))
|
||||
}
|
2
vlib/v/gen/c/testdata/if_define_check_set.out
vendored
Normal file
2
vlib/v/gen/c/testdata/if_define_check_set.out
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
some_define was passed
|
||||
true
|
12
vlib/v/gen/c/testdata/if_define_check_set.vv
vendored
Normal file
12
vlib/v/gen/c/testdata/if_define_check_set.vv
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
module main
|
||||
|
||||
// vtest vflags: -d some_define
|
||||
|
||||
fn main() {
|
||||
$if some_define ? {
|
||||
println('some_define was passed')
|
||||
} $else {
|
||||
println('some_define was not passed')
|
||||
}
|
||||
println($d('some_define', 'unknown'))
|
||||
}
|
@ -438,6 +438,7 @@ pub fn parse_args_and_show_errors(known_external_commands []string, args []strin
|
||||
'-nofloat' {
|
||||
res.nofloat = true
|
||||
res.compile_defines_all << 'nofloat' // so that `$if nofloat? {` works
|
||||
res.compile_defines << 'nofloat'
|
||||
}
|
||||
'-fast-math' {
|
||||
res.fast_math = true
|
||||
@ -1228,11 +1229,10 @@ fn (mut prefs Preferences) parse_define(define string) {
|
||||
prefs.compile_values[dname] = dvalue
|
||||
prefs.compile_defines_all << dname
|
||||
match dvalue {
|
||||
'0' {}
|
||||
'1' {
|
||||
'' {}
|
||||
else {
|
||||
prefs.compile_defines << dname
|
||||
}
|
||||
else {}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user