ikvm-commit Mailing List for IKVM.NET (Page 2)
Brought to you by:
jfrijters
You can subscribe to this list here.
2007 |
Jan
(25) |
Feb
(22) |
Mar
(32) |
Apr
(77) |
May
(111) |
Jun
(129) |
Jul
(223) |
Aug
(109) |
Sep
(60) |
Oct
(60) |
Nov
(36) |
Dec
(55) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(23) |
Feb
(76) |
Mar
(42) |
Apr
(49) |
May
(33) |
Jun
(64) |
Jul
(19) |
Aug
(124) |
Sep
(16) |
Oct
|
Nov
(87) |
Dec
(54) |
2009 |
Jan
(53) |
Feb
(116) |
Mar
(86) |
Apr
(64) |
May
(101) |
Jun
(99) |
Jul
(105) |
Aug
(63) |
Sep
(20) |
Oct
(110) |
Nov
(102) |
Dec
(36) |
2010 |
Jan
(87) |
Feb
(67) |
Mar
(5) |
Apr
(100) |
May
(178) |
Jun
(95) |
Jul
(22) |
Aug
(85) |
Sep
(82) |
Oct
(99) |
Nov
(119) |
Dec
(132) |
2011 |
Jan
(130) |
Feb
(18) |
Mar
(114) |
Apr
(8) |
May
(21) |
Jun
(53) |
Jul
(127) |
Aug
(111) |
Sep
(29) |
Oct
(28) |
Nov
(64) |
Dec
(94) |
2012 |
Jan
(56) |
Feb
(8) |
Mar
(65) |
Apr
(48) |
May
(22) |
Jun
(52) |
Jul
(73) |
Aug
(38) |
Sep
(18) |
Oct
(59) |
Nov
(16) |
Dec
(21) |
2013 |
Jan
(83) |
Feb
(151) |
Mar
(102) |
Apr
(13) |
May
(37) |
Jun
(1) |
Jul
(7) |
Aug
(42) |
Sep
(28) |
Oct
(13) |
Nov
(5) |
Dec
(3) |
2014 |
Jan
(3) |
Feb
(39) |
Mar
(11) |
Apr
(40) |
May
(62) |
Jun
(54) |
Jul
(21) |
Aug
(3) |
Sep
|
Oct
(15) |
Nov
(26) |
Dec
(7) |
2015 |
Jan
(6) |
Feb
(12) |
Mar
(51) |
Apr
(15) |
May
(7) |
Jun
(41) |
Jul
(2) |
Aug
(8) |
Sep
(5) |
Oct
(6) |
Nov
(11) |
Dec
(1) |
2016 |
Jan
|
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
(2) |
Jul
(19) |
Aug
(2) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
(2) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jeroen F. <jfr...@us...> - 2016-07-01 04:51:53
|
Update of /cvsroot/ikvm/ikvm/reflect In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv29694 Modified Files: AssemblyName.cs Log Message: Avoid SHA1Managed. Index: AssemblyName.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/AssemblyName.cs,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** AssemblyName.cs 3 Nov 2015 08:19:21 -0000 1.34 --- AssemblyName.cs 1 Jul 2016 04:51:51 -0000 1.35 *************** *** 398,402 **** return publicKey; } ! byte[] hash = new SHA1Managed().ComputeHash(publicKey); byte[] token = new byte[8]; for (int i = 0; i < token.Length; i++) --- 398,406 ---- return publicKey; } ! byte[] hash; ! using (SHA1 sha1 = SHA1.Create()) ! { ! hash = sha1.ComputeHash(publicKey); ! } byte[] token = new byte[8]; for (int i = 0; i < token.Length; i++) |
From: Jeroen F. <jfr...@us...> - 2016-06-30 06:01:03
|
Update of /cvsroot/ikvm/ikvm/reflect/Writer In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv25310/Writer Modified Files: ModuleWriter.cs Log Message: Avoid SHA1Managed and CryptoStream. Index: ModuleWriter.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Writer/ModuleWriter.cs,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** ModuleWriter.cs 29 Jun 2016 12:28:02 -0000 1.30 --- ModuleWriter.cs 30 Jun 2016 06:01:01 -0000 1.31 *************** *** 383,400 **** private static void StrongName(Stream stream, StrongNameKeyPair keyPair, uint headerLength, uint textSectionFileOffset, uint strongNameSignatureFileOffset, uint strongNameSignatureLength) { ! SHA1Managed hash = new SHA1Managed(); ! using (CryptoStream cs = new CryptoStream(Stream.Null, hash, CryptoStreamMode.Write)) { stream.Seek(0, SeekOrigin.Begin); ! byte[] buf = new byte[8192]; ! HashChunk(stream, cs, buf, (int)headerLength); ! stream.Seek(textSectionFileOffset, SeekOrigin.Begin); ! HashChunk(stream, cs, buf, (int)(strongNameSignatureFileOffset - textSectionFileOffset)); ! stream.Seek(strongNameSignatureLength, SeekOrigin.Current); ! HashChunk(stream, cs, buf, (int)(stream.Length - (strongNameSignatureFileOffset + strongNameSignatureLength))); } using (RSACryptoServiceProvider rsa = keyPair.CreateRSA()) { ! byte[] signature = rsa.SignHash(hash.Hash, "1.3.14.3.2.26"); Array.Reverse(signature); if (signature.Length != strongNameSignatureLength) --- 383,397 ---- private static void StrongName(Stream stream, StrongNameKeyPair keyPair, uint headerLength, uint textSectionFileOffset, uint strongNameSignatureFileOffset, uint strongNameSignatureLength) { ! byte[] hash; ! using (SHA1 sha1 = SHA1.Create()) { stream.Seek(0, SeekOrigin.Begin); ! Stream skipStream = new SkipStream(stream, strongNameSignatureFileOffset, strongNameSignatureLength); ! skipStream = new SkipStream(skipStream, headerLength, textSectionFileOffset - headerLength); ! hash = sha1.ComputeHash(skipStream); } using (RSACryptoServiceProvider rsa = keyPair.CreateRSA()) { ! byte[] signature = rsa.SignHash(hash, "1.3.14.3.2.26"); Array.Reverse(signature); if (signature.Length != strongNameSignatureLength) *************** *** 431,455 **** } - internal static void HashChunk(Stream stream, CryptoStream cs, byte[] buf, int length) - { - while (length > 0) - { - int read = stream.Read(buf, 0, Math.Min(buf.Length, length)); - cs.Write(buf, 0, read); - length -= read; - } - } - private static Guid GenerateModuleVersionId(Stream stream) { ! SHA1Managed hash = new SHA1Managed(); ! using (CryptoStream cs = new CryptoStream(Stream.Null, hash, CryptoStreamMode.Write)) { stream.Seek(0, SeekOrigin.Begin); ! byte[] buf = new byte[8192]; ! HashChunk(stream, cs, buf, (int)stream.Length); } byte[] bytes = new byte[16]; ! Buffer.BlockCopy(hash.Hash, 0, bytes, 0, bytes.Length); // set GUID type to "version 4" (random) bytes[7] &= 0x0F; --- 428,441 ---- } private static Guid GenerateModuleVersionId(Stream stream) { ! byte[] hash; ! using (SHA1 sha1 = SHA1.Create()) { stream.Seek(0, SeekOrigin.Begin); ! hash = sha1.ComputeHash(stream); } byte[] bytes = new byte[16]; ! Buffer.BlockCopy(hash, 0, bytes, 0, bytes.Length); // set GUID type to "version 4" (random) bytes[7] &= 0x0F; *************** *** 460,462 **** --- 446,543 ---- } } + + sealed class SkipStream : Stream + { + private readonly Stream stream; + private long skipOffset; + private long skipLength; + + internal SkipStream(Stream stream, long skipOffset, long skipLength) + { + if (skipOffset < 0 || skipLength < 0) + { + throw new ArgumentOutOfRangeException(); + } + this.stream = stream; + this.skipOffset = skipOffset; + this.skipLength = skipLength; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + stream.Dispose(); + } + } + + public override bool CanRead + { + get { return stream.CanRead; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return false; } + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (skipLength != 0 && skipOffset < count) + { + if (skipOffset != 0) + { + count = (int)skipOffset; + } + else + { + // note that we loop forever if the skipped part lies beyond EOF + while (skipLength != 0) + { + // use the output buffer as scratch space + skipLength -= stream.Read(buffer, offset, (int)Math.Min(count, skipLength)); + } + } + } + int totalBytesRead = stream.Read(buffer, offset, count); + skipOffset -= totalBytesRead; + return totalBytesRead; + } + + public override long Length + { + get { throw new NotSupportedException(); } + } + + public override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override void Flush() + { + throw new NotSupportedException(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + } } |
From: Jeroen F. <jfr...@us...> - 2016-06-29 12:28:04
|
Update of /cvsroot/ikvm/ikvm/reflect/Writer In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9784 Modified Files: ModuleWriter.cs Log Message: Bypass RSAPKCS1SignatureFormatter. Index: ModuleWriter.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Writer/ModuleWriter.cs,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** ModuleWriter.cs 27 Aug 2015 12:15:45 -0000 1.29 --- ModuleWriter.cs 29 Jun 2016 12:28:02 -0000 1.30 *************** *** 394,401 **** HashChunk(stream, cs, buf, (int)(stream.Length - (strongNameSignatureFileOffset + strongNameSignatureLength))); } ! using (RSA rsa = keyPair.CreateRSA()) { ! RSAPKCS1SignatureFormatter sign = new RSAPKCS1SignatureFormatter(rsa); ! byte[] signature = sign.CreateSignature(hash); Array.Reverse(signature); if (signature.Length != strongNameSignatureLength) --- 394,400 ---- HashChunk(stream, cs, buf, (int)(stream.Length - (strongNameSignatureFileOffset + strongNameSignatureLength))); } ! using (RSACryptoServiceProvider rsa = keyPair.CreateRSA()) { ! byte[] signature = rsa.SignHash(hash.Hash, "1.3.14.3.2.26"); Array.Reverse(signature); if (signature.Length != strongNameSignatureLength) |
From: Jeroen F. <jfr...@us...> - 2016-04-21 11:52:44
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26190 Modified Files: LambdaMetafactory.cs Log Message: Bug fix. Lambda return type conversion from primitive to Object failed. Index: LambdaMetafactory.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/LambdaMetafactory.cs,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** LambdaMetafactory.cs 5 Mar 2015 12:44:01 -0000 1.11 --- LambdaMetafactory.cs 21 Apr 2016 11:52:41 -0000 1.12 *************** *** 635,639 **** else if (Ra.IsPrimitive) { ! Boxer.EmitBox(ilgen, GetPrimitiveFromWrapper(Rt)); } else --- 635,644 ---- else if (Ra.IsPrimitive) { ! TypeWrapper tw = GetPrimitiveFromWrapper(Rt); ! if (tw == null) ! { ! tw = Ra; ! } ! Boxer.EmitBox(ilgen, tw); } else |
From: Jeroen F. <jfr...@us...> - 2016-02-19 16:55:37
|
Update of /cvsroot/ikvm/ikvm/tools In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30643 Modified Files: implib.cs Log Message: Added -keyfile: option. Thanks to Jo Shields. Index: implib.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/tools/implib.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** implib.cs 7 Feb 2013 12:11:02 -0000 1.2 --- implib.cs 19 Feb 2016 16:55:27 -0000 1.3 *************** *** 106,109 **** --- 106,116 ---- options.key = new StrongNameKeyPair(arg.Substring(5)); } + else if (arg.StartsWith("-keyfile:", StringComparison.Ordinal)) + { + using (FileStream fs = File.OpenRead(arg.Substring(9))) + { + options.key = new StrongNameKeyPair(fs); + } + } else if (arg.StartsWith("-version:", StringComparison.Ordinal)) { |
From: Jeroen F. <jfr...@us...> - 2015-12-12 10:10:20
|
Update of /cvsroot/ikvm/ikvm/openjdk/sun/misc In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21181 Modified Files: Unsafe.java Log Message: Added Unsafe.setMemory(Object, ...) overload. Index: Unsafe.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/sun/misc/Unsafe.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** Unsafe.java 31 May 2015 08:43:55 -0000 1.35 --- Unsafe.java 12 Dec 2015 10:10:17 -0000 1.36 *************** *** 916,919 **** --- 916,949 ---- @SecurityPermissionAttribute.Annotation(value = SecurityAction.__Enum.LinkDemand, UnmanagedCode = true) @cli.System.Security.SecurityCriticalAttribute.Annotation + public void setMemory(Object o, long offset, long bytes, byte value) + { + if (o == null) + { + setMemory(offset, bytes, value); + } + else if (o instanceof byte[]) + { + byte[] array = (byte[])o; + for (int i = 0; i < bytes; i++) + { + array[(int)(offset + i)] = value; + } + } + else if (o instanceof cli.System.Array) + { + cli.System.Array array = (cli.System.Array)o; + for (int i = 0; i < bytes; i++) + { + cli.System.Buffer.SetByte(array, (int)(offset + i), value); + } + } + else + { + throw new IllegalArgumentException(); + } + } + + @SecurityPermissionAttribute.Annotation(value = SecurityAction.__Enum.LinkDemand, UnmanagedCode = true) + @cli.System.Security.SecurityCriticalAttribute.Annotation public void copyMemory(long srcAddress, long destAddress, long bytes) { |
From: Jeroen F. <jfr...@us...> - 2015-11-30 08:43:45
|
Update of /cvsroot/ikvm/ikvm/openjdk/sun/nio/fs In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv23446 Modified Files: NetFileSystemProvider.java Log Message: Forgot to add SecuritySafeCriticalAttribute. Index: NetFileSystemProvider.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/sun/nio/fs/NetFileSystemProvider.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** NetFileSystemProvider.java 26 Aug 2015 10:19:11 -0000 1.20 --- NetFileSystemProvider.java 30 Nov 2015 08:43:42 -0000 1.21 *************** *** 626,629 **** --- 626,630 ---- } + @cli.System.Security.SecuritySafeCriticalAttribute.Annotation public void move(Path source, Path target, CopyOption... options) throws IOException { |
From: Jeroen F. <jfr...@us...> - 2015-11-17 09:02:43
|
Update of /cvsroot/ikvm/ikvm/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8900 Modified Files: openjdk.build Log Message: Fix Linux build (bug #306). Index: openjdk.build =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/openjdk.build,v retrieving revision 1.115 retrieving revision 1.116 diff -C2 -d -r1.115 -r1.116 *** openjdk.build 17 Nov 2015 08:30:29 -0000 1.115 --- openjdk.build 17 Nov 2015 09:02:41 -0000 1.116 *************** *** 1,5 **** <?xml version="1.0"?> <!-- ! Copyright (C) 2002-2014 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,5 ---- <?xml version="1.0"?> <!-- ! Copyright (C) 2002-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 220,223 **** --- 220,234 ---- <target name="run-nasgen" depends="classpath"> <!-- nasgen doesn't understand the MethodParameters attribute, so we have to recompile the classes it processes without parameters --> + <property name="nasgen-sources" value="" /> + <foreach item="File" property="nasgen-src-file"> + <in> + <items> + <include name="${OpenJDK.dir}/nashorn/src/jdk/nashorn/internal/objects/*.java" /> + </items> + </in> + <do> + <property name="nasgen-sources" value="${nasgen-sources} ${nasgen-src-file}" /> + </do> + </foreach> <exec program="javac" useruntimeengine="false"> <arg value="-XDignore.symbol.file" /> *************** *** 227,231 **** <arg value="-bootclasspath" /> <arg path="${CLASSPATH};${OpenJDK.dir}/nashorn/src;../runtime/IKVM.Runtime.jar" /> ! <arg value="${OpenJDK.dir}/nashorn/src/jdk/nashorn/internal/objects/*.java" /> </exec> <exec program="java" useruntimeengine="false"> --- 238,242 ---- <arg value="-bootclasspath" /> <arg path="${CLASSPATH};${OpenJDK.dir}/nashorn/src;../runtime/IKVM.Runtime.jar" /> ! <arg line="${nasgen-sources}" /> </exec> <exec program="java" useruntimeengine="false"> |
From: Jeroen F. <jfr...@us...> - 2015-11-17 08:30:31
|
Update of /cvsroot/ikvm/ikvm/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv7801 Modified Files: openjdk.build Log Message: Partial Linux build fix (bug #306). Index: openjdk.build =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/openjdk.build,v retrieving revision 1.114 retrieving revision 1.115 diff -C2 -d -r1.114 -r1.115 *** openjdk.build 9 Jun 2015 09:28:43 -0000 1.114 --- openjdk.build 17 Nov 2015 08:30:29 -0000 1.115 *************** *** 123,127 **** <include name="System.Data.jar" /> <include name="System.Drawing.jar" /> ! <include name="System.XML.jar" /> </fileset> </delete> --- 123,127 ---- <include name="System.Data.jar" /> <include name="System.Drawing.jar" /> ! <include name="System.Xml.jar" /> </fileset> </delete> *************** *** 137,141 **** <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Data" useruntimeengine="true" /> <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Drawing" useruntimeengine="true" /> ! <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.XML" useruntimeengine="true" /> </target> --- 137,141 ---- <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Data" useruntimeengine="true" /> <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Drawing" useruntimeengine="true" /> ! <exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Xml" useruntimeengine="true" /> </target> *************** *** 184,188 **** <arg line="-cp dummy" /> <arg value="-bootclasspath" /> ! <arg path="mscorlib.jar;System.jar;System.Core.jar;System.Data.jar;System.Drawing.jar;System.XML.jar;../runtime/IKVM.Runtime.jar" /> <arg value="@allsources.gen.lst" /> </exec> --- 184,188 ---- <arg line="-cp dummy" /> <arg value="-bootclasspath" /> ! <arg path="mscorlib.jar;System.jar;System.Core.jar;System.Data.jar;System.Drawing.jar;System.Xml.jar;../runtime/IKVM.Runtime.jar" /> <arg value="@allsources.gen.lst" /> </exec> |
From: Jeroen F. <jfr...@us...> - 2015-11-16 13:59:07
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31059 Modified Files: AssemblyClassLoader.cs Log Message: Bug fix. If multiple threads initiated a dynamic (late bound) class load from an ikvmc compiled assembly for the same class, that could result in a "duplicate class definition" LinkageError. Index: AssemblyClassLoader.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/AssemblyClassLoader.cs,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** AssemblyClassLoader.cs 24 Mar 2015 09:15:03 -0000 1.67 --- AssemblyClassLoader.cs 16 Nov 2015 13:59:04 -0000 1.68 *************** *** 744,750 **** private TypeWrapper DefineDynamic(string name, java.net.URL url) { using (java.io.InputStream inp = url.openStream()) { ! byte[] buf = new byte[inp.available()]; for (int pos = 0; pos < buf.Length; ) { --- 744,751 ---- private TypeWrapper DefineDynamic(string name, java.net.URL url) { + byte[] buf; using (java.io.InputStream inp = url.openStream()) { ! buf = new byte[inp.available()]; for (int pos = 0; pos < buf.Length; ) { *************** *** 756,760 **** pos += read; } ! return TypeWrapper.FromClass(Java_java_lang_ClassLoader.defineClass1(GetJavaClassLoader(), name, buf, 0, buf.Length, GetProtectionDomain(), null)); } } --- 757,773 ---- pos += read; } ! } ! // when the VM initiates a class load, it doesn't go through ClassLoader.loadClass() for non-custom Assembly class loaders (for efficiency) ! // so when we dynamically attempt to define a class, we have to explicitly obtain the class loading lock to prevent race conditions ! java.lang.ClassLoader loader = GetJavaClassLoader(); ! lock (loader == null ? this : loader.getClassLoadingLock(name)) ! { ! // make sure the class wasn't defined since we last checked and before we acquired the lock ! TypeWrapper tw = FindLoadedClass(name); ! if (tw != null) ! { ! return tw; ! } ! return TypeWrapper.FromClass(Java_java_lang_ClassLoader.defineClass1(loader, name, buf, 0, buf.Length, GetProtectionDomain(), null)); } } |
From: Jeroen F. <jfr...@us...> - 2015-11-03 10:37:00
|
Update of /cvsroot/ikvm/ikvm/reflect/Emit In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8111 Modified Files: CustomAttributeBuilder.cs Log Message: Bug fix. Don't crash on generic custom attributes. Index: CustomAttributeBuilder.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Emit/CustomAttributeBuilder.cs,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** CustomAttributeBuilder.cs 6 Apr 2015 07:12:29 -0000 1.23 --- CustomAttributeBuilder.cs 3 Nov 2015 10:36:58 -0000 1.24 *************** *** 674,678 **** get { ! TypeName typeName = con.DeclaringType.TypeName; switch (typeName.Namespace) { --- 674,684 ---- get { ! Type attributeType = con.DeclaringType; ! if (attributeType.IsConstructedGenericType) ! { ! // a constructed generic type doesn't have a TypeName and we already know it's not a Known CA ! return KnownCA.Unknown; ! } ! TypeName typeName = attributeType.TypeName; switch (typeName.Namespace) { |
From: Jeroen F. <jfr...@us...> - 2015-11-03 10:05:58
|
Update of /cvsroot/ikvm/ikvm/reflect In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv5126 Modified Files: Binder.cs Log Message: Bind type parameters when matching signatures. Index: Binder.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Binder.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Binder.cs 22 Nov 2013 07:15:57 -0000 1.6 --- Binder.cs 3 Nov 2015 10:05:56 -0000 1.7 *************** *** 110,114 **** private static void SelectBestMatch(MethodBase candidate, Type[] types, ref MethodBase currentBest, ref bool ambiguous) { ! switch (MatchSignatures(currentBest.MethodSignature, candidate.MethodSignature, types)) { case 1: --- 110,114 ---- private static void SelectBestMatch(MethodBase candidate, Type[] types, ref MethodBase currentBest, ref bool ambiguous) { ! switch (MatchSignatures(currentBest, candidate, types)) { case 1: *************** *** 150,159 **** } ! private static int MatchSignatures(MethodSignature sig1, MethodSignature sig2, Type[] types) { for (int i = 0; i < sig1.GetParameterCount(); i++) { ! Type type1 = sig1.GetParameterType(i); ! Type type2 = sig2.GetParameterType(i); if (type1 != type2) { --- 150,163 ---- } ! private static int MatchSignatures(MethodBase mb1, MethodBase mb2, Type[] types) { + MethodSignature sig1 = mb1.MethodSignature; + MethodSignature sig2 = mb2.MethodSignature; + IGenericBinder gb1 = mb1 as IGenericBinder ?? mb1.DeclaringType; + IGenericBinder gb2 = mb2 as IGenericBinder ?? mb2.DeclaringType; for (int i = 0; i < sig1.GetParameterCount(); i++) { ! Type type1 = sig1.GetParameterType(gb1, i); ! Type type2 = sig2.GetParameterType(gb2, i); if (type1 != type2) { |
From: Jeroen F. <jfr...@us...> - 2015-11-03 09:28:20
|
Update of /cvsroot/ikvm/ikvm/reflect In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv2175 Modified Files: Type.cs Log Message: Added a dedicated MarkerType for circular type forwarding detection, instead of abusing MarkerType.Pinned. Index: Type.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Type.cs,v retrieving revision 1.110 retrieving revision 1.111 diff -C2 -d -r1.110 -r1.111 *** Type.cs 3 Nov 2015 09:10:24 -0000 1.110 --- Type.cs 3 Nov 2015 09:28:18 -0000 1.111 *************** *** 3242,3245 **** --- 3242,3247 ---- internal static readonly Type Sentinel = new MarkerType(Signature.SENTINEL); internal static readonly Type Pinned = new MarkerType(Signature.ELEMENT_TYPE_PINNED); + // used by ModuleReader.LazyForwardedType + internal static readonly Type LazyResolveInProgress = new MarkerType(0xFF); private MarkerType(byte sigElementType) |
From: Jeroen F. <jfr...@us...> - 2015-11-03 09:24:23
|
Update of /cvsroot/ikvm/ikvm/reflect/Reader In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv2007 Modified Files: Method.cs Log Message: Tiny optimization. There's no need to instantiate the method parameters when getting the return type. Index: Method.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Reader/Method.cs,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** Method.cs 21 Apr 2015 10:15:39 -0000 1.31 --- Method.cs 3 Nov 2015 09:24:21 -0000 1.32 *************** *** 140,144 **** get { ! return this.ReturnParameter.ParameterType; } } --- 140,144 ---- get { ! return this.MethodSignature.GetReturnType(this); } } |
From: Jeroen F. <jfr...@us...> - 2015-11-03 09:15:07
|
Update of /cvsroot/ikvm/ikvm/reflect/Reader In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1621 Modified Files: Authenticode.cs Log Message: Make sure we read the entire certificate table. Index: Authenticode.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Reader/Authenticode.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Authenticode.cs 21 Nov 2012 07:36:04 -0000 1.3 --- Authenticode.cs 3 Nov 2015 09:15:04 -0000 1.4 *************** *** 76,81 **** return null; } ! byte[] buf = new byte[certificateTableLength - 8]; ! stream.Read(buf, 0, buf.Length); SignedCms cms = new SignedCms(); --- 76,80 ---- return null; } ! byte[] buf = br.ReadBytes(certificateTableLength - 8); SignedCms cms = new SignedCms(); |
From: Jeroen F. <jfr...@us...> - 2015-11-03 09:10:26
|
Update of /cvsroot/ikvm/ikvm/reflect In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1405 Modified Files: Missing.cs Type.cs Log Message: Added caching to Type.IsValueType. Index: Missing.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Missing.cs,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** Missing.cs 21 Apr 2015 10:15:39 -0000 1.54 --- Missing.cs 3 Nov 2015 09:10:24 -0000 1.55 *************** *** 480,484 **** } ! public override bool IsValueType { get --- 480,484 ---- } ! protected override bool IsValueTypeImpl { get Index: Type.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Type.cs,v retrieving revision 1.109 retrieving revision 1.110 diff -C2 -d -r1.109 -r1.110 *** Type.cs 23 Jun 2015 11:47:48 -0000 1.109 --- Type.cs 3 Nov 2015 09:10:24 -0000 1.110 *************** *** 59,63 **** Baked = 4, ! // for use by MissingType ValueType = 8, NotValueType = 16, --- 59,63 ---- Baked = 4, ! // for use by IsValueType to cache result of IsValueTypeImpl ValueType = 8, NotValueType = 16, *************** *** 223,237 **** } ! public virtual bool IsValueType { get { ! Type baseType = this.BaseType; ! return baseType != null ! && baseType.IsEnumOrValueType ! && !this.IsEnumOrValueType; } } public bool IsGenericParameter { --- 223,246 ---- } ! public bool IsValueType { get { ! // MissingType sets both flags for WinRT projection types ! switch (typeFlags & (TypeFlags.ValueType | TypeFlags.NotValueType)) ! { ! case 0: ! case TypeFlags.ValueType | TypeFlags.NotValueType: ! return IsValueTypeImpl; ! } ! return (typeFlags & TypeFlags.ValueType) != 0; } } + protected abstract bool IsValueTypeImpl + { + get; + } + public bool IsGenericParameter { *************** *** 2212,2216 **** } ! private bool IsEnumOrValueType { get --- 2221,2225 ---- } ! internal bool IsEnumOrValueType { get *************** *** 2360,2363 **** --- 2369,2377 ---- } + protected sealed override bool IsValueTypeImpl + { + get { return false; } + } + internal sealed override Type BindTypeParameters(IGenericBinder binder) { *************** *** 2875,2879 **** } ! public override bool IsValueType { get { return type.IsValueType; } --- 2889,2893 ---- } ! protected override bool IsValueTypeImpl { get { return type.IsValueType; } *************** *** 3213,3216 **** --- 3227,3235 ---- get { return true; } } + + protected override bool IsValueTypeImpl + { + get { return false; } + } } *************** *** 3263,3266 **** --- 3282,3290 ---- get { return false; } } + + protected override bool IsValueTypeImpl + { + get { throw new InvalidOperationException(); } + } } } |
From: Jeroen F. <jfr...@us...> - 2015-11-03 08:19:24
|
Update of /cvsroot/ikvm/ikvm/reflect/Emit In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31768/Emit Modified Files: AssemblyBuilder.cs ModuleBuilder.cs Log Message: Added AssemblyName.CultureName property setter that was introduced with .NET 4.6. Index: ModuleBuilder.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Emit/ModuleBuilder.cs,v retrieving revision 1.105 retrieving revision 1.106 diff -C2 -d -r1.105 -r1.106 *** ModuleBuilder.cs 27 Aug 2015 12:15:44 -0000 1.105 --- ModuleBuilder.cs 3 Nov 2015 08:19:22 -0000 1.106 *************** *** 980,984 **** rec.PublicKeyOrToken = this.Blobs.Add(ByteBuffer.Wrap(publicKeyOrToken)); rec.Name = this.Strings.Add(name.Name); ! rec.Culture = name.Culture == null ? 0 : this.Strings.Add(name.Culture); if (name.hash != null) { --- 980,984 ---- rec.PublicKeyOrToken = this.Blobs.Add(ByteBuffer.Wrap(publicKeyOrToken)); rec.Name = this.Strings.Add(name.Name); ! rec.Culture = name.CultureName == null ? 0 : this.Strings.Add(name.CultureName); if (name.hash != null) { Index: AssemblyBuilder.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Emit/AssemblyBuilder.cs,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** AssemblyBuilder.cs 16 Feb 2015 12:24:28 -0000 1.61 --- AssemblyBuilder.cs 3 Nov 2015 08:19:22 -0000 1.62 *************** *** 93,99 **** this.name = name.Name; SetVersionHelper(name.Version); ! if (!string.IsNullOrEmpty(name.Culture)) { ! this.culture = name.Culture; } this.flags = name.RawFlags; --- 93,99 ---- this.name = name.Name; SetVersionHelper(name.Version); ! if (!string.IsNullOrEmpty(name.CultureName)) { ! this.culture = name.CultureName; } this.flags = name.RawFlags; *************** *** 226,230 **** n.Name = name; n.Version = new Version(majorVersion, minorVersion, buildVersion, revisionVersion); ! n.Culture = culture ?? ""; n.HashAlgorithm = hashAlgorithm; n.RawFlags = flags; --- 226,230 ---- n.Name = name; n.Version = new Version(majorVersion, minorVersion, buildVersion, revisionVersion); ! n.CultureName = culture ?? ""; n.HashAlgorithm = hashAlgorithm; n.RawFlags = flags; |
From: Small S. <sma...@us...> - 2015-10-16 12:33:06
|
Update of /cvsroot/ikvm/ikvm/openjdk/java/awt/image In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv535/openjdk/java/awt/image Modified Files: BufferedImage.java Log Message: Fix a threading bug if 2 threads do the same buffer conversion of a BufferedImage. Index: BufferedImage.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/java/awt/image/BufferedImage.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** BufferedImage.java 3 Sep 2015 15:01:06 -0000 1.21 --- BufferedImage.java 16 Oct 2015 12:33:04 -0000 1.22 *************** *** 297,300 **** --- 297,302 ---- private int currentBuffer; + private boolean isBufferConverting; + private static final int BUFFER_BITMAP = 1; private static final int BUFFER_RASTER = 2; *************** *** 684,687 **** --- 686,690 ---- * Switch to the BITMAP buffer and invalidate the RASTER buffer before a graphics operation. */ + @cli.IKVM.Attributes.HideFromJavaAttribute.Annotation final void toBitmap(){ raster2Bitmap(); *************** *** 690,699 **** /** ! * Switch to the RASTER buffer and invalidate the BITMAP buffer before a graphics operation. */ @cli.IKVM.Attributes.HideFromJavaAttribute.Annotation final void toRaster() { ! bitmap2Raster(); ! currentBuffer = BUFFER_RASTER; } --- 693,708 ---- /** ! * Switch to the RASTER buffer and invalidate the BITMAP buffer before a raster operation. */ @cli.IKVM.Attributes.HideFromJavaAttribute.Annotation final void toRaster() { ! if( bitmap != null ) { ! synchronized( bitmap ) { ! if( !isBufferConverting ) { ! bitmap2Raster(); ! currentBuffer = BUFFER_RASTER; ! } ! } ! } } *************** *** 712,715 **** --- 721,728 ---- bitmap = createBitmap(width, height); synchronized( bitmap ) { + if(currentBuffer != BUFFER_RASTER || isBufferConverting ){ + return; // BUFFER_BOTH and BUFFER_BITMAP + } + isBufferConverting = true; // First map the pixel from Java type to .NET type switch (getType()){ *************** *** 727,730 **** --- 740,744 ---- } this.currentBuffer = BUFFER_BOTH; + isBufferConverting = false; } return; *************** *** 758,762 **** return; // BUFFER_BOTH and BUFFER_RASTER } ! synchronized( bitmap ) { int width = bitmap.get_Width(); int height = bitmap.get_Height(); --- 772,780 ---- return; // BUFFER_BOTH and BUFFER_RASTER } ! synchronized( bitmap ) { ! if( currentBuffer != BUFFER_BITMAP || isBufferConverting ){ ! return; // BUFFER_BOTH and BUFFER_RASTER ! } ! isBufferConverting = true; int width = bitmap.get_Width(); int height = bitmap.get_Height(); *************** *** 769,773 **** } - this.currentBuffer = BUFFER_BOTH; switch (getType()){ case TYPE_INT_ARGB: --- 787,790 ---- *************** *** 783,786 **** --- 800,805 ---- } } + this.currentBuffer = BUFFER_BOTH; + isBufferConverting = false; } } |
From: Jeroen F. <jfr...@us...> - 2015-10-15 11:35:35
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30871 Modified Files: CodeEmitter.cs Log Message: Simplified and optimized OptimizeLdcI8. Index: CodeEmitter.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/CodeEmitter.cs,v retrieving revision 1.94 retrieving revision 1.95 diff -C2 -d -r1.94 -r1.95 *** CodeEmitter.cs 19 Jun 2015 15:09:45 -0000 1.94 --- CodeEmitter.cs 15 Oct 2015 11:35:33 -0000 1.95 *************** *** 1199,1261 **** { long value = code[index].ValueInt64; ! OpCode opc = OpCodes.Nop; ! switch (value) ! { ! case -1: ! opc = OpCodes.Ldc_I4_M1; ! break; ! case 0: ! opc = OpCodes.Ldc_I4_0; ! break; ! case 1: ! opc = OpCodes.Ldc_I4_1; ! break; ! case 2: ! opc = OpCodes.Ldc_I4_2; ! break; ! case 3: ! opc = OpCodes.Ldc_I4_3; ! break; ! case 4: ! opc = OpCodes.Ldc_I4_4; ! break; ! case 5: ! opc = OpCodes.Ldc_I4_5; ! break; ! case 6: ! opc = OpCodes.Ldc_I4_6; ! break; ! case 7: ! opc = OpCodes.Ldc_I4_7; ! break; ! case 8: ! opc = OpCodes.Ldc_I4_8; ! break; ! default: ! if (value >= -2147483648L && value <= 4294967295L) ! { ! if (value >= -128 && value <= 127) ! { ! code[index] = new OpCodeWrapper(OpCodes.Ldc_I4_S, (sbyte)value); ! } ! else ! { ! code[index] = new OpCodeWrapper(OpCodes.Ldc_I4, (int)value); ! } ! if (value < 0) ! { ! code.Insert(index + 1, new OpCodeWrapper(OpCodes.Conv_I8, null)); ! } ! else ! { ! code.Insert(index + 1, new OpCodeWrapper(OpCodes.Conv_U8, null)); ! } ! } ! break; ! } ! if (opc != OpCodes.Nop) { ! code[index] = new OpCodeWrapper(opc, null); ! code.Insert(index + 1, new OpCodeWrapper(OpCodes.Conv_I8, null)); } } --- 1199,1206 ---- { long value = code[index].ValueInt64; ! if (value >= int.MinValue && value <= uint.MaxValue) { ! code[index] = OptimizeLdcI4((int)value); ! code.Insert(index + 1, new OpCodeWrapper(value < 0 ? OpCodes.Conv_I8 : OpCodes.Conv_U8, null)); } } |
From: Jeroen F. <jfr...@us...> - 2015-10-15 11:33:03
|
Update of /cvsroot/ikvm/ikvm In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30750 Modified Files: THANKYOU Log Message: Added Daniel Wilson. Index: THANKYOU =================================================================== RCS file: /cvsroot/ikvm/ikvm/THANKYOU,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** THANKYOU 2 Sep 2015 11:19:41 -0000 1.17 --- THANKYOU 15 Oct 2015 11:33:01 -0000 1.18 *************** *** 25,28 **** --- 25,29 ---- Dawid Weiss Mark Wielaard + Daniel Wilson And, of course, all GNU Classpath, OpenJDK and Mono developers. |
From: Jeroen F. <jfr...@us...> - 2015-10-15 11:30:23
|
Update of /cvsroot/ikvm/ikvm/openjdk/gnu/java/awt/color In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30613/openjdk/gnu/java/awt/color Added Files: CieLabConverter.java Log Message: Added support for TYPE_Lab color space converter. Patch by Daniel Wilson. --- NEW FILE: CieLabConverter.java --- /* * Copyright (C) 2011 http://stackoverflow.com/users/12048/finnw * Copyright (C) 2015 Daniel Wilson * * License: * http://creativecommons.org/licenses/by-sa/2.5/ * * Based on: * http://stackoverflow.com/questions/4593469/java-how-to-convert-rgb-color-to-cie-lab/5021831#5021831 * */ package gnu.java.awt.color; public class CieLabConverter implements ColorSpaceConverter { @Override public float[] fromCIEXYZ(float[] colorvalue) { double l = f(colorvalue[1]); double L = 116.0 * l - 16.0; double a = 500.0 * (f(colorvalue[0]) - l); double b = 200.0 * (l - f(colorvalue[2])); return new float[] {(float) L, (float) a, (float) b}; } @Override public float[] fromRGB(float[] rgbvalue) { float[] xyz = SrgbConverter.RGBtoXYZ(rgbvalue); return fromCIEXYZ(xyz); } @Override public float[] toCIEXYZ(float[] colorvalue) { double i = (colorvalue[0] + 16.0) * (1.0 / 116.0); double X = fInv(i + colorvalue[1] * (1.0 / 500.0)); double Y = fInv(i); double Z = fInv(i - colorvalue[2] * (1.0 / 200.0)); return new float[] {(float) X, (float) Y, (float) Z}; } @Override public float[] toRGB(float[] colorvalue) { float[] xyz = toCIEXYZ(colorvalue); return SrgbConverter.XYZtoRGB(xyz); } private static double f(double x) { if (x > 216.0 / 24389.0) { return Math.cbrt(x); } else { return (841.0 / 108.0) * x + N; } } private static double fInv(double x) { if (x > 6.0 / 29.0) { return x*x*x; } else { return (108.0 / 841.0) * (x - N); } } private static final double N = 4.0 / 29.0; } |
From: Jeroen F. <jfr...@us...> - 2015-10-15 11:30:22
|
Update of /cvsroot/ikvm/ikvm/openjdk/java/awt/color In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30613/openjdk/java/awt/color Modified Files: ICC_ColorSpace.java Log Message: Added support for TYPE_Lab color space converter. Patch by Daniel Wilson. Index: ICC_ColorSpace.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/java/awt/color/ICC_ColorSpace.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ICC_ColorSpace.java 17 Dec 2010 13:52:51 -0000 1.2 --- ICC_ColorSpace.java 15 Oct 2015 11:30:20 -0000 1.3 *************** *** 39,42 **** --- 39,43 ---- package java.awt.color; + import gnu.java.awt.color.CieLabConverter; import gnu.java.awt.color.CieXyzConverter; import gnu.java.awt.color.ClutProfileConverter; *************** *** 248,251 **** --- 249,255 ---- switch (profile.getColorSpaceType()) { + case TYPE_Lab: + converter = new CieLabConverter(); + break; case TYPE_XYZ: converter = new CieXyzConverter(); |
From: Jeroen F. <jfr...@us...> - 2015-10-15 11:28:15
|
Update of /cvsroot/ikvm/ikvm/bin In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30511 Modified Files: ikvm.exe.manifest Log Message: Added Windows 10 as supported OS to manifest. Index: ikvm.exe.manifest =================================================================== RCS file: /cvsroot/ikvm/ikvm/bin/ikvm.exe.manifest,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ikvm.exe.manifest 13 Jun 2014 09:52:28 -0000 1.1 --- ikvm.exe.manifest 15 Oct 2015 11:28:12 -0000 1.2 *************** *** 3,6 **** --- 3,8 ---- <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> + <!-- Windows 10 --> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> |
From: Small S. <sma...@us...> - 2015-09-03 15:01:08
|
Update of /cvsroot/ikvm/ikvm/openjdk/java/awt/image In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26894/openjdk/java/awt/image Modified Files: BufferedImage.java Log Message: free resources on call of flush Index: BufferedImage.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/java/awt/image/BufferedImage.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** BufferedImage.java 23 Oct 2014 12:54:02 -0000 1.20 --- BufferedImage.java 3 Sep 2015 15:01:06 -0000 1.21 *************** *** 1807,1811 **** } ! public void flush(){ } } --- 1807,1816 ---- } ! public void flush() { ! if( bitmap != null ) { ! toRaster(); ! bitmap.Dispose(); ! bitmap = null; ! } } } |
From: Small S. <sma...@us...> - 2015-09-03 15:00:31
|
Update of /cvsroot/ikvm/ikvm/awt In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26841/awt Modified Files: graphics.cs Log Message: Dispose temporary Bitmap objects immediately to prevent OutOfMemoryException Index: graphics.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/awt/graphics.cs,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -d -r1.77 -r1.78 *** graphics.cs 1 Jun 2015 13:33:49 -0000 1.77 --- graphics.cs 3 Sep 2015 15:00:28 -0000 1.78 *************** *** 89,98 **** public override void copyArea(int x, int y, int width, int height, int dx, int dy) { ! Bitmap copy = new Bitmap(width, height); ! using (Graphics gCopy = Graphics.FromImage(copy)) { ! gCopy.DrawImage(bitmap, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel); } - g.DrawImageUnscaled(copy, x + dx, y + dy); } } --- 89,100 ---- public override void copyArea(int x, int y, int width, int height, int dx, int dy) { ! using (Bitmap copy = new Bitmap(width, height)) { ! using (Graphics gCopy = Graphics.FromImage(copy)) ! { ! gCopy.DrawImage(bitmap, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel); ! } ! g.DrawImageUnscaled(copy, x + dx, y + dy); } } } *************** *** 133,142 **** Matrix t = g.Transform; Point src = getPointToScreen(new Point(x + (int)t.OffsetX, y + (int)t.OffsetY)); ! Bitmap copy = new Bitmap(width, height); ! using (Graphics gCopy = Graphics.FromImage(copy)) { ! gCopy.CopyFromScreen(src, new Point(0, 0), new Size(width, height)); } - g.DrawImageUnscaled(copy, x + dx, y + dy); } --- 135,146 ---- Matrix t = g.Transform; Point src = getPointToScreen(new Point(x + (int)t.OffsetX, y + (int)t.OffsetY)); ! using (Bitmap copy = new Bitmap(width, height)) { ! using (Graphics gCopy = Graphics.FromImage(copy)) ! { ! gCopy.CopyFromScreen(src, new Point(0, 0), new Size(width, height)); ! } ! g.DrawImageUnscaled(copy, x + dx, y + dy); } } *************** *** 2008,2038 **** const int h = 3; ! Bitmap bitmap = new Bitmap(w, h); ! Graphics g = Graphics.FromImage(bitmap); ! g.TextRenderingHint = hint; ! g.FillRectangle(new SolidBrush(Color.White), 0, 0, w, h); ! g.DrawString("A", font, new SolidBrush(Color.Black), 0, -baseline, FORMAT); ! g.DrawString("X", font, new SolidBrush(Color.Black), 0, -baseline, FORMAT); ! g.Dispose(); ! ! int y = 0; ! LINE: ! while (y < h) { ! for (int x = 0; x < w; x++) { ! Color color = bitmap.GetPixel(x, y); ! if (color.GetBrightness() < 0.5) { ! //there is a black pixel, we continue in the next line. ! baseline++; ! y++; ! goto LINE; } } - break; // there was a line without black pixel } - baselines[key] = baseline; } --- 2012,2044 ---- const int h = 3; ! using (Bitmap bitmap = new Bitmap(w, h)) { ! Graphics g = Graphics.FromImage(bitmap); ! g.TextRenderingHint = hint; ! g.FillRectangle(new SolidBrush(Color.White), 0, 0, w, h); ! g.DrawString("A", font, new SolidBrush(Color.Black), 0, -baseline, FORMAT); ! g.DrawString("X", font, new SolidBrush(Color.Black), 0, -baseline, FORMAT); ! g.Dispose(); ! ! ! int y = 0; ! LINE: ! while (y < h) { ! for (int x = 0; x < w; x++) { ! Color color = bitmap.GetPixel(x, y); ! if (color.GetBrightness() < 0.5) ! { ! //there is a black pixel, we continue in the next line. ! baseline++; ! y++; ! goto LINE; ! } } + break; // there was a line without black pixel } } baselines[key] = baseline; } |