Parser now allows empty tables in JSON

Bug: 16870719
Change-Id: Ia5fdce49a67b1aa621ab1e37a815e2a3293257b6
Tested: on Linux
parent 620d8d6f
...@@ -191,7 +191,6 @@ static void GenStruct(const StructDef &struct_def, const Table *table, ...@@ -191,7 +191,6 @@ static void GenStruct(const StructDef &struct_def, const Table *table,
std::string *_text) { std::string *_text) {
std::string &text = *_text; std::string &text = *_text;
text += "{"; text += "{";
text += NewLine(opts.indent_step);
int fieldout = 0; int fieldout = 0;
StructDef *union_sd = nullptr; StructDef *union_sd = nullptr;
for (auto it = struct_def.fields.vec.begin(); for (auto it = struct_def.fields.vec.begin();
...@@ -202,8 +201,8 @@ static void GenStruct(const StructDef &struct_def, const Table *table, ...@@ -202,8 +201,8 @@ static void GenStruct(const StructDef &struct_def, const Table *table,
// The field is present. // The field is present.
if (fieldout++) { if (fieldout++) {
text += ","; text += ",";
text += NewLine(opts.indent_step);
} }
text += NewLine(opts.indent_step);
text.append(indent + opts.indent_step, ' '); text.append(indent + opts.indent_step, ' ');
OutputIdentifier(fd.name, opts, _text); OutputIdentifier(fd.name, opts, _text);
text += ": "; text += ": ";
......
...@@ -420,7 +420,7 @@ void Parser::SerializeStruct(const StructDef &struct_def, const Value &val) { ...@@ -420,7 +420,7 @@ void Parser::SerializeStruct(const StructDef &struct_def, const Value &val) {
uoffset_t Parser::ParseTable(const StructDef &struct_def) { uoffset_t Parser::ParseTable(const StructDef &struct_def) {
Expect('{'); Expect('{');
size_t fieldn = 0; size_t fieldn = 0;
for (;;) { if (!IsNext('}')) for (;;) {
std::string name = attribute_; std::string name = attribute_;
if (!IsNext(kTokenStringConstant)) Expect(kTokenIdentifier); if (!IsNext(kTokenStringConstant)) Expect(kTokenIdentifier);
auto field = struct_def.fields.Lookup(name); auto field = struct_def.fields.Lookup(name);
......
...@@ -33,6 +33,7 @@ table Monster { ...@@ -33,6 +33,7 @@ table Monster {
test:Any (id: 8); test:Any (id: 8);
test4:[Test] (id: 9); test4:[Test] (id: 9);
testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster"); testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster");
testempty:Monster (id:14);
} }
root_type Monster; root_type Monster;
......
...@@ -95,6 +95,7 @@ struct Monster : private flatbuffers::Table { ...@@ -95,6 +95,7 @@ struct Monster : private flatbuffers::Table {
const Monster *enemy() const { return GetPointer<const Monster *>(28); } const Monster *enemy() const { return GetPointer<const Monster *>(28); }
const flatbuffers::Vector<uint8_t> *testnestedflatbuffer() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(30); } const flatbuffers::Vector<uint8_t> *testnestedflatbuffer() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(30); }
const Monster *testnestedflatbuffer_nested_root() { return flatbuffers::GetRoot<Monster>(testnestedflatbuffer()->Data()); } const Monster *testnestedflatbuffer_nested_root() { return flatbuffers::GetRoot<Monster>(testnestedflatbuffer()->Data()); }
const Monster *testempty() const { return GetPointer<const Monster *>(32); }
bool Verify(const flatbuffers::Verifier &verifier) const { bool Verify(const flatbuffers::Verifier &verifier) const {
return VerifyTable(verifier) && return VerifyTable(verifier) &&
VerifyField<Vec3>(verifier, 4 /* pos */) && VerifyField<Vec3>(verifier, 4 /* pos */) &&
...@@ -119,7 +120,9 @@ struct Monster : private flatbuffers::Table { ...@@ -119,7 +120,9 @@ struct Monster : private flatbuffers::Table {
VerifyField<flatbuffers::uoffset_t>(verifier, 28 /* enemy */) && VerifyField<flatbuffers::uoffset_t>(verifier, 28 /* enemy */) &&
verifier.VerifyTable(enemy()) && verifier.VerifyTable(enemy()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 30 /* testnestedflatbuffer */) && VerifyField<flatbuffers::uoffset_t>(verifier, 30 /* testnestedflatbuffer */) &&
verifier.Verify(testnestedflatbuffer()); verifier.Verify(testnestedflatbuffer()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 32 /* testempty */) &&
verifier.VerifyTable(testempty());
} }
}; };
...@@ -139,9 +142,10 @@ struct MonsterBuilder { ...@@ -139,9 +142,10 @@ struct MonsterBuilder {
void add_testarrayoftables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables) { fbb_.AddOffset(26, testarrayoftables); } void add_testarrayoftables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables) { fbb_.AddOffset(26, testarrayoftables); }
void add_enemy(flatbuffers::Offset<Monster> enemy) { fbb_.AddOffset(28, enemy); } void add_enemy(flatbuffers::Offset<Monster> enemy) { fbb_.AddOffset(28, enemy); }
void add_testnestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer) { fbb_.AddOffset(30, testnestedflatbuffer); } void add_testnestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer) { fbb_.AddOffset(30, testnestedflatbuffer); }
void add_testempty(flatbuffers::Offset<Monster> testempty) { fbb_.AddOffset(32, testempty); }
MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); } MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
MonsterBuilder &operator=(const MonsterBuilder &); MonsterBuilder &operator=(const MonsterBuilder &);
flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 14)); } flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 15)); }
}; };
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
...@@ -157,8 +161,10 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder ...@@ -157,8 +161,10 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0, flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0, flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0,
flatbuffers::Offset<Monster> enemy = 0, flatbuffers::Offset<Monster> enemy = 0,
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0) { flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0,
flatbuffers::Offset<Monster> testempty = 0) {
MonsterBuilder builder_(_fbb); MonsterBuilder builder_(_fbb);
builder_.add_testempty(testempty);
builder_.add_testnestedflatbuffer(testnestedflatbuffer); builder_.add_testnestedflatbuffer(testnestedflatbuffer);
builder_.add_enemy(enemy); builder_.add_enemy(enemy);
builder_.add_testarrayoftables(testarrayoftables); builder_.add_testarrayoftables(testarrayoftables);
......
...@@ -36,5 +36,7 @@ ...@@ -36,5 +36,7 @@
testarrayofstring: [ testarrayofstring: [
"test1", "test1",
"test2" "test2"
] ],
testempty: {
}
} }
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