Added tracking of order of types declared.

Change-Id: Iade313c99f119dcf1619674260648a33f61dc030
parent 87e29b25
...@@ -578,6 +578,7 @@ private: ...@@ -578,6 +578,7 @@ private:
BaseType baseType); BaseType baseType);
public: public:
SymbolTable<Type> types_;
SymbolTable<StructDef> structs_; SymbolTable<StructDef> structs_;
SymbolTable<EnumDef> enums_; SymbolTable<EnumDef> enums_;
SymbolTable<ServiceDef> services_; SymbolTable<ServiceDef> services_;
......
...@@ -1314,6 +1314,8 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) { ...@@ -1314,6 +1314,8 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
} }
} }
if (dest) *dest = &enum_def; if (dest) *dest = &enum_def;
types_.Add(namespaces_.back()->GetFullyQualifiedName(enum_def.name),
new Type(BASE_TYPE_UNION, nullptr, &enum_def));
return NoError(); return NoError();
} }
...@@ -1419,6 +1421,8 @@ CheckedError Parser::ParseDecl() { ...@@ -1419,6 +1421,8 @@ CheckedError Parser::ParseDecl() {
ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING)); ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING));
ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING)); ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING));
EXPECT('}'); EXPECT('}');
types_.Add(namespaces_.back()->GetFullyQualifiedName(struct_def->name),
new Type(BASE_TYPE_STRUCT, struct_def, nullptr));
return NoError(); return NoError();
} }
......
...@@ -266,8 +266,8 @@ inline bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuf ...@@ -266,8 +266,8 @@ inline bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuf
if (values->size() != types->size()) return false; if (values->size() != types->size()) return false;
for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) { for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
if (!VerifyCharacter( if (!VerifyCharacter(
verifier, values->Get(i), types->GetEnum<Character>(i))) { verifier, values->Get(i), types->GetEnum<Character>(i))) {
return false; return false;
} }
} }
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment