private void LoadGroupObject(BinaryReader reader, int key, Dictionary<int, object> objects)
{
var comparer = ObjectReferenceEqualityComparer<object>.Default;
int typeKey = reader.ReadInt32();
if (typeKey == 0)
{
// this is a string, nothing more to load
reader.ReadString();
return;
}
string typeName = (string)objects[typeKey];
if (typeName == typeof(bool).FullName)
{
// nothing more to load
reader.ReadBoolean();
return;
}
else if (typeName == typeof(TemplateToken).FullName || typeName == typeof(CommonToken).FullName)
{
// nothing more to load
int channel = reader.ReadInt32();
int charPositionInLine = reader.ReadInt32();
int line = reader.ReadInt32();
int startIndex = reader.ReadInt32();
int stopIndex = reader.ReadInt32();
string text = reader.ReadString();
int tokenIndex = reader.ReadInt32();
int type = reader.ReadInt32();
return;
}
else if (typeName == typeof(CompiledTemplate).FullName)
{
CompiledTemplate compiledTemplate = (CompiledTemplate)objects[key];
string name = reader.ReadString();
string prefix = reader.ReadString();
string template = reader.ReadString();
int templateDefStartTokenObject = reader.ReadInt32();
bool hasFormalArgs = reader.ReadBoolean();
int nativeGroupObject = reader.ReadInt32();
bool isRegion = reader.ReadBoolean();
Template.RegionType regionDefType = (Template.RegionType)reader.ReadInt32();
bool isAnonSubtemplate = reader.ReadBoolean();
compiledTemplate.TemplateDefStartToken = (IToken)objects[templateDefStartTokenObject];
compiledTemplate.NativeGroup = this;
int formalArgsLength = reader.ReadInt32();
if (formalArgsLength >= 0)
{
List<FormalArgument> formalArguments = new List<FormalArgument>(formalArgsLength);
for (int i = 0; i < formalArgsLength; i++)
{
int formalArgObject = reader.ReadInt32();
formalArguments.Add((FormalArgument)objects[formalArgObject]);
}
compiledTemplate.FormalArguments = formalArguments;
}
int stringsLength = reader.ReadInt32();
for (int i = 0; i < stringsLength; i++)
reader.ReadString();
int instrsLength = reader.ReadInt32();
if (instrsLength >= 0)
reader.ReadBytes(instrsLength);
int codeSize = reader.ReadInt32();
int sourceMapLength = reader.ReadInt32();
for (int i = 0; i < sourceMapLength; i++)
{
int start = reader.ReadInt32();
int length = reader.ReadInt32();
}
return;
}
else if (typeName == typeof(FormalArgument).FullName)
{
FormalArgument formalArgument = (FormalArgument)objects[key];
string name = reader.ReadString();
int index = reader.ReadInt32();
IToken defaultValueToken = (IToken)objects[reader.ReadInt32()];
int defaultValueObject = reader.ReadInt32();
int compiledDefaultValue = reader.ReadInt32();
formalArgument.DefaultValue = objects[defaultValueObject];
formalArgument.CompiledDefaultValue = (CompiledTemplate)objects[compiledDefaultValue];
}
else if (typeName == typeof(Template).FullName)
{
Template template = (Template)objects[key];
int implObject = reader.ReadInt32();
template.impl = (CompiledTemplate)objects[implObject];
int localsCount = reader.ReadInt32();
if (localsCount >= 0)
{
template.locals = new object[localsCount];
for (int i = 0; i < localsCount; i++)
{
int localObject = reader.ReadInt32();
template.locals[i] = objects[localObject];
}
}
int groupObject = reader.ReadInt32();
template.Group = (TemplateGroup)objects[groupObject];
return;
}
else if (typeName == typeof(TemplateGroupFile).FullName)
{
bool isDefaultGroup = reader.ReadBoolean();
return;
}
else if (typeName == typeof(TemplateGroup).FullName)
{
bool isDefaultGroup = reader.ReadBoolean();
}
else
{
throw new NotImplementedException();
}
}