summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Reiss <dreiss@apache.org>2010-09-13 17:32:14 +0000
committerDavid Reiss <dreiss@apache.org>2010-09-13 17:32:14 +0000
commitbdd6261b3336cbb7f3df2829e0c001f6591bb224 (patch)
tree071104fa370723093a3d41f98a5d4ead9f9f68ad
parent8d7667c27f1b116386d7970a130439f02ac4491d (diff)
downloadthrift-bdd6261b3336cbb7f3df2829e0c001f6591bb224.tar.gz
Fix enum value lookups in C++
The recent enum change was causing enums to break if used as constant values by the C++ generator. The problem was that we were searching for the fully-qualified constant name (enum_name.VALUE_NAME) in the enum values. This didn't affect Java because it just uses symbolic names in the generated code. Fix it by grabbing the base name before doing the search. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@996610 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--compiler/cpp/src/parse/t_const_value.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/cpp/src/parse/t_const_value.h b/compiler/cpp/src/parse/t_const_value.h
index b66372b98..43c28b103 100644
--- a/compiler/cpp/src/parse/t_const_value.h
+++ b/compiler/cpp/src/parse/t_const_value.h
@@ -71,10 +71,15 @@ class t_const_value {
if (enum_ == NULL) {
throw "have identifier \"" + get_identifier() + "\", but unset enum on line!";
}
- t_enum_value* val = enum_->get_constant_by_name(get_identifier());
+ std::string identifier = get_identifier();
+ std::string::size_type dot = identifier.rfind('.');
+ if (dot != std::string::npos) {
+ identifier = identifier.substr(dot+1);
+ }
+ t_enum_value* val = enum_->get_constant_by_name(identifier);
if (val == NULL) {
throw
- "Unable to find enum value \"" + get_identifier() +
+ "Unable to find enum value \"" + identifier +
"\" in enum \"" + enum_->get_name() + "\"";
}
return val->get_value();