+ const string &typeName(dfn.GetLiteral()->IsArray() ? "Array" : dfn.GetLiteral()->GetTypeName());
+ int typeId(TypeDescription::GetTypeId(typeName));
+ int id(values[typeId].size());
+ const TypeDescription &td(TypeDescription::Get(typeId));
+ int size(
+ (dfn.GetLiteral()->GetType() == Literal::PATH
+ || dfn.GetLiteral()->GetType() == Literal::STRING)
+ ? dfn.GetLiteral()->GetString().size() : td.Size());
+ char *object(new char[size]);
+ if (dfn.GetLiteral()->GetType() == Literal::OBJECT) {
+ ReadObject(typeId, id, object, *dfn.GetLiteral()->GetProperties());
+ } else {
+ ReadLiteral(typeId, id, object, *dfn.GetLiteral());
+ }
+ values[typeId].push_back(object);
+ parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, typeId, id)));
+}
+
+void Interpreter::ReadLiteral(int typeId, int id, char *object, const Literal &literal) {
+ switch (literal.GetType()) {