v2 / vlib / v / build_constraint / evaluating.v
44 lines · 36 sloc · 742 bytes · 8e35f4d9848f7ad35d857a187dddbfd2eca5e19d
Raw
1module build_constraint
2
3// evaluating the AST nodes, in the given environment
4fn (b BExpr) eval(env &Environment) !bool {
5 return b.expr.eval(env)
6}
7
8fn (b BOr) eval(env &Environment) !bool {
9 for e in b.exprs {
10 if e.eval(env)! {
11 return true
12 }
13 }
14 return false
15}
16
17fn (b BAnd) eval(env &Environment) !bool {
18 for e in b.exprs {
19 if !e.eval(env)! {
20 return false
21 }
22 }
23 return true
24}
25
26fn (b BUnary) eval(env &Environment) !bool {
27 match b {
28 BNot, BExpr, BFact, BDefine { return b.eval(env)! }
29 }
30
31 return false
32}
33
34fn (b BNot) eval(env &Environment) !bool {
35 return !b.expr.eval(env)!
36}
37
38fn (b BFact) eval(env &Environment) !bool {
39 return env.is_fact(b)
40}
41
42fn (b BDefine) eval(env &Environment) !bool {
43 return env.is_define(b)
44}
45