fix check for Enum defaults (#5292)
authorNils Berg <berg.nils@gmail.com>
Mon, 15 Apr 2019 18:38:44 +0000 (20:38 +0200)
committerWouter van Oortmerssen <aardappel@gmail.com>
Mon, 15 Apr 2019 18:38:44 +0000 (11:38 -0700)
fixes #5288

src/idl_parser.cpp
tests/test.cpp

index ba28ae6..e26aa55 100644 (file)
@@ -670,11 +670,11 @@ CheckedError Parser::ParseField(StructDef &struct_def) {
 
   if (token_ == '=') {
     NEXT();
+    ECHECK(ParseSingleValue(&field->name, field->value, true));
     if (!IsScalar(type.base_type) ||
         (struct_def.fixed && field->value.constant != "0"))
       return Error(
             "default values currently only supported for scalars in tables");
-    ECHECK(ParseSingleValue(&field->name, field->value, true));
   }
   if (type.enum_def &&
       !type.enum_def->is_union &&
index 4af2974..4e23d79 100644 (file)
@@ -1275,6 +1275,7 @@ void ErrorTest() {
   TestError("table Y {} table X { Y:int; }", "same as table");
   TestError("struct X { Y:string; }", "only scalar");
   TestError("table X { Y:string = \"\"; }", "default values");
+  TestError("struct X { a:uint = 42; }", "default values");
   TestError("enum Y:byte { Z = 1 } table X { y:Y; }", "not part of enum");
   TestError("struct X { Y:int (deprecated); }", "deprecate");
   TestError("union Z { X } table X { Y:Z; } root_type X; { Y: {}, A:1 }",