// n must be an integer or rune constant.
func (n *Node) Int64() int64 {
if !Isconst(n, CTINT) {
- Fatalf("Int(%v)", n)
+ Fatalf("Int64(%v)", n)
}
return n.Val().U.(*Mpint).Int64()
}
+// Bool returns n as a bool.
+// n must be a boolean constant.
+func (n *Node) Bool() bool {
+ if !Isconst(n, CTBOOL) {
+ Fatalf("Bool(%v)", n)
+ }
+ return n.Val().U.(bool)
+}
+
// truncate float literal fv to 32-bit or 64-bit precision
// according to type; return truncated value.
func truncfltlit(oldv *Mpflt, t *Type) *Mpflt {
return true
}
+ if n.Op == OIF && Isconst(n.Left, CTBOOL) {
+ var taken Nodes // statements for the branch that is always taken
+ if n.Left.Bool() {
+ taken = n.Nbody // then case
+ } else {
+ taken = n.Rlist // else case
+ }
+ return ishairylist(n.Ninit, budget, reason) || ishairylist(taken, budget, reason)
+ }
+
return ishairy(n.Left, budget, reason) || ishairy(n.Right, budget, reason) ||
ishairylist(n.List, budget, reason) || ishairylist(n.Rlist, budget, reason) ||
ishairylist(n.Ninit, budget, reason) || ishairylist(n.Nbody, budget, reason)