Exemplo n.º 1
0
        private static ElementValue ReadElementValue(EndianBinaryReader reader, List<CompileConstant> constants)
        {
            var value = new ElementValue();

            value.Tag = reader.ReadByte();

            switch ((char)value.Tag)
            {
                case 'B':
                case 'C':
                case 'D':
                case 'F':
                case 'I':
                case 'J':
                case 'S':
                case 'Z':
                case 's':
                    value.ConstValueIndex = reader.ReadInt16();
                    break;
                case 'e':
                    value.TypeNameIndex = reader.ReadInt16();
                    value.ConstNameIndex = reader.ReadInt16();
                    break;
                case 'c':
                    value.ClassInfoIndex = reader.ReadInt16();
                    break;
                case '@':
                    value.AnnotationValue = ReadAnnotation(reader, constants);
                    break;
                case '[':
                    short valueCount = reader.ReadInt16();
                    for (int i = 0; i < valueCount; i++)
                    {
                        value.Values.Add(ReadElementValue(reader, constants));
                    }
                    break;
            }

            return value;
        }
Exemplo n.º 2
0
        public override CompileAttribute Read(EndianBinaryReader reader, List<CompileConstant> constants, int length)
        {
            Entries = new List<StackMapFrame>();

            short entryCount = reader.ReadInt16();
            for (int i = 0; i < entryCount; i++)
            {
                var entry = new StackMapFrame();

                entry.Type = reader.ReadByte();
                if (entry.Type <= 63)
                {
                    // SAME
                }
                else if (entry.Type >= 64 && entry.Type <= 127)
                {
                    // SAME_LOCALS_1_STACK_ITEM
                    var item = new VerificationTypeInfo();
                    item.Read(reader);

                    entry.Stack.Add(item);
                }
                else if (entry.Type == 247)
                {
                    // SAME_LOCALS_1_STACK_ITEM_EXTENDED
                    entry.OffsetDelta = reader.ReadInt16();

                    var item = new VerificationTypeInfo();
                    item.Read(reader);

                    entry.Stack.Add(item);
                }
                else if (entry.Type >= 248 && entry.Type <= 250)
                {
                    // CHOP
                    entry.OffsetDelta = reader.ReadInt16();
                }
                else if (entry.Type == 251)
                {
                    // SAME_FRAME_EXTENDED
                    entry.OffsetDelta = reader.ReadInt16();
                }
                else if (entry.Type >= 252 && entry.Type <= 254)
                {
                    // APPEND
                    entry.OffsetDelta = reader.ReadInt16();

                    var type = (short)entry.Type;
                    for (int x = 251; x < type; x++)
                    {
                        var item = new VerificationTypeInfo();
                        item.Read(reader);

                        entry.Locals.Add(item);
                    }
                }
                else if (entry.Type == 255)
                {
                    // FULL_FRAME
                    entry.OffsetDelta = reader.ReadInt16();

                    short localCount = reader.ReadInt16();
                    for (int x = 0; x < localCount; x++)
                    {
                        var item = new VerificationTypeInfo();
                        item.Read(reader);

                        entry.Locals.Add(item);
                    }

                    short stackCount = reader.ReadInt16();
                    for (int x = 0; x < stackCount; x++)
                    {
                        var item = new VerificationTypeInfo();
                        item.Read(reader);

                        entry.Stack.Add(item);
                    }
                }

                Entries.Add(entry);
            }

            return this;
        }
Exemplo n.º 3
0
            public void Read(EndianBinaryReader reader)
            {
                Tag = (VerificationType)reader.ReadByte();

                if (Tag == VerificationType.Uninitialized ||
                    Tag == VerificationType.Object)
                {
                    Value = reader.ReadInt16();
                }
            }
Exemplo n.º 4
0
        public override CompileAttribute Read(EndianBinaryReader reader, List<CompileConstant> constants, int length)
        {
            var parameterCount = reader.ReadByte();

            ParameterAnnotations = new List<List<CompileAttributeRuntimeVisibleAnnotations.Annotation>>();
            for (var i = 0; i < parameterCount; i++)
            {
                var parameter = new List<CompileAttributeRuntimeVisibleAnnotations.Annotation>();

                var annotationCount = reader.ReadInt16();
                for (var x = 0; x < annotationCount; x++)
                {
                    var annotation = CompileAttributeRuntimeVisibleAnnotations.ReadAnnotation(reader, constants);

                    parameter.Add(annotation);
                }

                ParameterAnnotations.Add(parameter);
            }

            return this;
        }