func (g *javaGen) genConst(o *types.Const) { // TODO(hyangah): should const names use upper cases + "_"? // TODO(hyangah): check invalid names. jType := g.javaType(o.Type()) val := o.Val().String() switch b := o.Type().(*types.Basic); b.Kind() { case types.Int64, types.UntypedInt: i, exact := constant.Int64Val(o.Val()) if !exact { g.errorf("const value %s for %s cannot be represented as %s", val, o.Name(), jType) return } val = fmt.Sprintf("%dL", i) case types.Float32: f, _ := constant.Float32Val(o.Val()) val = fmt.Sprintf("%gf", f) case types.Float64, types.UntypedFloat: f, _ := constant.Float64Val(o.Val()) if math.IsInf(f, 0) || math.Abs(f) > math.MaxFloat64 { g.errorf("const value %s for %s cannot be represented as %s", val, o.Name(), jType) return } val = fmt.Sprintf("%g", f) } g.Printf("public static final %s %s = %s;\n", g.javaType(o.Type()), o.Name(), val) }
func roundFloat32(x constant.Value) constant.Value { f32, _ := constant.Float32Val(x) f := float64(f32) if !math.IsInf(f, 0) { return constant.MakeFloat64(f) } return nil }
func roundFloat32(x exact.Value) exact.Value { f32, _ := exact.Float32Val(x) f := float64(f32) if !math.IsInf(f, 0) { return exact.MakeFloat64(f) } return nil }
func fitsFloat32(x constant.Value) bool { f32, _ := constant.Float32Val(x) f := float64(f32) return !math.IsInf(f, 0) }
func fitsFloat32(x exact.Value) bool { f32, _ := exact.Float32Val(x) f := float64(f32) return !math.IsInf(f, 0) }