Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
0.1, 0.2, 0.3, 0.4
-
None
-
Patch Available
Description
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:
enum MyEnum { A = 1 B = 2 } const MyEnum myEnumVar = A;
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:
enum MyEnum { A = 1 B = 2 } const MyEnum myEnumVar = MyEnum.A;
Attachments
Attachments
Issue Links
- is related to
-
THRIFT-895 Thrift compiler does not allow two different enumerations to have the same key name for one of the enum values
- Closed