From 41d690329423739ac4e8fab79889eb6ebb18e176 Mon Sep 17 00:00:00 2001 From: Gh0u1L5 Date: Mon, 14 Nov 2022 03:52:02 +0800 Subject: [PATCH] [Go] Fix GenNativeUnionUnPack for imported union type. (#7579) * Fix GenNativeUnionUnPack for imported union type. * Update test results. Co-authored-by: Derek Bailey --- src/idl_gen_go.cpp | 5 ++++- tests/MyGame/Example/Any.go | 9 ++++++--- tests/MyGame/Example/AnyAmbiguousAliases.go | 9 ++++++--- tests/MyGame/Example/AnyUniqueAliases.go | 9 ++++++--- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/idl_gen_go.cpp b/src/idl_gen_go.cpp index 33917ff77..d5d3c43d0 100644 --- a/src/idl_gen_go.cpp +++ b/src/idl_gen_go.cpp @@ -906,7 +906,10 @@ class GoGenerator : public BaseGenerator { const EnumVal &ev = **it2; if (ev.IsZero()) continue; code += "\tcase " + namer_.EnumVariant(enum_def, ev) + ":\n"; - code += "\t\tx := " + ev.union_type.struct_def->name + "{_tab: table}\n"; + code += "\t\tvar x " + + WrapInNameSpaceAndTrack(*ev.union_type.struct_def) + + "\n"; + code += "\t\tx.Init(table.Bytes, table.Pos)\n"; code += "\t\treturn &" + WrapInNameSpaceAndTrack(enum_def.defined_namespace, diff --git a/tests/MyGame/Example/Any.go b/tests/MyGame/Example/Any.go index 14b66b5b5..62664185b 100644 --- a/tests/MyGame/Example/Any.go +++ b/tests/MyGame/Example/Any.go @@ -63,13 +63,16 @@ func (t *AnyT) Pack(builder *flatbuffers.Builder) flatbuffers.UOffsetT { func (rcv Any) UnPack(table flatbuffers.Table) *AnyT { switch rcv { case AnyMonster: - x := Monster{_tab: table} + var x Monster + x.Init(table.Bytes, table.Pos) return &AnyT{ Type: AnyMonster, Value: x.UnPack() } case AnyTestSimpleTableWithEnum: - x := TestSimpleTableWithEnum{_tab: table} + var x TestSimpleTableWithEnum + x.Init(table.Bytes, table.Pos) return &AnyT{ Type: AnyTestSimpleTableWithEnum, Value: x.UnPack() } case AnyMyGame_Example2_Monster: - x := Monster{_tab: table} + var x MyGame__Example2.Monster + x.Init(table.Bytes, table.Pos) return &AnyT{ Type: AnyMyGame_Example2_Monster, Value: x.UnPack() } } return nil diff --git a/tests/MyGame/Example/AnyAmbiguousAliases.go b/tests/MyGame/Example/AnyAmbiguousAliases.go index 8a088dbb5..cdb65c9b2 100644 --- a/tests/MyGame/Example/AnyAmbiguousAliases.go +++ b/tests/MyGame/Example/AnyAmbiguousAliases.go @@ -61,13 +61,16 @@ func (t *AnyAmbiguousAliasesT) Pack(builder *flatbuffers.Builder) flatbuffers.UO func (rcv AnyAmbiguousAliases) UnPack(table flatbuffers.Table) *AnyAmbiguousAliasesT { switch rcv { case AnyAmbiguousAliasesM1: - x := Monster{_tab: table} + var x Monster + x.Init(table.Bytes, table.Pos) return &AnyAmbiguousAliasesT{ Type: AnyAmbiguousAliasesM1, Value: x.UnPack() } case AnyAmbiguousAliasesM2: - x := Monster{_tab: table} + var x Monster + x.Init(table.Bytes, table.Pos) return &AnyAmbiguousAliasesT{ Type: AnyAmbiguousAliasesM2, Value: x.UnPack() } case AnyAmbiguousAliasesM3: - x := Monster{_tab: table} + var x Monster + x.Init(table.Bytes, table.Pos) return &AnyAmbiguousAliasesT{ Type: AnyAmbiguousAliasesM3, Value: x.UnPack() } } return nil diff --git a/tests/MyGame/Example/AnyUniqueAliases.go b/tests/MyGame/Example/AnyUniqueAliases.go index 2a52ebec3..32cbe08b9 100644 --- a/tests/MyGame/Example/AnyUniqueAliases.go +++ b/tests/MyGame/Example/AnyUniqueAliases.go @@ -63,13 +63,16 @@ func (t *AnyUniqueAliasesT) Pack(builder *flatbuffers.Builder) flatbuffers.UOffs func (rcv AnyUniqueAliases) UnPack(table flatbuffers.Table) *AnyUniqueAliasesT { switch rcv { case AnyUniqueAliasesM: - x := Monster{_tab: table} + var x Monster + x.Init(table.Bytes, table.Pos) return &AnyUniqueAliasesT{ Type: AnyUniqueAliasesM, Value: x.UnPack() } case AnyUniqueAliasesTS: - x := TestSimpleTableWithEnum{_tab: table} + var x TestSimpleTableWithEnum + x.Init(table.Bytes, table.Pos) return &AnyUniqueAliasesT{ Type: AnyUniqueAliasesTS, Value: x.UnPack() } case AnyUniqueAliasesM2: - x := Monster{_tab: table} + var x MyGame__Example2.Monster + x.Init(table.Bytes, table.Pos) return &AnyUniqueAliasesT{ Type: AnyUniqueAliasesM2, Value: x.UnPack() } } return nil