Fix handling of +/-inf defaults in TS/rust/go/dart codegen (#7588)

+/-inf were not being handled, and so invalid typescript was being
generated when a float/double had an infinite default value. NaN was
being handled correctly.

Co-authored-by: Derek Bailey <derekbailey@google.com>
Co-authored-by: Casper <casperneo@uchicago.edu>
This commit is contained in:
James Kuszmaul
2022-11-08 10:59:46 -08:00
committed by GitHub
parent 001adf782d
commit 8aa8b9139e
41 changed files with 8217 additions and 4647 deletions

View File

@@ -3,6 +3,8 @@
package Example
import (
"math"
flatbuffers "github.com/google/flatbuffers/go"
MyGame "MyGame"
@@ -60,6 +62,14 @@ type MonsterT struct {
NativeInline *TestT `json:"native_inline"`
LongEnumNonEnumDefault LongEnum `json:"long_enum_non_enum_default"`
LongEnumNormalDefault LongEnum `json:"long_enum_normal_default"`
NanDefault float32 `json:"nan_default"`
InfDefault float32 `json:"inf_default"`
PositiveInfDefault float32 `json:"positive_inf_default"`
InfinityDefault float32 `json:"infinity_default"`
PositiveInfinityDefault float32 `json:"positive_infinity_default"`
NegativeInfDefault float32 `json:"negative_inf_default"`
NegativeInfinityDefault float32 `json:"negative_infinity_default"`
DoubleInfDefault float64 `json:"double_inf_default"`
}
func (t *MonsterT) Pack(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
@@ -320,6 +330,14 @@ func (t *MonsterT) Pack(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
MonsterAddNativeInline(builder, nativeInlineOffset)
MonsterAddLongEnumNonEnumDefault(builder, t.LongEnumNonEnumDefault)
MonsterAddLongEnumNormalDefault(builder, t.LongEnumNormalDefault)
MonsterAddNanDefault(builder, t.NanDefault)
MonsterAddInfDefault(builder, t.InfDefault)
MonsterAddPositiveInfDefault(builder, t.PositiveInfDefault)
MonsterAddInfinityDefault(builder, t.InfinityDefault)
MonsterAddPositiveInfinityDefault(builder, t.PositiveInfinityDefault)
MonsterAddNegativeInfDefault(builder, t.NegativeInfDefault)
MonsterAddNegativeInfinityDefault(builder, t.NegativeInfinityDefault)
MonsterAddDoubleInfDefault(builder, t.DoubleInfDefault)
return MonsterEnd(builder)
}
@@ -461,6 +479,14 @@ func (rcv *Monster) UnPackTo(t *MonsterT) {
t.NativeInline = rcv.NativeInline(nil).UnPack()
t.LongEnumNonEnumDefault = rcv.LongEnumNonEnumDefault()
t.LongEnumNormalDefault = rcv.LongEnumNormalDefault()
t.NanDefault = rcv.NanDefault()
t.InfDefault = rcv.InfDefault()
t.PositiveInfDefault = rcv.PositiveInfDefault()
t.InfinityDefault = rcv.InfinityDefault()
t.PositiveInfinityDefault = rcv.PositiveInfinityDefault()
t.NegativeInfDefault = rcv.NegativeInfDefault()
t.NegativeInfinityDefault = rcv.NegativeInfinityDefault()
t.DoubleInfDefault = rcv.DoubleInfDefault()
}
func (rcv *Monster) UnPack() *MonsterT {
@@ -1386,8 +1412,104 @@ func (rcv *Monster) MutateLongEnumNormalDefault(n LongEnum) bool {
return rcv._tab.MutateUint64Slot(110, uint64(n))
}
func (rcv *Monster) NanDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(112))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.NaN())
}
func (rcv *Monster) MutateNanDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(112, n)
}
func (rcv *Monster) InfDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(114))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(1))
}
func (rcv *Monster) MutateInfDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(114, n)
}
func (rcv *Monster) PositiveInfDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(116))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(1))
}
func (rcv *Monster) MutatePositiveInfDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(116, n)
}
func (rcv *Monster) InfinityDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(118))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(1))
}
func (rcv *Monster) MutateInfinityDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(118, n)
}
func (rcv *Monster) PositiveInfinityDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(120))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(1))
}
func (rcv *Monster) MutatePositiveInfinityDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(120, n)
}
func (rcv *Monster) NegativeInfDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(122))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(-1))
}
func (rcv *Monster) MutateNegativeInfDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(122, n)
}
func (rcv *Monster) NegativeInfinityDefault() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(124))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return float32(math.Inf(-1))
}
func (rcv *Monster) MutateNegativeInfinityDefault(n float32) bool {
return rcv._tab.MutateFloat32Slot(124, n)
}
func (rcv *Monster) DoubleInfDefault() float64 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(126))
if o != 0 {
return rcv._tab.GetFloat64(o + rcv._tab.Pos)
}
return float64(math.Inf(1))
}
func (rcv *Monster) MutateDoubleInfDefault(n float64) bool {
return rcv._tab.MutateFloat64Slot(126, n)
}
func MonsterStart(builder *flatbuffers.Builder) {
builder.StartObject(54)
builder.StartObject(62)
}
func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) {
builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0)
@@ -1608,6 +1730,30 @@ func MonsterAddLongEnumNonEnumDefault(builder *flatbuffers.Builder, longEnumNonE
func MonsterAddLongEnumNormalDefault(builder *flatbuffers.Builder, longEnumNormalDefault LongEnum) {
builder.PrependUint64Slot(53, uint64(longEnumNormalDefault), 2)
}
func MonsterAddNanDefault(builder *flatbuffers.Builder, nanDefault float32) {
builder.PrependFloat32Slot(54, nanDefault, float32(math.NaN()))
}
func MonsterAddInfDefault(builder *flatbuffers.Builder, infDefault float32) {
builder.PrependFloat32Slot(55, infDefault, float32(math.Inf(1)))
}
func MonsterAddPositiveInfDefault(builder *flatbuffers.Builder, positiveInfDefault float32) {
builder.PrependFloat32Slot(56, positiveInfDefault, float32(math.Inf(1)))
}
func MonsterAddInfinityDefault(builder *flatbuffers.Builder, infinityDefault float32) {
builder.PrependFloat32Slot(57, infinityDefault, float32(math.Inf(1)))
}
func MonsterAddPositiveInfinityDefault(builder *flatbuffers.Builder, positiveInfinityDefault float32) {
builder.PrependFloat32Slot(58, positiveInfinityDefault, float32(math.Inf(1)))
}
func MonsterAddNegativeInfDefault(builder *flatbuffers.Builder, negativeInfDefault float32) {
builder.PrependFloat32Slot(59, negativeInfDefault, float32(math.Inf(-1)))
}
func MonsterAddNegativeInfinityDefault(builder *flatbuffers.Builder, negativeInfinityDefault float32) {
builder.PrependFloat32Slot(60, negativeInfinityDefault, float32(math.Inf(-1)))
}
func MonsterAddDoubleInfDefault(builder *flatbuffers.Builder, doubleInfDefault float64) {
builder.PrependFloat64Slot(61, doubleInfDefault, float64(math.Inf(1)))
}
func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
return builder.EndObject()
}