diff options
Diffstat (limited to 'src/go/types/errors.go')
-rw-r--r-- | src/go/types/errors.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/go/types/errors.go b/src/go/types/errors.go index 2263106417..933de93d85 100644 --- a/src/go/types/errors.go +++ b/src/go/types/errors.go @@ -63,22 +63,28 @@ func (check *Checker) markImports(pkg *Package) { } func (check *Checker) sprintf(format string, args ...interface{}) string { + return sprintf(check.fset, check.qualifier, format, args...) +} + +func sprintf(fset *token.FileSet, qf Qualifier, format string, args ...interface{}) string { for i, arg := range args { switch a := arg.(type) { case nil: arg = "<nil>" case operand: - panic("internal error: should always pass *operand") + panic("got operand instead of *operand") case *operand: - arg = operandString(a, check.qualifier) + arg = operandString(a, qf) case token.Pos: - arg = check.fset.Position(a).String() + if fset != nil { + arg = fset.Position(a).String() + } case ast.Expr: arg = ExprString(a) case Object: - arg = ObjectString(a, check.qualifier) + arg = ObjectString(a, qf) case Type: - arg = TypeString(a, check.qualifier) + arg = TypeString(a, qf) } args[i] = arg } @@ -236,7 +242,7 @@ func (s atPos) Pos() token.Pos { func spanOf(at positioner) posSpan { switch x := at.(type) { case nil: - panic("internal error: nil") + panic("nil positioner") case posSpan: return x case ast.Node: |