Commit 9c1c31ff authored by xiaofeng@google.com's avatar xiaofeng@google.com

Fix compile issues under GCC 3.4.6

parent d2d50f9a
...@@ -120,7 +120,7 @@ TEST(RepeatedFieldReflectionTest, RegularFields) { ...@@ -120,7 +120,7 @@ TEST(RepeatedFieldReflectionTest, RegularFields) {
EXPECT_EQ(rf_double.Get(i), Func(i, 2)); EXPECT_EQ(rf_double.Get(i), Func(i, 2));
EXPECT_EQ(rpf_string.Get(i), StrFunc(i, 5)); EXPECT_EQ(rpf_string.Get(i), StrFunc(i, 5));
EXPECT_EQ(rpf_foreign_message.Get(i).c(), Func(i, 6)); EXPECT_EQ(rpf_foreign_message.Get(i).c(), Func(i, 6));
EXPECT_EQ(down_cast<const ForeignMessage&>(rpf_message.Get(i)).c(), EXPECT_EQ(down_cast<const ForeignMessage*>(&rpf_message.Get(i))->c(),
Func(i, 6)); Func(i, 6));
// Check gets through mutable objects. // Check gets through mutable objects.
...@@ -128,7 +128,7 @@ TEST(RepeatedFieldReflectionTest, RegularFields) { ...@@ -128,7 +128,7 @@ TEST(RepeatedFieldReflectionTest, RegularFields) {
EXPECT_EQ(mrf_double->Get(i), Func(i, 2)); EXPECT_EQ(mrf_double->Get(i), Func(i, 2));
EXPECT_EQ(mrpf_string->Get(i), StrFunc(i, 5)); EXPECT_EQ(mrpf_string->Get(i), StrFunc(i, 5));
EXPECT_EQ(mrpf_foreign_message->Get(i).c(), Func(i, 6)); EXPECT_EQ(mrpf_foreign_message->Get(i).c(), Func(i, 6));
EXPECT_EQ(down_cast<const ForeignMessage&>(mrpf_message->Get(i)).c(), EXPECT_EQ(down_cast<const ForeignMessage*>(&mrpf_message->Get(i))->c(),
Func(i, 6)); Func(i, 6));
// Check sets through mutable objects. // Check sets through mutable objects.
......
...@@ -341,12 +341,6 @@ inline To down_cast(From* f) { // so we only accept pointers ...@@ -341,12 +341,6 @@ inline To down_cast(From* f) { // so we only accept pointers
return static_cast<To>(f); return static_cast<To>(f);
} }
// Simplified down_cast for reference type.
template<typename To, typename From>
inline To down_cast(From& f) {
return static_cast<To>(f);
}
} // namespace internal } // namespace internal
// We made these internal so that they would show up as such in the docs, // We made these internal so that they would show up as such in the docs,
......
...@@ -434,8 +434,8 @@ class TextFormat::Parser::ParserImpl { ...@@ -434,8 +434,8 @@ class TextFormat::Parser::ParserImpl {
// If a parse info tree exists, add the location for the parsed // If a parse info tree exists, add the location for the parsed
// field. // field.
if (parse_info_tree_ != NULL) { if (parse_info_tree_ != NULL) {
parse_info_tree_->RecordLocation(field, RecordLocation(parse_info_tree_, field,
ParseLocation(start_line, start_column)); ParseLocation(start_line, start_column));
} }
return true; return true;
...@@ -483,7 +483,7 @@ class TextFormat::Parser::ParserImpl { ...@@ -483,7 +483,7 @@ class TextFormat::Parser::ParserImpl {
// for the nested message. // for the nested message.
ParseInfoTree* parent = parse_info_tree_; ParseInfoTree* parent = parse_info_tree_;
if (parent != NULL) { if (parent != NULL) {
parse_info_tree_ = parent->CreateNested(field); parse_info_tree_ = CreateNested(parent, field);
} }
string delimeter; string delimeter;
......
...@@ -339,9 +339,30 @@ class LIBPROTOBUF_EXPORT TextFormat { ...@@ -339,9 +339,30 @@ class LIBPROTOBUF_EXPORT TextFormat {
}; };
private: private:
// Hack: ParseInfoTree declares TextFormat as a friend which should extend
// the friendship to TextFormat::Parser::ParserImpl, but unfortunately some
// old compilers (e.g. GCC 3.4.6) don't implement this correctly. We provide
// helpers for ParserImpl to call methods of ParseInfoTree.
static inline void RecordLocation(ParseInfoTree* info_tree,
const FieldDescriptor* field,
ParseLocation location);
static inline ParseInfoTree* CreateNested(ParseInfoTree* info_tree,
const FieldDescriptor* field);
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormat); GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormat);
}; };
inline void TextFormat::RecordLocation(ParseInfoTree* info_tree,
const FieldDescriptor* field,
ParseLocation location) {
info_tree->RecordLocation(field, location);
}
inline TextFormat::ParseInfoTree* TextFormat::CreateNested(
ParseInfoTree* info_tree, const FieldDescriptor* field) {
return info_tree->CreateNested(field);
}
} // namespace protobuf } // namespace protobuf
} // namespace google } // namespace google
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment