コード例 #1
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 2 + 4 + code.Length + 2 + 2));
     bes.WriteUInt16(max_stack);
     bes.WriteUInt16(max_locals);
     bes.WriteUInt32((uint)code.Length);
     for (int i = 0; i < code.Length; i++)
     {
         bes.WriteByte(code[i]);
     }
     bes.WriteUInt16(0);             // no exceptions
     bes.WriteUInt16(0);             // no attributes
 }
コード例 #2
0
        private static void WriteMethods(BigEndianStream bes, TypeWrapper tw)
        {
            List <MethodWrapper> list = new List <MethodWrapper>();

            foreach (MethodWrapper mw in tw.GetMethods())
            {
                if (!mw.IsConstructor && !mw.IsHideFromReflection && !mw.IsPrivate)
                {
                    list.Add(mw);
                }
            }
            list.Sort(delegate(MethodWrapper mw1, MethodWrapper mw2) {
                if (mw1.Name == mw2.Name)
                {
                    return(String.CompareOrdinal(mw1.Signature, mw2.Signature));
                }
                return(String.CompareOrdinal(mw1.Name, mw2.Name));
            });
            foreach (MethodWrapper mw in list)
            {
                Modifiers mods = mw.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Synchronized | Modifiers.Native | Modifiers.Abstract | Modifiers.Strictfp);
                bes.WriteUtf8(mw.Name);
                bes.WriteUInt32((uint)mods);
                bes.WriteUtf8(mw.Signature);
            }
        }
コード例 #3
0
ファイル: ClassFileWriter.cs プロジェクト: parhelia512/ikvm-1
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     if (flags == null || names == null || flags.Length != names.Length)
     {
         // write a malformed MethodParameters attribute
         bes.WriteUInt32(0);
         return;
     }
     bes.WriteUInt32((uint)(1 + names.Length * 4));
     bes.WriteByte((byte)names.Length);
     for (int i = 0; i < names.Length; i++)
     {
         bes.WriteUInt16(names[i]);
         bes.WriteUInt16(flags[i]);
     }
 }
コード例 #4
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(buf.Length));
     foreach (byte b in buf)
     {
         bes.WriteByte(b);
     }
 }
コード例 #5
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(mem.Length + 2));
     bes.WriteUInt16(count);
     foreach (byte b in mem.ToArray())
     {
         bes.WriteByte(b);
     }
 }
コード例 #6
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 2 * classes.Count));
     bes.WriteUInt16((ushort)classes.Count);
     foreach (ushort idx in classes)
     {
         bes.WriteUInt16(idx);
     }
 }
コード例 #7
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(1 + names.Length * 4));
     bes.WriteByte((byte)names.Length);
     foreach (ushort idx in names)
     {
         bes.WriteUInt16(idx);
         bes.WriteUInt16(0);
     }
 }
コード例 #8
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 8 * classes.Count));
     bes.WriteUInt16((ushort)classes.Count);
     foreach (Item i in classes)
     {
         bes.WriteUInt16(i.inner_class_info_index);
         bes.WriteUInt16(i.outer_class_info_index);
         bes.WriteUInt16(i.inner_name_index);
         bes.WriteUInt16(i.inner_class_access_flags);
     }
 }
コード例 #9
0
		private static void WriteModifiers(BigEndianStream bes, TypeWrapper tw)
		{
			Modifiers mods = tw.ReflectiveModifiers & (Modifiers.Public | Modifiers.Final | Modifiers.Interface | Modifiers.Abstract);
			if ((mods & Modifiers.Interface) != 0)
			{
				mods &= ~Modifiers.Abstract;
				if (HasJavaMethods(tw))
				{
					mods |= Modifiers.Abstract;
				}
			}
			bes.WriteUInt32((uint)mods);
		}
コード例 #10
0
ファイル: SerialVersionUID.cs プロジェクト: labsnap/ikvm-1
        private static void WriteStaticInitializer(BigEndianStream bes, TypeWrapper tw)
        {
            Type type = tw.TypeAsTBD;

            if (!type.IsArray && type.TypeInitializer != null)
            {
                if (!AttributeHelper.IsHideFromJava(type.TypeInitializer))
                {
                    bes.WriteUtf8("<clinit>");
                    bes.WriteUInt32((uint)Modifiers.Static);
                    bes.WriteUtf8("()V");
                }
            }
        }
コード例 #11
0
        private static void WriteModifiers(BigEndianStream bes, TypeWrapper tw)
        {
            Modifiers mods = tw.ReflectiveModifiers & (Modifiers.Public | Modifiers.Final | Modifiers.Interface | Modifiers.Abstract);

            if ((mods & Modifiers.Interface) != 0)
            {
                mods &= ~Modifiers.Abstract;
                if (HasJavaMethods(tw))
                {
                    mods |= Modifiers.Abstract;
                }
            }
            bes.WriteUInt32((uint)mods);
        }
コード例 #12
0
        public override void Write(BigEndianStream bes)
        {
            base.Write(bes);
            uint length = 1;

            foreach (RuntimeVisibleAnnotationsAttribute attr in parameters)
            {
                length += attr.Length;
            }
            bes.WriteUInt32(length);
            bes.WriteByte((byte)parameters.Count);
            foreach (RuntimeVisibleAnnotationsAttribute attr in parameters)
            {
                attr.WriteImpl(bes);
            }
        }
コード例 #13
0
        private static void WriteStaticInitializer(BigEndianStream bes, TypeWrapper tw)
        {
#if !WINRT
            Type type = tw.TypeAsTBD;
            if (!type.IsArray && type.TypeInitializer != null)
            {
                if (!AttributeHelper.IsHideFromJava(type.TypeInitializer))
                {
                    bes.WriteUtf8("<clinit>");
                    bes.WriteUInt32((uint)Modifiers.Static);
                    bes.WriteUtf8("()V");
                }
            }
#else
            throw new NotImplementedException();
#endif
        }
コード例 #14
0
        public void Write(Stream stream)
        {
            BigEndianStream bes = new BigEndianStream(stream);

            bes.WriteUInt32(0xCAFEBABE);
            bes.WriteUInt16(minorVersion);
            bes.WriteUInt16(majorVersion);
            bes.WriteUInt16((ushort)cplist.Count);
            for (int i = 1; i < cplist.Count; i++)
            {
                ConstantPoolItem cpi = (ConstantPoolItem)cplist[i];
                if (cpi != null)
                {
                    cpi.Write(bes);
                }
            }
            bes.WriteUInt16((ushort)access_flags);
            bes.WriteUInt16(this_class);
            bes.WriteUInt16(super_class);
            // interfaces count
            bes.WriteUInt16((ushort)interfaces.Count);
            for (int i = 0; i < interfaces.Count; i++)
            {
                bes.WriteUInt16((ushort)interfaces[i]);
            }
            // fields count
            bes.WriteUInt16((ushort)fields.Count);
            for (int i = 0; i < fields.Count; i++)
            {
                ((FieldOrMethod)fields[i]).Write(bes);
            }
            // methods count
            bes.WriteUInt16((ushort)methods.Count);
            for (int i = 0; i < methods.Count; i++)
            {
                ((FieldOrMethod)methods[i]).Write(bes);
            }
            // attributes count
            bes.WriteUInt16((ushort)attribs.Count);
            for (int i = 0; i < attribs.Count; i++)
            {
                ((ClassFileAttribute)attribs[i]).Write(bes);
            }
        }
コード例 #15
0
        private static void WriteFields(BigEndianStream bes, TypeWrapper tw)
        {
            List <FieldWrapper> list = new List <FieldWrapper>();

            foreach (FieldWrapper fw in tw.GetFields())
            {
                if (!fw.IsHideFromReflection)
                {
                    list.Add(fw);
                }
            }
            list.Sort(delegate(FieldWrapper fw1, FieldWrapper fw2) { return(String.CompareOrdinal(fw1.Name, fw2.Name)); });
            foreach (FieldWrapper fw in list)
            {
                Modifiers mods = fw.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Volatile | Modifiers.Transient);
                if (((mods & Modifiers.Private) == 0) || ((mods & (Modifiers.Static | Modifiers.Transient)) == 0))
                {
                    bes.WriteUtf8(fw.Name);
                    bes.WriteUInt32((uint)mods);
                    bes.WriteUtf8(fw.Signature.Replace('.', '/'));
                }
            }
        }
