Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-897

Don't allow unqualified constant access to enum values

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.1, 0.2, 0.3, 0.4
    • 0.5
    • Compiler (General)
    • 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

        1. thrift-897.patch
          3 kB
          Bryan Duxbury

        Issue Links

          Activity

            People

              bryanduxbury Bryan Duxbury
              bryanduxbury Bryan Duxbury
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: