Made declaring the underlying type of an enum mandatory.
authorWouter van Oortmerssen <wvo@google.com>
Wed, 2 Jul 2014 19:01:21 +0000 (12:01 -0700)
committerWouter van Oortmerssen <wvo@google.com>
Wed, 2 Jul 2014 21:39:59 +0000 (14:39 -0700)
This is a breaking change, anyone having schema files with enums
that do not specify a type will get a specialized error:

must specify the underlying integer type for this
enum (e.g. ': short', which was the default).

All of the samples and docs already had a type specified,
so hopefully this will affect very few people.

Bug: 15777205
Change-Id: I9b8d7c0827867f7efb6c217346db7e402695eff0
Tested: on Windows

docs/source/Schemas.md
src/idl_parser.cpp

index 8398af3..6e20289 100755 (executable)
@@ -121,8 +121,7 @@ Define a sequence of named constants, each with a given value, or
 increasing by one from the previous one. The default first value
 is `0`. As you can see in the enum declaration, you specify the underlying
 integral type of the enum with `:` (in this case `byte`), which then determines
-the type of any fields declared with this enum type. If you omit the underlying
-type, it will be `short`.
+the type of any fields declared with this enum type.
 
 ### Unions
 
index 272818c..509052a 100644 (file)
@@ -580,14 +580,15 @@ void Parser::ParseEnum(bool is_union) {
   if (is_union) {
     enum_def.underlying_type.base_type = BASE_TYPE_UTYPE;
     enum_def.underlying_type.enum_def = &enum_def;
-  } else if (IsNext(':')) {
-    // short is the default type for fields when you use enums,
-    // though people are encouraged to pick any integer type instead.
+  } else {
+    // Give specialized error message, since this type spec used to
+    // be optional in the first FlatBuffers release.
+    if (!IsNext(':')) Error("must specify the underlying integer type for this"
+                            " enum (e.g. \': short\', which was the default).");
+    // Specify the integer type underlying this enum.
     ParseType(enum_def.underlying_type);
     if (!IsInteger(enum_def.underlying_type.base_type))
       Error("underlying enum type must be integral");
-  } else {
-    enum_def.underlying_type.base_type = BASE_TYPE_SHORT;
   }
   ParseMetaData(enum_def);
   Expect('{');