Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove FieldTemplate<> from field reflection type #374

Closed
wants to merge 8 commits into from
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ get a compiler error. To fix, remove the `<Writer>` part:

### `gbc` and Bond compiler library ###

* C++ codegen hides FieldTemplate details, shortening symbol names.
* C++ codegen ensures that parameter names do not shadow field names.
* When generating C++ apply files, there are now explicit `bond::Apply<>`
instantiations for `CompactBinaryWriter<OutputCounter>` and
Expand Down
4 changes: 2 additions & 2 deletions compiler/src/Language/Bond/Codegen/Cpp/Reflection_h.hs
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,14 @@ reflection_h export_attribute cpp file imports declarations = ("_reflection.h",

fieldTemplates = F.foldMap $ \ f@Field {..} -> [lt|
// #{fieldName}
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
#{fieldOrdinal},
#{CPP.modifierTag f},
#{className},
#{cppType fieldType},
&#{className}::#{fieldName},
&s_#{fieldName}_metadata
> #{fieldName};
> {} #{fieldName};
|]


Expand Down
8 changes: 4 additions & 4 deletions compiler/tests/generated/alias_key_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,24 @@ namespace test
public: struct var
{
// m
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
foo,
std::map<std::string, int32_t>,
&foo::m,
&s_m_metadata
> m;
> {} m;

// s
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
1,
::bond::reflection::optional_field_modifier,
foo,
std::set<int32_t>,
&foo::s,
&s_s_metadata
> s;
> {} s;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
52 changes: 26 additions & 26 deletions compiler/tests/generated/alias_with_allocator_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,114 +30,114 @@ namespace test
public: struct var
{
// l
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
foo,
std::list<bool, typename arena::rebind<bool>::other>,
&foo::l,
&s_l_metadata
> l;
> {} l;

// v
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
1,
::bond::reflection::optional_field_modifier,
foo,
std::vector<bool, typename arena::rebind<bool>::other>,
&foo::v,
&s_v_metadata
> v;
> {} v;

// s
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
2,
::bond::reflection::optional_field_modifier,
foo,
std::set<bool, std::less<bool>, typename arena::rebind<bool>::other>,
&foo::s,
&s_s_metadata
> s;
> {} s;

// m
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
3,
::bond::reflection::optional_field_modifier,
foo,
std::map<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, bool, std::less<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other> >, typename arena::rebind<std::pair<const std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, bool> >::other>,
&foo::m,
&s_m_metadata
> m;
> {} m;

// st
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
4,
::bond::reflection::optional_field_modifier,
foo,
std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>,
&foo::st,
&s_st_metadata
> st;
> {} st;

// d
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
5,
::bond::reflection::optional_field_modifier,
foo,
std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>,
&foo::d,
&s_d_metadata
> d;
> {} d;

// l1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
10,
::bond::reflection::optional_field_modifier,
foo,
::bond::maybe<std::list<bool, typename arena::rebind<bool>::other> >,
&foo::l1,
&s_l1_metadata
> l1;
> {} l1;

// v1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
11,
::bond::reflection::optional_field_modifier,
foo,
::bond::maybe<std::vector<bool, typename arena::rebind<bool>::other> >,
&foo::v1,
&s_v1_metadata
> v1;
> {} v1;

// s1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
12,
::bond::reflection::optional_field_modifier,
foo,
::bond::maybe<std::set<bool, std::less<bool>, typename arena::rebind<bool>::other> >,
&foo::s1,
&s_s1_metadata
> s1;
> {} s1;

// m1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
13,
::bond::reflection::optional_field_modifier,
foo,
::bond::maybe<std::map<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, bool, std::less<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other> >, typename arena::rebind<std::pair<const std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, bool> >::other> >,
&foo::m1,
&s_m1_metadata
> m1;
> {} m1;

// st1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
14,
::bond::reflection::optional_field_modifier,
foo,
::bond::maybe<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other> >,
&foo::st1,
&s_st1_metadata
> st1;
> {} st1;
};

private: typedef boost::mpl::list<> fields0;
Expand Down Expand Up @@ -180,24 +180,24 @@ namespace test
public: struct var
{
// f
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
withFoo,
::test::foo,
&withFoo::f,
&s_f_metadata
> f;
> {} f;

// f1
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
1,
::bond::reflection::optional_field_modifier,
withFoo,
::test::foo,
&withFoo::f1,
&s_f1_metadata
> f1;
> {} f1;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
8 changes: 4 additions & 4 deletions compiler/tests/generated/aliases_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ namespace tests
public: struct var
{
// aa
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
Foo<T>,
std::vector<std::vector<T> >,
&Foo<T>::aa,
&s_aa_metadata
> aa;
> {} aa;
};

private: typedef boost::mpl::list<> fields0;
Expand Down Expand Up @@ -73,14 +73,14 @@ namespace tests
public: struct var
{
// aWrappedEnum
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
WrappingAnEnum,
::tests::EnumToWrap,
&WrappingAnEnum::aWrappedEnum,
&s_aWrappedEnum_metadata
> aWrappedEnum;
> {} aWrappedEnum;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
8 changes: 4 additions & 4 deletions compiler/tests/generated/allocator/alias_key_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,24 @@ namespace test
public: struct var
{
// m
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
foo,
std::map<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, int32_t, std::less<std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other> >, typename arena::rebind<std::pair<const std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>, int32_t> >::other>,
&foo::m,
&s_m_metadata
> m;
> {} m;

// s
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
1,
::bond::reflection::optional_field_modifier,
foo,
std::set<int32_t, std::less<int32_t>, typename arena::rebind<int32_t>::other>,
&foo::s,
&s_s_metadata
> s;
> {} s;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
8 changes: 4 additions & 4 deletions compiler/tests/generated/allocator/aliases_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ namespace tests
public: struct var
{
// aa
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
Foo<T>,
std::vector<std::vector<T, typename arena::rebind<T>::other>, typename arena::rebind<std::vector<T, typename arena::rebind<T>::other> >::other>,
&Foo<T>::aa,
&s_aa_metadata
> aa;
> {} aa;
};

private: typedef boost::mpl::list<> fields0;
Expand Down Expand Up @@ -73,14 +73,14 @@ namespace tests
public: struct var
{
// aWrappedEnum
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
WrappingAnEnum,
::tests::EnumToWrap,
&WrappingAnEnum::aWrappedEnum,
&s_aWrappedEnum_metadata
> aWrappedEnum;
> {} aWrappedEnum;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
4 changes: 2 additions & 2 deletions compiler/tests/generated/allocator/attributes_reflection.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ namespace tests
public: struct var
{
// f
typedef ::bond::reflection::FieldTemplate<
typedef struct : ::bond::reflection::FieldTemplate<
0,
::bond::reflection::optional_field_modifier,
Foo,
std::basic_string<char, std::char_traits<char>, typename arena::rebind<char>::other>,
&Foo::f,
&s_f_metadata
> f;
> {} f;
};

private: typedef boost::mpl::list<> fields0;
Expand Down
Loading