return lookupN("init.", renameinit_initgen)
}
-// hand-craft the following initialization code
-// var initdone· uint8 (1)
-// func init() { (2)
-// if initdone· > 1 { (3)
-// return (3a)
-// }
-// if initdone· == 1 { (4)
-// throw() (4a)
-// }
-// initdone· = 1 (5)
-// // over all matching imported symbols
-// <pkg>.init() (6)
-// { <init stmts> } (7)
-// init.<n>() // if any (8)
-// initdone· = 2 (9)
-// return (10)
-// }
+// anyinit reports whether there any interesting init statements.
func anyinit(n []*Node) bool {
- // are there any interesting init statements
for _, ln := range n {
switch ln.Op {
case ODCLFUNC, ODCLCONST, ODCLTYPE, OEMPTY:
- break
-
case OAS:
- if isblank(ln.Left) && candiscard(ln.Right) {
- break
+ if !isblank(ln.Left) || !candiscard(ln.Right) {
+ return true
}
- fallthrough
default:
return true
}
}
// is there an explicit init function
- s := lookup("init.1")
-
- if s.Def != nil {
+ if s := lookup("init.1"); s.Def != nil {
return true
}
return false
}
+// fninit hand-crafts package initialization code.
+//
+// var initdone· uint8 (1)
+// func init() { (2)
+// if initdone· > 1 { (3)
+// return (3a)
+// }
+// if initdone· == 1 { (4)
+// throw() (4a)
+// }
+// initdone· = 1 (5)
+// // over all matching imported symbols
+// <pkg>.init() (6)
+// { <init stmts> } (7)
+// init.<n>() // if any (8)
+// initdone· = 2 (9)
+// return (10)
+// }
func fninit(n []*Node) {
lineno = autogeneratedPos
nf := initfix(n)