Don't allow unqualified constant access to enum values
------------------------------------------------------
Key: THRIFT-897
URL: https://issues.apache.org/jira/browse/THRIFT-897
Project: Thrift
Issue Type: Bug
Components: Compiler (General)
Affects Versions: 0.4, 0.3, 0.2, 0.1
Reporter: Bryan Duxbury
Fix For: 0.5
Through looking at THRIFT-544 and THRIFT-895, it's come to my attention that we
currently register each of every enum's values as a global (and scoped)
constant. This allows you to do things like:
{code}
enum MyEnum {
A = 1
B = 2
}
const MyEnum myEnumVar = A;
{code}
This is handy, insofar as you might want to use the values of an enum in
constant or default circumstances. However, this behavior is unstable - if you
have two enums with values that have the same name, all constant references
will point at the last occurrence of the name. Further, in order to allow this
to go on, we must not check if any constant has been declared twice, which
means you can get stupid, detectable errors in your IDL very easily.
I propose that we stop allowing this method of access, and instead require the
enum values referenced in constant context to be prefixed with the enum type's
name. For instance:
{code}
enum MyEnum {
A = 1
B = 2
}
const MyEnum myEnumVar = MyEnum.A;
{code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.