// walkAssign walks an OAS (AssignExpr) or OASOP (AssignOpExpr) node. func walkAssign(init *ir.Nodes, n ir.Node) ir.Node { … } // walkAssignDotType walks an OAS2DOTTYPE node. func walkAssignDotType(n *ir.AssignListStmt, init *ir.Nodes) ir.Node { … } // walkAssignFunc walks an OAS2FUNC node. func walkAssignFunc(init *ir.Nodes, n *ir.AssignListStmt) ir.Node { … } // walkAssignList walks an OAS2 node. func walkAssignList(init *ir.Nodes, n *ir.AssignListStmt) ir.Node { … } // walkAssignMapRead walks an OAS2MAPR node. func walkAssignMapRead(init *ir.Nodes, n *ir.AssignListStmt) ir.Node { … } // walkAssignRecv walks an OAS2RECV node. func walkAssignRecv(init *ir.Nodes, n *ir.AssignListStmt) ir.Node { … } // walkReturn walks an ORETURN node. func walkReturn(n *ir.ReturnStmt) ir.Node { … } // check assign type list to // an expression list. called in // // expr-list = func() func ascompatet(nl ir.Nodes, nr *types.Type) []ir.Node { … } // check assign expression list to // an expression list. called in // // expr-list = expr-list func ascompatee(op ir.Op, nl, nr []ir.Node) []ir.Node { … } // readsMemory reports whether the evaluation n directly reads from // memory that might be written to indirectly. func readsMemory(n ir.Node) bool { … } // expand append(l1, l2...) to // // init { // s := l1 // newLen := s.len + l2.len // // Compare as uint so growslice can panic on overflow. // if uint(newLen) <= uint(s.cap) { // s = s[:newLen] // } else { // s = growslice(s.ptr, s.len, s.cap, l2.len, T) // } // memmove(&s[s.len-l2.len], &l2[0], l2.len*sizeof(T)) // } // s // // l2 is allowed to be a string. func appendSlice(n *ir.CallExpr, init *ir.Nodes) ir.Node { … } // isAppendOfMake reports whether n is of the form append(x, make([]T, y)...). // isAppendOfMake assumes n has already been typechecked. func isAppendOfMake(n ir.Node) bool { … } func extendSlice(n *ir.CallExpr, init *ir.Nodes) ir.Node { … }