Home | History | Annotate | Download | only in gc

Lines Matching defs:esc

161 // First escfunc, esc and escassign recurse over the ast of each
340 n.Esc = EscNone // until proven otherwise
360 // Node.esc encoding = | escapeReturnEncoding:(width-4) | contentEscapes:1 | escEnum:3
479 n.Esc = EscFuncPlanned
496 escapes[i] = n.Esc
504 if n.Esc != escapes[i] {
509 escapes[i] = n.Esc
527 if n.Esc == EscNone {
540 if fn.Esc != EscFuncPlanned {
543 fn.Esc = EscFuncStarted
566 ln.Esc = EscHeap
568 ln.Esc = EscNone // prime for escflood later
591 // and set it to one of the following two. Then in esc we'll clear it again.
613 Fatalf("esc:label without label: %+v", n)
617 // after escape analysis. in the future, maybe pull label & goto analysis out of walk and put before esc
624 Fatalf("esc:goto without label: %+v", n)
643 e.esc(n, parent)
647 func (e *EscState) esc(n *Node, parent *Node) {
676 if n.Esc != EscHeap && n.Type != nil &&
683 n.Esc = EscHeap
688 e.esc(n.Left, n)
689 e.esc(n.Right, n)
699 fmt.Printf("%v:[%d] %v esc: %v\n", linestr(lineno), e.loopdepth, funcSym(Curfn), n)
843 Fatalf("esc oas2func")
868 Fatalf("esc return list")
1229 // flow are 000, 001, 010, 011 and EEEE is computed Esc bits.
1248 s := fmt.Sprintf("esc:0x%x", mask)
1255 // parsetag decodes an escape analysis tag and returns the esc value.
1257 if !strings.HasPrefix(note, "esc:") {
1368 Fatalf("corrupt esc tag %q or messed up escretval list\n", note)
1404 // 16 bits for Esc allows 6x2bits or 4x3bits or 3x4bits if additional information would be useful.
1449 // This is a bit messier than fortunate, pulled out of esc's big
1520 fn.Name.Defn != nil && fn.Name.Defn.Nbody.Len() != 0 && fn.Name.Param.Ntype != nil && fn.Name.Defn.Esc < EscFuncTagged {
1526 // print("esc local fn: %N\n", fn.Func.Ntype);
1527 if fn.Name.Defn.Esc == EscFuncUnknown || cE.Retval.Len() != 0 {
1579 Fatalf("esc already decorated call %+v\n", call)
1589 // print("esc analyzed fn: %#N (%+T) returning (%+H)\n", fn, fntype, e.nodeEscState(call).Retval);
1624 // The callee has already been analyzed, so its arguments have esc tags.
1629 // This 'noescape' is even stronger than the usual esc == EscNone.
1630 // arg.Esc == EscNone means that arg does not escape the current function.
1816 if funcOutputAndInput(dst, src) && src.Esc&EscMask < EscHeap && dst.Esc != EscHeap {
1830 if src.Esc&EscMask != EscReturn {
1831 src.Esc = EscReturn | src.Esc&EscContentEscapes
1833 src.Esc = escNoteOutputParamFlow(src.Esc, dst.Name.Vargen, level)
1839 if dst.Esc == EscHeap &&
1840 src.Op == ONAME && src.Class == PPARAM && src.Esc&EscMask < EscHeap &&
1842 src.Esc = escMax(EscContentEscapes|src.Esc, EscNone)
1850 leaks = leaks || level.int() <= 0 && dst.Esc&EscMask == EscHeap
1852 osrcesc = src.Esc
1855 if src.Class == PPARAM && (leaks || dstE.Loopdepth < 0) && src.Esc&EscMask < EscHeap {
1857 src.Esc = escMax(EscContentEscapes|src.Esc, EscNone)
1860 if osrcesc != src.Esc {
1870 src.Esc = EscHeap
1899 src.Esc = EscHeap
1900 if Debug['m'] != 0 && osrcesc != src.Esc {
1925 src.Esc = EscHeap
1926 if Debug['m'] != 0 && osrcesc != src.Esc {
1960 src.Esc = EscHeap
1961 if Debug['m'] != 0 && osrcesc != src.Esc {
2036 fn.Esc = EscFuncTagged
2102 switch ln.Esc & EscMask {
2107 ln.Name.Param.Field.Note = mktag(int(ln.Esc))