func Oconv(o int, flag int) string {
if (flag&obj.FmtSharp != 0 /*untyped*/) || fmtmode != FDbg {
if o >= 0 && o < len(goopnames) && goopnames[o] != "" {
- var fp string
- fp += goopnames[o]
- return fp
+ return goopnames[o]
}
}
if o >= 0 && o < len(opnames) && opnames[o] != "" {
- var fp string
- fp += opnames[o]
- return fp
+ return opnames[o]
}
- var fp string
- fp += fmt.Sprintf("O-%d", o)
- return fp
+ return fmt.Sprintf("O-%d", o)
}
var classnames = []string{
switch v.Ctype {
case CTINT:
if (flag&obj.FmtSharp != 0 /*untyped*/) || fmtmode == FExp {
- var fp string
- fp += fmt.Sprintf("%v", Bconv(v.U.Xval, obj.FmtSharp))
- return fp
+ return fmt.Sprintf("%v", Bconv(v.U.Xval, obj.FmtSharp))
}
var fp string
fp += fmt.Sprintf("%v", Bconv(v.U.Xval, 0))
case CTRUNE:
x := Mpgetfix(v.U.Xval)
if ' ' <= x && x < 0x80 && x != '\\' && x != '\'' {
- var fp string
- fp += fmt.Sprintf("'%c'", int(x))
- return fp
+ return fmt.Sprintf("'%c'", int(x))
}
if 0 <= x && x < 1<<16 {
- var fp string
- fp += fmt.Sprintf("'\\u%04x'", uint(int(x)))
- return fp
+ return fmt.Sprintf("'\\u%04x'", uint(int(x)))
}
if 0 <= x && x <= utf8.MaxRune {
- var fp string
- fp += fmt.Sprintf("'\\U%08x'", uint64(x))
- return fp
+ return fmt.Sprintf("'\\U%08x'", uint64(x))
}
var fp string
fp += fmt.Sprintf("('\\x00' + %v)", Bconv(v.U.Xval, 0))
case CTFLT:
if (flag&obj.FmtSharp != 0 /*untyped*/) || fmtmode == FExp {
- var fp string
- fp += fmt.Sprintf("%v", Fconv(v.U.Fval, 0))
- return fp
+ return fmt.Sprintf("%v", Fconv(v.U.Fval, 0))
}
var fp string
fp += fmt.Sprintf("%v", Fconv(v.U.Fval, obj.FmtSharp))
case CTCPLX:
if (flag&obj.FmtSharp != 0 /*untyped*/) || fmtmode == FExp {
- var fp string
- fp += fmt.Sprintf("(%v+%vi)", Fconv(&v.U.Cval.Real, 0), Fconv(&v.U.Cval.Imag, 0))
- return fp
+ return fmt.Sprintf("(%v+%vi)", Fconv(&v.U.Cval.Real, 0), Fconv(&v.U.Cval.Imag, 0))
}
if mpcmpfltc(&v.U.Cval.Real, 0) == 0 {
- var fp string
- fp += fmt.Sprintf("%vi", Fconv(&v.U.Cval.Imag, obj.FmtSharp))
- return fp
+ return fmt.Sprintf("%vi", Fconv(&v.U.Cval.Imag, obj.FmtSharp))
}
if mpcmpfltc(&v.U.Cval.Imag, 0) == 0 {
- var fp string
- fp += fmt.Sprintf("%v", Fconv(&v.U.Cval.Real, obj.FmtSharp))
- return fp
+ return fmt.Sprintf("%v", Fconv(&v.U.Cval.Real, obj.FmtSharp))
}
if mpcmpfltc(&v.U.Cval.Imag, 0) < 0 {
- var fp string
- fp += fmt.Sprintf("(%v%vi)", Fconv(&v.U.Cval.Real, obj.FmtSharp), Fconv(&v.U.Cval.Imag, obj.FmtSharp))
- return fp
+ return fmt.Sprintf("(%v%vi)", Fconv(&v.U.Cval.Real, obj.FmtSharp), Fconv(&v.U.Cval.Imag, obj.FmtSharp))
}
var fp string
fp += fmt.Sprintf("(%v+%vi)", Fconv(&v.U.Cval.Real, obj.FmtSharp), Fconv(&v.U.Cval.Imag, obj.FmtSharp))
case CTBOOL:
if v.U.Bval != 0 {
- var fp string
- fp += "true"
- return fp
+ return "true"
}
var fp string
fp += "false"
return fp
}
- var fp string
- fp += fmt.Sprintf("<ctype=%d>", v.Ctype)
- return fp
+ return fmt.Sprintf("<ctype=%d>", v.Ctype)
}
// Fmt "%Z": escaped string literals
func Zconv(sp *Strlit, flag int) string {
if sp == nil {
- var fp string
- fp += "<nil>"
- return fp
+ return "<nil>"
}
// NOTE: Keep in sync with ../ld/go.c:/^Zconv.
// Fmt "%E": etype
func Econv(et int, flag int) string {
if et >= 0 && et < len(etnames) && etnames[et] != "" {
- var fp string
- fp += etnames[et]
- return fp
+ return etnames[et]
}
- var fp string
- fp += fmt.Sprintf("E-%d", et)
- return fp
+ return fmt.Sprintf("E-%d", et)
}
// Fmt "%S": syms
switch fmtmode {
case FErr: // This is for the user
if s.Pkg == localpkg {
- var fp string
- fp += s.Name
- return fp
+ return s.Name
}
// If the name was used by multiple packages, display the full path,
if s.Pkg.Name != "" && Pkglookup(s.Pkg.Name, nil).Npkg > 1 {
- var fp string
- fp += fmt.Sprintf("\"%v\".%s", Zconv(s.Pkg.Path, 0), s.Name)
- return fp
+ return fmt.Sprintf("\"%v\".%s", Zconv(s.Pkg.Path, 0), s.Name)
}
var fp string
fp += fmt.Sprintf("%s.%s", s.Pkg.Name, s.Name)
case FTypeId:
if flag&obj.FmtUnsigned != 0 /*untyped*/ {
- var fp string
- fp += fmt.Sprintf("%s.%s", s.Pkg.Name, s.Name)
- return fp // dcommontype, typehash
+ return fmt.Sprintf("%s.%s", s.Pkg.Name, s.Name) // dcommontype, typehash
}
var fp string
fp += fmt.Sprintf("%s.%s", s.Pkg.Prefix, s.Name)
Fatal("exporting synthetic symbol %s", s.Name)
}
if s.Pkg != builtinpkg {
- var fp string
- fp += fmt.Sprintf("@\"%v\".%s", Zconv(s.Pkg.Path, 0), s.Name)
- return fp
+ return fmt.Sprintf("@\"%v\".%s", Zconv(s.Pkg.Path, 0), s.Name)
}
}
}
- if flag&obj.FmtByte != 0 /*untyped*/ { // FmtByte (hh) implies FmtShort (h)
-
+ if flag&obj.FmtByte != 0 /*untyped*/ {
+ // FmtByte (hh) implies FmtShort (h)
// skip leading "type." in method name
p := s.Name
if i := strings.LastIndex(s.Name, "."); i >= 0 {
// exportname needs to see the name without the prefix too.
if (fmtmode == FExp && !exportname(p)) || fmtmode == FDbg {
- var fp string
- fp += fmt.Sprintf("@\"%v\".%s", Zconv(s.Pkg.Path, 0), p)
- return fp
+ return fmt.Sprintf("@\"%v\".%s", Zconv(s.Pkg.Path, 0), p)
}
- var fp string
- fp += p
- return fp
+ return p
}
- var fp string
- fp += s.Name
- return fp
+ return s.Name
}
var basicnames = []string{
func typefmt(t *Type, flag int) string {
if t == nil {
- var fp string
- fp += "<T>"
- return fp
+ return "<T>"
}
if t == bytetype || t == runetype {
// in %-T mode collapse rune and byte with their originals.
if fmtmode != FTypeId {
- var fp string
- fp += fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtShort))
- return fp
+ return fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtShort))
}
t = Types[t.Etype]
}
if t == errortype {
- var fp string
- fp += "error"
- return fp
+ return "error"
}
// Unless the 'l' flag was specified, if the type has a name, just print that name.
case FTypeId:
if flag&obj.FmtShort != 0 /*untyped*/ {
if t.Vargen != 0 {
- var fp string
- fp += fmt.Sprintf("%v·%d", Sconv(t.Sym, obj.FmtShort), t.Vargen)
- return fp
+ return fmt.Sprintf("%v·%d", Sconv(t.Sym, obj.FmtShort), t.Vargen)
}
- var fp string
- fp += fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtShort))
- return fp
+ return fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtShort))
}
if flag&obj.FmtUnsigned != 0 /*untyped*/ {
- var fp string
- fp += fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtUnsigned))
- return fp
+ return fmt.Sprintf("%v", Sconv(t.Sym, obj.FmtUnsigned))
}
fallthrough
// fallthrough
case FExp:
if t.Sym.Pkg == localpkg && t.Vargen != 0 {
- var fp string
- fp += fmt.Sprintf("%v·%d", Sconv(t.Sym, 0), t.Vargen)
- return fp
+ return fmt.Sprintf("%v·%d", Sconv(t.Sym, 0), t.Vargen)
}
}
- var fp string
- fp += fmt.Sprintf("%v", Sconv(t.Sym, 0))
- return fp
+ return fmt.Sprintf("%v", Sconv(t.Sym, 0))
}
var fp string
}
if n == nil {
- var f string
- f += "<N>"
- return f
+ return "<N>"
}
nprec := opprec[n.Op]
}
if prec > nprec {
- var f string
- f += fmt.Sprintf("(%v)", Nconv(n, 0))
- return f
+ return fmt.Sprintf("(%v)", Nconv(n, 0))
}
switch n.Op {
case OLITERAL: // this is a bit of a mess
if n.Orig != nil && n.Orig != n {
- var f string
- f += exprfmt(n.Orig, prec)
- return f
+ return exprfmt(n.Orig, prec)
}
if fmtmode == FErr && n.Sym != nil {
- var f string
- f += fmt.Sprintf("%v", Sconv(n.Sym, 0))
- return f
+ return fmt.Sprintf("%v", Sconv(n.Sym, 0))
}
if n.Type != nil && n.Type != Types[n.Type.Etype] && n.Type != idealbool && n.Type != idealstring {
// Need parens when type begins with what might
// be misinterpreted as a unary operator: * or <-.
if Isptr[n.Type.Etype] != 0 || (n.Type.Etype == TCHAN && n.Type.Chan == Crecv) {
- var f string
- f += fmt.Sprintf("(%v)(%v)", Tconv(n.Type, 0), Vconv(&n.Val, 0))
- return f
+ return fmt.Sprintf("(%v)(%v)", Tconv(n.Type, 0), Vconv(&n.Val, 0))
} else {
- var f string
- f += fmt.Sprintf("%v(%v)", Tconv(n.Type, 0), Vconv(&n.Val, 0))
- return f
+ return fmt.Sprintf("%v(%v)", Tconv(n.Type, 0), Vconv(&n.Val, 0))
}
}
// _ becomes ~b%d internally; print as _ for export
case ONAME:
if fmtmode == FExp && n.Sym != nil && n.Sym.Name[0] == '~' && n.Sym.Name[1] == 'b' {
- var f string
- f += fmt.Sprintf("_")
- return f
+ return fmt.Sprintf("_")
}
if fmtmode == FExp && n.Sym != nil && !isblank(n) && n.Vargen > 0 {
- var f string
- f += fmt.Sprintf("%v·%d", Sconv(n.Sym, 0), n.Vargen)
- return f
+ return fmt.Sprintf("%v·%d", Sconv(n.Sym, 0), n.Vargen)
}
// Special case: explicit name of func (*T) method(...) is turned into pkg.(*T).method,
// These nodes have the special property that they are names with a left OTYPE and a right ONAME.
if fmtmode == FExp && n.Left != nil && n.Left.Op == OTYPE && n.Right != nil && n.Right.Op == ONAME {
if Isptr[n.Left.Type.Etype] != 0 {
- var f string
- f += fmt.Sprintf("(%v).%v", Tconv(n.Left.Type, 0), Sconv(n.Right.Sym, obj.FmtShort|obj.FmtByte))
- return f
+ return fmt.Sprintf("(%v).%v", Tconv(n.Left.Type, 0), Sconv(n.Right.Sym, obj.FmtShort|obj.FmtByte))
} else {
- var f string
- f += fmt.Sprintf("%v.%v", Tconv(n.Left.Type, 0), Sconv(n.Right.Sym, obj.FmtShort|obj.FmtByte))
- return f
+ return fmt.Sprintf("%v.%v", Tconv(n.Left.Type, 0), Sconv(n.Right.Sym, obj.FmtShort|obj.FmtByte))
}
}
fallthrough
case OTYPE:
if n.Type == nil && n.Sym != nil {
- var f string
- f += fmt.Sprintf("%v", Sconv(n.Sym, 0))
- return f
+ return fmt.Sprintf("%v", Sconv(n.Sym, 0))
}
var f string
f += fmt.Sprintf("%v", Tconv(n.Type, 0))
case OTARRAY:
if n.Left != nil {
- var f string
- f += fmt.Sprintf("[]%v", Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("[]%v", Nconv(n.Left, 0))
}
var f string
f += fmt.Sprintf("[]%v", Nconv(n.Right, 0))
default:
if n.Left != nil && n.Left.Op == OTCHAN && n.Left.Sym == nil && n.Left.Etype == Crecv {
- var f string
- f += fmt.Sprintf("chan (%v)", Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("chan (%v)", Nconv(n.Left, 0))
} else {
- var f string
- f += fmt.Sprintf("chan %v", Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("chan %v", Nconv(n.Left, 0))
}
}
fallthrough
case OCLOSURE:
if fmtmode == FErr {
- var f string
- f += "func literal"
- return f
+ return "func literal"
}
if n.Nbody != nil {
- var f string
- f += fmt.Sprintf("%v { %v }", Tconv(n.Type, 0), Hconv(n.Nbody, 0))
- return f
+ return fmt.Sprintf("%v { %v }", Tconv(n.Type, 0), Hconv(n.Nbody, 0))
}
var f string
f += fmt.Sprintf("%v { %v }", Tconv(n.Type, 0), Hconv(n.Closure.Nbody, 0))
if fmtmode == FErr {
if n.Right != nil && n.Right.Type != nil && n.Implicit == 0 {
if ptrlit {
- var f string
- f += fmt.Sprintf("&%v literal", Tconv(n.Right.Type.Type, 0))
- return f
+ return fmt.Sprintf("&%v literal", Tconv(n.Right.Type.Type, 0))
} else {
- var f string
- f += fmt.Sprintf("%v literal", Tconv(n.Right.Type, 0))
- return f
+ return fmt.Sprintf("%v literal", Tconv(n.Right.Type, 0))
}
}
- var f string
- f += "composite literal"
- return f
+ return "composite literal"
}
if fmtmode == FExp && ptrlit {
// typecheck has overwritten OIND by OTYPE with pointer type.
- var f string
- f += fmt.Sprintf("(&%v{ %v })", Tconv(n.Right.Type.Type, 0), Hconv(n.List, obj.FmtComma))
- return f
+ return fmt.Sprintf("(&%v{ %v })", Tconv(n.Right.Type.Type, 0), Hconv(n.List, obj.FmtComma))
}
var f string
case OPTRLIT:
if fmtmode == FExp && n.Left.Implicit != 0 {
- var f string
- f += fmt.Sprintf("%v", Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("%v", Nconv(n.Left, 0))
}
var f string
f += fmt.Sprintf("&%v", Nconv(n.Left, 0))
case OARRAYLIT,
OMAPLIT:
if fmtmode == FErr {
- var f string
- f += fmt.Sprintf("%v literal", Tconv(n.Type, 0))
- return f
+ return fmt.Sprintf("%v literal", Tconv(n.Type, 0))
}
if fmtmode == FExp && n.Implicit != 0 {
- var f string
- f += fmt.Sprintf("{ %v }", Hconv(n.List, obj.FmtComma))
- return f
+ return fmt.Sprintf("{ %v }", Hconv(n.List, obj.FmtComma))
}
var f string
f += fmt.Sprintf("(%v{ %v })", Tconv(n.Type, 0), Hconv(n.List, obj.FmtComma))
if n.Left != nil && n.Right != nil {
if fmtmode == FExp && n.Left.Type != nil && n.Left.Type.Etype == TFIELD {
// requires special handling of field names
- var f string
- f += fmt.Sprintf("%v:%v", Sconv(n.Left.Sym, obj.FmtShort|obj.FmtByte), Nconv(n.Right, 0))
- return f
+ return fmt.Sprintf("%v:%v", Sconv(n.Left.Sym, obj.FmtShort|obj.FmtByte), Nconv(n.Right, 0))
} else {
- var f string
- f += fmt.Sprintf("%v:%v", Nconv(n.Left, 0), Nconv(n.Right, 0))
- return f
+ return fmt.Sprintf("%v:%v", Nconv(n.Left, 0), Nconv(n.Right, 0))
}
}
if n.Left == nil && n.Right != nil {
- var f string
- f += fmt.Sprintf(":%v", Nconv(n.Right, 0))
- return f
+ return fmt.Sprintf(":%v", Nconv(n.Right, 0))
}
if n.Left != nil && n.Right == nil {
- var f string
- f += fmt.Sprintf("%v:", Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("%v:", Nconv(n.Left, 0))
}
var f string
f += ":"
OSTRARRAYRUNE,
ORUNESTR:
if n.Type == nil || n.Type.Sym == nil {
- var f string
- f += fmt.Sprintf("(%v)(%v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("(%v)(%v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
}
if n.Left != nil {
- var f string
- f += fmt.Sprintf("%v(%v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("%v(%v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
}
var f string
f += fmt.Sprintf("%v(%v)", Tconv(n.Type, 0), Hconv(n.List, obj.FmtComma))
OPRINT,
OPRINTN:
if n.Left != nil {
- var f string
- f += fmt.Sprintf("%v(%v)", Oconv(int(n.Op), obj.FmtSharp), Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("%v(%v)", Oconv(int(n.Op), obj.FmtSharp), Nconv(n.Left, 0))
}
if n.Isddd != 0 {
- var f string
- f += fmt.Sprintf("%v(%v...)", Oconv(int(n.Op), obj.FmtSharp), Hconv(n.List, obj.FmtComma))
- return f
+ return fmt.Sprintf("%v(%v...)", Oconv(int(n.Op), obj.FmtSharp), Hconv(n.List, obj.FmtComma))
}
var f string
f += fmt.Sprintf("%v(%v)", Oconv(int(n.Op), obj.FmtSharp), Hconv(n.List, obj.FmtComma))
OMAKECHAN,
OMAKESLICE:
if n.List != nil { // pre-typecheck
- var f string
- f += fmt.Sprintf("make(%v, %v)", Tconv(n.Type, 0), Hconv(n.List, obj.FmtComma))
- return f
+ return fmt.Sprintf("make(%v, %v)", Tconv(n.Type, 0), Hconv(n.List, obj.FmtComma))
}
if n.Right != nil {
- var f string
- f += fmt.Sprintf("make(%v, %v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0), Nconv(n.Right, 0))
- return f
+ return fmt.Sprintf("make(%v, %v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0), Nconv(n.Right, 0))
}
if n.Left != nil && (n.Op == OMAKESLICE || !isideal(n.Left.Type)) {
- var f string
- f += fmt.Sprintf("make(%v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
- return f
+ return fmt.Sprintf("make(%v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
}
var f string
f += fmt.Sprintf("make(%v)", Tconv(n.Type, 0))
return f
}
- var f string
- f += fmt.Sprintf("<node %v>", Oconv(int(n.Op), 0))
- return f
+ return fmt.Sprintf("<node %v>", Oconv(int(n.Op), 0))
}
func nodefmt(n *Node, flag int) string {
if flag&obj.FmtLong != 0 /*untyped*/ && t != nil {
if t.Etype == TNIL {
- var f string
- f += fmt.Sprintf("nil")
- return f
+ return fmt.Sprintf("nil")
} else {
- var f string
- f += fmt.Sprintf("%v (type %v)", Nconv(n, 0), Tconv(t, 0))
- return f
+ return fmt.Sprintf("%v (type %v)", Nconv(n, 0), Tconv(t, 0))
}
}
return stmtfmt(n)
}
- var f string
- f += exprfmt(n, 0)
- return f
+ return exprfmt(n, 0)
}
var dumpdepth int
}
if s == nil {
- var fp string
- fp += "<S>"
- return fp
+ return "<S>"
}
if s.Name == "_" {
- var fp string
- fp += "_"
- return fp
+ return "_"
}
sf := flag
// 'u' package name, not prefix (FTypeId mode, sticky)
func Tconv(t *Type, flag int) string {
if t == nil {
- var fp string
- fp += "<T>"
- return fp
+ return "<T>"
}
if t.Trecur > 4 {
- var fp string
- fp += "<...>"
- return fp
+ return "<...>"
}
t.Trecur++
// '+h' in debug mode, don't recurse, no multiline output
func Nconv(n *Node, flag int) string {
if n == nil {
- var fp string
- fp += "<N>"
- return fp
+ return "<N>"
}
sf := flag
sm := setfmode(&flag)
// Flags: all those of %N plus ',': separate with comma's instead of semicolons.
func Hconv(l *NodeList, flag int) string {
if l == nil && fmtmode == FDbg {
- var fp string
- fp += "<nil>"
- return fp
+ return "<nil>"
}
sf := flag