Antlr4.StringTemplate.TemplateGroup.LoadGroupObject C# (CSharp) Method

LoadGroupObject() private method

private LoadGroupObject ( System.IO.BinaryReader reader, int key, object>.Dictionary objects ) : void
reader System.IO.BinaryReader
key int
objects object>.Dictionary
return void
        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();
            }
        }