コード例 #16
0
		private static void WriteStaticInitializer(BigEndianStream bes, TypeWrapper tw)
		{
			Type type = tw.TypeAsTBD;
			if (!type.IsArray && type.TypeInitializer != null)
			{
				if (!AttributeHelper.IsHideFromJava(type.TypeInitializer))
				{
					bes.WriteUtf8("<clinit>");
					bes.WriteUInt32((uint)Modifiers.Static);
					bes.WriteUtf8("()V");
				}
			}
		}
コード例 #17
0
		public override void Write(BigEndianStream bes)
		{
			base.Write(bes);
			bes.WriteUInt32((uint)data.Length);
			bes.WriteBytes(data);
		}
コード例 #18
0
		public override void Write(BigEndianStream bes)
		{
			base.Write(bes);
			if (flags == null || names == null || flags.Length != names.Length)
			{
				// write a malformed MethodParameters attribute
				bes.WriteUInt32(0);
				return;
			}
			bes.WriteUInt32((uint)(1 + names.Length * 4));
			bes.WriteByte((byte)names.Length);
			for (int i = 0; i < names.Length; i++)
			{
				bes.WriteUInt16(names[i]);
				bes.WriteUInt16(flags[i]);
			}
		}
コード例 #19
0
ファイル: ClassFileWriter.cs プロジェクト: T0pp3r/ikvm-fork
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(1 + names.Length * 4));
     bes.WriteByte((byte)names.Length);
     foreach (ushort idx in names)
     {
         bes.WriteUInt16(idx);
         bes.WriteUInt16(0);
     }
 }
コード例 #20
0
 public override void Write(BigEndianStream bes)
 {
     bes.WriteByte((byte)Constant.Integer);
     bes.WriteUInt32((uint)v);
 }
コード例 #21
0
		private static void WriteFields(BigEndianStream bes, TypeWrapper tw)
		{
			List<FieldWrapper> list = new List<FieldWrapper>();
			foreach (FieldWrapper fw in tw.GetFields())
			{
				if (!fw.IsHideFromReflection)
				{
					list.Add(fw);
				}
			}
			list.Sort(delegate(FieldWrapper fw1, FieldWrapper fw2) { return String.CompareOrdinal(fw1.Name, fw2.Name); });
			foreach (FieldWrapper fw in list)
			{
				Modifiers mods = fw.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Volatile | Modifiers.Transient);
				if (((mods & Modifiers.Private) == 0) || ((mods & (Modifiers.Static | Modifiers.Transient)) == 0))
				{
					bes.WriteUtf8(fw.Name);
					bes.WriteUInt32((uint)mods);
					bes.WriteUtf8(fw.Signature.Replace('.', '/'));
				}
			}
		}
コード例 #22
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(2);
     bes.WriteUInt16(string_index);
 }
コード例 #23
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(0);
 }
コード例 #24
0
 public override void Write(BigEndianStream bes)
 {
     bes.WriteByte((byte)Constant.Integer);
     bes.WriteUInt32((uint)v);
 }
コード例 #25
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     uint length = 1;
     foreach (RuntimeVisibleAnnotationsAttribute attr in parameters)
     {
         length += attr.Length;
     }
     bes.WriteUInt32(length);
     bes.WriteByte((byte)parameters.Count);
     foreach (RuntimeVisibleAnnotationsAttribute attr in parameters)
     {
         attr.WriteImpl(bes);
     }
 }
