From a5f50019bc979c352bb7e0c08b8bbfd8ab06af4d Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Wed, 2 Jul 2014 12:01:21 -0700 Subject: [PATCH] Made declaring the underlying type of an enum mandatory. 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 | 3 +-- src/idl_parser.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/Schemas.md b/docs/source/Schemas.md index 8398af3..6e20289 100755 --- a/docs/source/Schemas.md +++ b/docs/source/Schemas.md @@ -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 diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index 272818c..509052a 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -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('{'); -- 2.7.4