mirror of
https://github.com/golang/go
synced 2024-11-23 15:10:12 -07:00
cmd/compiler/internal/gc: remove flag argument from fconv (cleanup)
The fconv flag arguments were 0, FmtSharp, and FmtSharp|FmtSign. The 0 value was used for binary representation only, which was readily available via Mpflt.String. Otherwise, FmtSharp was always passed. FmtSign was used to print the '+' sign in case of a positive number and only needed for complex number formatting. Instead implemented cconv and handled it there. Change-Id: I1f77282f995be9cfda05efb71a0e027836a9da26 Reviewed-on: https://go-review.googlesource.com/136195 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
e82d152e66
commit
919d5aee22
@ -476,7 +476,7 @@ func toflt(v Val) Val {
|
||||
f := newMpflt()
|
||||
f.Set(&u.Real)
|
||||
if u.Imag.CmpFloat64(0) != 0 {
|
||||
yyerror("constant %v%vi truncated to real", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp|FmtSign))
|
||||
yyerror("constant %v truncated to real", cconv(u))
|
||||
}
|
||||
v.U = f
|
||||
}
|
||||
@ -509,11 +509,11 @@ func toint(v Val) Val {
|
||||
// value from the error message.
|
||||
// (See issue #11371).
|
||||
var t big.Float
|
||||
t.Parse(fconv(u, FmtSharp), 10)
|
||||
t.Parse(fconv(u), 10)
|
||||
if t.IsInt() {
|
||||
yyerror("constant truncated to integer")
|
||||
} else {
|
||||
yyerror("constant %v truncated to integer", fconv(u, FmtSharp))
|
||||
yyerror("constant %v truncated to integer", fconv(u))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -522,7 +522,7 @@ func toint(v Val) Val {
|
||||
case *Mpcplx:
|
||||
i := new(Mpint)
|
||||
if !i.SetFloat(&u.Real) || u.Imag.CmpFloat64(0) != 0 {
|
||||
yyerror("constant %v%vi truncated to integer", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp|FmtSign))
|
||||
yyerror("constant %v truncated to integer", cconv(u))
|
||||
}
|
||||
|
||||
v.U = i
|
||||
|
@ -537,10 +537,10 @@ func (v Val) vconv(s fmt.State, flag FmtFlag) {
|
||||
|
||||
case *Mpflt:
|
||||
if flag&FmtSharp != 0 {
|
||||
fmt.Fprint(s, fconv(u, 0))
|
||||
fmt.Fprint(s, u.String())
|
||||
return
|
||||
}
|
||||
fmt.Fprint(s, fconv(u, FmtSharp))
|
||||
fmt.Fprint(s, fconv(u))
|
||||
return
|
||||
|
||||
case *Mpcplx:
|
||||
@ -549,16 +549,13 @@ func (v Val) vconv(s fmt.State, flag FmtFlag) {
|
||||
fmt.Fprintf(s, "(%v+%vi)", &u.Real, &u.Imag)
|
||||
|
||||
case v.U.(*Mpcplx).Real.CmpFloat64(0) == 0:
|
||||
fmt.Fprintf(s, "%vi", fconv(&u.Imag, FmtSharp))
|
||||
fmt.Fprintf(s, "%vi", fconv(&u.Imag))
|
||||
|
||||
case v.U.(*Mpcplx).Imag.CmpFloat64(0) == 0:
|
||||
fmt.Fprint(s, fconv(&u.Real, FmtSharp))
|
||||
|
||||
case v.U.(*Mpcplx).Imag.CmpFloat64(0) < 0:
|
||||
fmt.Fprintf(s, "(%v%vi)", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp))
|
||||
fmt.Fprint(s, fconv(&u.Real))
|
||||
|
||||
default:
|
||||
fmt.Fprintf(s, "(%v+%vi)", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp))
|
||||
fmt.Fprintf(s, "(%v)", cconv(u))
|
||||
}
|
||||
|
||||
case string:
|
||||
|
@ -201,24 +201,16 @@ func (a *Mpflt) SetString(as string) {
|
||||
}
|
||||
|
||||
func (f *Mpflt) String() string {
|
||||
return fconv(f, 0)
|
||||
return f.Val.Text('b', 0)
|
||||
}
|
||||
|
||||
func fconv(fvp *Mpflt, flag FmtFlag) string {
|
||||
if flag&FmtSharp == 0 {
|
||||
return fvp.Val.Text('b', 0)
|
||||
}
|
||||
|
||||
// use decimal format for error messages
|
||||
|
||||
func fconv(fvp *Mpflt) string {
|
||||
// determine sign
|
||||
sign := ""
|
||||
f := &fvp.Val
|
||||
var sign string
|
||||
if f.Sign() < 0 {
|
||||
sign = "-"
|
||||
f = new(big.Float).Abs(f)
|
||||
} else if flag&FmtSign != 0 {
|
||||
sign = "+"
|
||||
}
|
||||
|
||||
// Don't try to convert infinities (will not terminate).
|
||||
@ -334,3 +326,12 @@ func (v *Mpcplx) Div(rv *Mpcplx) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func cconv(v *Mpcplx) string {
|
||||
re := fconv(&v.Real)
|
||||
im := fconv(&v.Imag)
|
||||
if im[0] == '-' {
|
||||
return re + im + "i"
|
||||
}
|
||||
return re + "+" + im + "i"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user