コード例 #26
0
 public void Write(Stream stream)
 {
     BigEndianStream bes = new BigEndianStream(stream);
     bes.WriteUInt32(0xCAFEBABE);
     bes.WriteUInt16(minorVersion);
     bes.WriteUInt16(majorVersion);
     bes.WriteUInt16((ushort)cplist.Count);
     foreach (ConstantPoolItem cpi in cplist)
     {
         if (cpi != null)
         {
             cpi.Write(bes);
         }
     }
     bes.WriteUInt16((ushort)access_flags);
     bes.WriteUInt16(this_class);
     bes.WriteUInt16(super_class);
     // interfaces count
     bes.WriteUInt16((ushort)interfaces.Count);
     for (int i = 0; i < interfaces.Count; i++)
     {
         bes.WriteUInt16(interfaces[i]);
     }
     // fields count
     bes.WriteUInt16((ushort)fields.Count);
     for (int i = 0; i < fields.Count; i++)
     {
         fields[i].Write(bes);
     }
     // methods count
     bes.WriteUInt16((ushort)methods.Count);
     for (int i = 0; i < methods.Count; i++)
     {
         methods[i].Write(bes);
     }
     // attributes count
     bes.WriteUInt16((ushort)attribs.Count);
     for (int i = 0; i < attribs.Count; i++)
     {
         attribs[i].Write(bes);
     }
 }
コード例 #27
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(2);
     bes.WriteUInt16(constant_index);
 }
コード例 #28
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(buf.Length));
     foreach (byte b in buf)
     {
         bes.WriteByte(b);
     }
 }
コード例 #29
0
		private static void WriteMethods(BigEndianStream bes, TypeWrapper tw)
		{
			List<MethodWrapper> list = new List<MethodWrapper>();
			foreach (MethodWrapper mw in tw.GetMethods())
			{
				if (mw.Name != StringConstants.INIT && !mw.IsHideFromReflection && !mw.IsPrivate)
				{
					list.Add(mw);
				}
			}
			list.Sort(delegate(MethodWrapper mw1, MethodWrapper mw2) {
				if (mw1.Name == mw2.Name)
					return String.CompareOrdinal(mw1.Signature, mw2.Signature);
				return String.CompareOrdinal(mw1.Name, mw2.Name); 
			});
			foreach (MethodWrapper mw in list)
			{
				Modifiers mods = mw.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Synchronized | Modifiers.Native | Modifiers.Abstract | Modifiers.Strictfp);
				bes.WriteUtf8(mw.Name);
				bes.WriteUInt32((uint)mods);
				bes.WriteUtf8(mw.Signature);
			}
		}
コード例 #30
0
ファイル: ClassFileWriter.cs プロジェクト: parhelia512/ikvm-1
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)data.Length);
     bes.WriteBytes(data);
 }
コード例 #31
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(Length);
     WriteImpl(bes);
 }
コード例 #32
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 8 * classes.Count));
     bes.WriteUInt16((ushort)classes.Count);
     foreach (Item i in classes)
     {
         bes.WriteUInt16(i.inner_class_info_index);
         bes.WriteUInt16(i.outer_class_info_index);
         bes.WriteUInt16(i.inner_name_index);
         bes.WriteUInt16(i.inner_class_access_flags);
     }
 }
コード例 #33
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(Length);
     WriteImpl(bes);
 }
コード例 #34
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32(0);
 }
コード例 #35
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 2 + 4 + code.Length + 2 + 2));
     bes.WriteUInt16(max_stack);
     bes.WriteUInt16(max_locals);
     bes.WriteUInt32((uint)code.Length);
     for (int i = 0; i < code.Length; i++)
     {
         bes.WriteByte(code[i]);
     }
     bes.WriteUInt16(0);	// no exceptions
     bes.WriteUInt16(0); // no attributes
 }
コード例 #36
0
 public override void Write(BigEndianStream bes)
 {
     base.Write(bes);
     bes.WriteUInt32((uint)(2 + 2 * classes.Count));
     bes.WriteUInt16((ushort)classes.Count);
     foreach (ushort idx in classes)
     {
         bes.WriteUInt16(idx);
     }
 }
コード例 #37
0
		public override void Write(BigEndianStream bes)
		{
			base.Write(bes);
			bes.WriteUInt32((uint)(mem.Length + 2));
			bes.WriteUInt16(count);
			foreach (byte b in mem.ToArray())
			{
				bes.WriteByte(b);
			}
		}