From c23c620d26d62796f5bf307cae986a03ced73da1 Mon Sep 17 00:00:00 2001
From: Maor Itzkovitch <maor.tt@gmail.com>
Date: Mon, 13 Jul 2015 22:53:59 +0300
Subject: [PATCH] applied struct parameter fix to Go and Python generated
 classes

---
 src/idl_gen_go.cpp           | 4 ++--
 src/idl_gen_python.cpp       | 6 +++---
 tests/MyGame/Example/Vec3.go | 6 +++---
 tests/MyGame/Example/Vec3.py | 6 +++---
 tests/generate_code.sh       | 2 +-
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/idl_gen_go.cpp b/src/idl_gen_go.cpp
index 6f256bd1..a2e185bf 100644
--- a/src/idl_gen_go.cpp
+++ b/src/idl_gen_go.cpp
@@ -332,7 +332,7 @@ static void StructBuilderArgs(const StructDef &struct_def,
       // don't clash, and to make it obvious these arguments are constructing
       // a nested struct, prefix the name with the struct name.
       StructBuilderArgs(*field.value.type.struct_def,
-                        (field.value.type.struct_def->name + "_").c_str(),
+                        (nameprefix + (field.name + "_")).c_str(),
                         code_ptr);
     } else {
       std::string &code = *code_ptr;
@@ -365,7 +365,7 @@ static void StructBuilderBody(const StructDef &struct_def,
       code += "    builder.Pad(" + NumToString(field.padding) + ")\n";
     if (IsStruct(field.value.type)) {
       StructBuilderBody(*field.value.type.struct_def,
-                        (field.value.type.struct_def->name + "_").c_str(),
+                        (nameprefix + (field.name + "_")).c_str(),
                         code_ptr);
     } else {
       code += "    builder.Prepend" + GenMethod(field) + "(";
diff --git a/src/idl_gen_python.cpp b/src/idl_gen_python.cpp
index c03ac937..96f9c428 100644
--- a/src/idl_gen_python.cpp
+++ b/src/idl_gen_python.cpp
@@ -307,9 +307,9 @@ static void StructBuilderArgs(const StructDef &struct_def,
     if (IsStruct(field.value.type)) {
       // Generate arguments for a struct inside a struct. To ensure names
       // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the struct name.
+      // a nested struct, prefix the name with the field name.
       StructBuilderArgs(*field.value.type.struct_def,
-                        (field.value.type.struct_def->name + "_").c_str(),
+                        (nameprefix + (field.name + "_")).c_str(),
                         code_ptr);
     } else {
       std::string &code = *code_ptr;
@@ -341,7 +341,7 @@ static void StructBuilderBody(const StructDef &struct_def,
       code += "    builder.Pad(" + NumToString(field.padding) + ")\n";
     if (IsStruct(field.value.type)) {
       StructBuilderBody(*field.value.type.struct_def,
-                        (field.value.type.struct_def->name + "_").c_str(),
+                        (nameprefix + (field.name + "_")).c_str(),
                         code_ptr);
     } else {
       code += "    builder.Prepend" + GenMethod(field) + "(";
diff --git a/tests/MyGame/Example/Vec3.go b/tests/MyGame/Example/Vec3.go
index d2bab2c9..def0b4d1 100644
--- a/tests/MyGame/Example/Vec3.go
+++ b/tests/MyGame/Example/Vec3.go
@@ -27,13 +27,13 @@ func (rcv *Vec3) Test3(obj *Test) *Test {
 	return obj
 }
 
-func CreateVec3(builder *flatbuffers.Builder, x float32, y float32, z float32, test1 float64, test2 int8, Test_a int16, Test_b int8) flatbuffers.UOffsetT {
+func CreateVec3(builder *flatbuffers.Builder, x float32, y float32, z float32, test1 float64, test2 int8, test3_a int16, test3_b int8) flatbuffers.UOffsetT {
     builder.Prep(16, 32)
     builder.Pad(2)
     builder.Prep(2, 4)
     builder.Pad(1)
-    builder.PrependInt8(Test_b)
-    builder.PrependInt16(Test_a)
+    builder.PrependInt8(test3_b)
+    builder.PrependInt16(test3_a)
     builder.Pad(1)
     builder.PrependInt8(test2)
     builder.PrependFloat64(test1)
diff --git a/tests/MyGame/Example/Vec3.py b/tests/MyGame/Example/Vec3.py
index 3010d5bc..c4ddfe23 100644
--- a/tests/MyGame/Example/Vec3.py
+++ b/tests/MyGame/Example/Vec3.py
@@ -27,13 +27,13 @@ class Vec3(object):
         return obj
 
 
-def CreateVec3(builder, x, y, z, test1, test2, Test_a, Test_b):
+def CreateVec3(builder, x, y, z, test1, test2, test3_a, test3_b):
     builder.Prep(16, 32)
     builder.Pad(2)
     builder.Prep(2, 4)
     builder.Pad(1)
-    builder.PrependInt8(Test_b)
-    builder.PrependInt16(Test_a)
+    builder.PrependInt8(test3_b)
+    builder.PrependInt16(test3_a)
     builder.Pad(1)
     builder.PrependInt8(test2)
     builder.PrependFloat64(test1)
diff --git a/tests/generate_code.sh b/tests/generate_code.sh
index 5577d180..5b768197 100644
--- a/tests/generate_code.sh
+++ b/tests/generate_code.sh
@@ -1,2 +1,2 @@
-../flatc -c -j -n -g -b --gen-mutable --no-includes monster_test.fbs monsterdata_test.json
+../flatc -c -j -n -g -b -p --gen-mutable --no-includes monster_test.fbs monsterdata_test.json
 ../flatc -b --schema monster_test.fbs
-- 
GitLab