зеркало из https://github.com/mono/ikvm-fork.git
*** empty log message ***
This commit is contained in:
Родитель
f0d6d69984
Коммит
e77a85fb9d
|
@ -382,6 +382,13 @@
|
|||
../../classpath/gnu/java/awt/GradientPaintContext.java
|
||||
../../classpath/gnu/java/awt/image/ImageDecoder.java
|
||||
../../classpath/gnu/java/awt/image/XBMDecoder.java
|
||||
../../classpath/gnu/java/awt/java2d/AbstractGraphics2D.java
|
||||
../../classpath/gnu/java/awt/java2d/CubicSegment.java
|
||||
../../classpath/gnu/java/awt/java2d/LineSegment.java
|
||||
../../classpath/gnu/java/awt/java2d/PolyEdge.java
|
||||
../../classpath/gnu/java/awt/java2d/PolyEdgeComparator.java
|
||||
../../classpath/gnu/java/awt/java2d/QuadSegment.java
|
||||
../../classpath/gnu/java/awt/java2d/Segment.java
|
||||
../../classpath/gnu/java/awt/peer/ClasspathFontPeer.java
|
||||
../../classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
|
||||
../../classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java
|
||||
|
@ -491,6 +498,7 @@
|
|||
../../classpath/gnu/java/lang/ArrayHelper.java
|
||||
../../classpath/gnu/java/lang/CharData.java
|
||||
../../classpath/gnu/java/lang/ClassHelper.java
|
||||
../../classpath/gnu/java/lang/InstrumentationImpl.java
|
||||
../../classpath/gnu/java/lang/MainThread.java
|
||||
../../classpath/gnu/java/lang/reflect/ClassSignatureParser.java
|
||||
../../classpath/gnu/java/lang/reflect/FieldSignatureParser.java
|
||||
|
@ -4470,6 +4478,7 @@ gnu/classpath/Pointer.java
|
|||
gnu/classpath/VMStackWalker.java
|
||||
gnu/classpath/VMSystemProperties.java
|
||||
gnu/java/lang/reflect/VMField.java
|
||||
gnu/java/lang/VMInstrumentationImpl.java
|
||||
gnu/java/locale/LocaleData.java
|
||||
gnu/java/net/PlainDatagramSocketImpl.java
|
||||
gnu/java/net/PlainSocketImpl.java
|
||||
|
|
|
@ -232,25 +232,6 @@ public abstract class VMClass
|
|||
throw new ClassCastException();
|
||||
}
|
||||
|
||||
private static final int ACC_SYNTHETIC = 0x1000;
|
||||
private static final int ACC_ANNOTATION = 0x2000;
|
||||
private static final int ACC_ENUM = 0x4000;
|
||||
|
||||
static boolean isSynthetic(Class clazz)
|
||||
{
|
||||
return (GetModifiers(clazz.vmdata, true) & ACC_SYNTHETIC) != 0;
|
||||
}
|
||||
|
||||
static boolean isAnnotation(Class clazz)
|
||||
{
|
||||
return (GetModifiers(clazz.vmdata, true) & ACC_ANNOTATION) != 0;
|
||||
}
|
||||
|
||||
static boolean isEnum(Class clazz)
|
||||
{
|
||||
return (GetModifiers(clazz.vmdata, true) & ACC_ENUM) != 0;
|
||||
}
|
||||
|
||||
static String getSimpleName(Class clazz)
|
||||
{
|
||||
if (isArray(clazz))
|
||||
|
|
|
@ -76,11 +76,81 @@ class Subroutine
|
|||
|
||||
class InstructionState
|
||||
{
|
||||
private struct LocalStoreSites
|
||||
{
|
||||
private int[] data;
|
||||
private int count;
|
||||
private bool shared;
|
||||
|
||||
internal LocalStoreSites Copy()
|
||||
{
|
||||
LocalStoreSites n = new LocalStoreSites();
|
||||
n.data = data;
|
||||
n.count = count;
|
||||
n.shared = true;
|
||||
return n;
|
||||
}
|
||||
|
||||
internal static LocalStoreSites Alloc()
|
||||
{
|
||||
LocalStoreSites n = new LocalStoreSites();
|
||||
n.data = new int[4];
|
||||
return n;
|
||||
}
|
||||
|
||||
internal bool IsEmpty
|
||||
{
|
||||
get
|
||||
{
|
||||
return data == null;
|
||||
}
|
||||
}
|
||||
|
||||
internal void Add(int store)
|
||||
{
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
if(data[i] == store)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(count == data.Length)
|
||||
{
|
||||
int[] newarray = new int[data.Length * 2];
|
||||
Buffer.BlockCopy(data, 0, newarray, 0, data.Length * 4);
|
||||
data = newarray;
|
||||
shared = false;
|
||||
}
|
||||
if(shared)
|
||||
{
|
||||
shared = false;
|
||||
data = (int[])data.Clone();
|
||||
}
|
||||
data[count++] = store;
|
||||
}
|
||||
|
||||
internal int this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
return data[index];
|
||||
}
|
||||
}
|
||||
|
||||
internal int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
||||
private TypeWrapper[] stack;
|
||||
private int stackSize;
|
||||
private int stackEnd;
|
||||
private TypeWrapper[] locals;
|
||||
private Hashtable[] localStoreSites;
|
||||
private LocalStoreSites[] localStoreSites;
|
||||
private ArrayList subroutines;
|
||||
private int callsites;
|
||||
private bool unitializedThis;
|
||||
|
@ -96,7 +166,7 @@ class InstructionState
|
|||
}
|
||||
private ShareFlags flags;
|
||||
|
||||
private InstructionState(TypeWrapper[] stack, int stackSize, int stackEnd, TypeWrapper[] locals, Hashtable[] localStoreSites, ArrayList subroutines, int callsites, bool unitializedThis)
|
||||
private InstructionState(TypeWrapper[] stack, int stackSize, int stackEnd, TypeWrapper[] locals, LocalStoreSites[] localStoreSites, ArrayList subroutines, int callsites, bool unitializedThis)
|
||||
{
|
||||
this.flags = ShareFlags.All;
|
||||
this.stack = stack;
|
||||
|
@ -115,7 +185,7 @@ class InstructionState
|
|||
this.stack = new TypeWrapper[maxStack];
|
||||
this.stackEnd = maxStack;
|
||||
this.locals = new TypeWrapper[maxLocals];
|
||||
this.localStoreSites = new Hashtable[maxLocals];
|
||||
this.localStoreSites = new LocalStoreSites[maxLocals];
|
||||
}
|
||||
|
||||
internal InstructionState Copy()
|
||||
|
@ -224,7 +294,7 @@ class InstructionState
|
|||
s2.LocalsCopyOnWrite();
|
||||
s2.locals[i] = s3.locals[i];
|
||||
s2.LocalStoreSitesCopyOnWrite();
|
||||
s2.localStoreSites[i] = s3.localStoreSites[i] != null ? (Hashtable)s3.localStoreSites[i].Clone() : null;
|
||||
s2.localStoreSites[i] = s3.localStoreSites[i].Copy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -281,8 +351,8 @@ class InstructionState
|
|||
{
|
||||
TypeWrapper type = s.locals[i];
|
||||
TypeWrapper type2;
|
||||
Hashtable storeSites = s.localStoreSites[i];
|
||||
Hashtable storeSites2;
|
||||
LocalStoreSites storeSites = s.localStoreSites[i];
|
||||
LocalStoreSites storeSites2;
|
||||
if(locals_modified == null || locals_modified[i])
|
||||
{
|
||||
type2 = s2.locals[i];
|
||||
|
@ -301,7 +371,7 @@ class InstructionState
|
|||
s.changed = true;
|
||||
}
|
||||
storeSites = MergeStoreSites(storeSites, storeSites2);
|
||||
if(storeSites != null && (s.localStoreSites[i] == null || storeSites.Count != s.localStoreSites[i].Count))
|
||||
if(!storeSites.IsEmpty && (s.localStoreSites[i].IsEmpty || storeSites.Count != s.localStoreSites[i].Count))
|
||||
{
|
||||
s.LocalStoreSitesCopyOnWrite();
|
||||
s.localStoreSites[i] = storeSites;
|
||||
|
@ -321,28 +391,20 @@ class InstructionState
|
|||
return s;
|
||||
}
|
||||
|
||||
private static Hashtable MergeStoreSites(Hashtable h1, Hashtable h2)
|
||||
private static LocalStoreSites MergeStoreSites(LocalStoreSites h1, LocalStoreSites h2)
|
||||
{
|
||||
if(h1 == null && h2 == null)
|
||||
if(h1.IsEmpty)
|
||||
{
|
||||
return null;
|
||||
return h2.Copy();
|
||||
}
|
||||
if(h1 == null)
|
||||
if(h2.IsEmpty)
|
||||
{
|
||||
return (Hashtable)h2.Clone();
|
||||
return h2.Copy();
|
||||
}
|
||||
if(h2 == null)
|
||||
LocalStoreSites h = h1.Copy();
|
||||
for(int i = 0; i < h2.Count; i++)
|
||||
{
|
||||
return (Hashtable)h1.Clone();
|
||||
}
|
||||
Hashtable h = new Hashtable();
|
||||
foreach(DictionaryEntry de in h1)
|
||||
{
|
||||
h.Add(de.Key, de.Value);
|
||||
}
|
||||
foreach(DictionaryEntry de in h2)
|
||||
{
|
||||
h[de.Key] = de.Value;
|
||||
h.Add(h2[i]);
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
@ -619,8 +681,8 @@ class InstructionState
|
|||
private void SetLocalStoreSite(int localIndex, int instructionIndex)
|
||||
{
|
||||
LocalStoreSitesCopyOnWrite();
|
||||
localStoreSites[localIndex] = new Hashtable();
|
||||
localStoreSites[localIndex].Add(instructionIndex, "");
|
||||
localStoreSites[localIndex] = LocalStoreSites.Alloc();
|
||||
localStoreSites[localIndex].Add(instructionIndex);
|
||||
}
|
||||
|
||||
internal void GetLocalInt(int index, ref Hashtable readers)
|
||||
|
@ -687,11 +749,11 @@ class InstructionState
|
|||
{
|
||||
readers = new Hashtable();
|
||||
}
|
||||
if(localStoreSites[index] != null)
|
||||
if(!localStoreSites[index].IsEmpty)
|
||||
{
|
||||
foreach(int store in localStoreSites[index].Keys)
|
||||
for(int i = 0; i < localStoreSites[index].Count; i++)
|
||||
{
|
||||
readers[store] = "";
|
||||
readers[localStoreSites[index][i]] = "";
|
||||
}
|
||||
}
|
||||
return locals[index];
|
||||
|
@ -978,7 +1040,7 @@ class InstructionState
|
|||
if((flags & ShareFlags.LocalStoreSites) != 0)
|
||||
{
|
||||
flags &= ~ShareFlags.LocalStoreSites;
|
||||
localStoreSites = (Hashtable[])localStoreSites.Clone();
|
||||
localStoreSites = (LocalStoreSites[])localStoreSites.Clone();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче