Imported Upstream version 6.12.0.101

Former-commit-id: 86e5d3c0859336c41f589d3bcf96fcc6ecd603cd
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-10-03 08:40:42 +00:00
parent 77df3da300
commit d7ffa4a239
54 changed files with 765 additions and 745 deletions

View File

@@ -450,20 +450,28 @@ namespace IKVM.Reflection.Metadata
{
return new Enumerator(records, table.RowCount - 1, -1, token);
}
int index = BinarySearch(records, table.RowCount, token & 0xFFFFFF);
var maskedToken = token & 0xFFFFFF;
int index = BinarySearch(records, table.RowCount, maskedToken);
if (index < 0)
{
return new Enumerator(null, 0, 1, -1);
}
int start = index;
while (start > 0 && (records[start - 1].FilterKey & 0xFFFFFF) == (token & 0xFFFFFF))
while (start > 0)
{
var maskedFilterKey = records [start - 1].FilterKey & 0xFFFFFF;
if (maskedFilterKey != maskedToken && maskedFilterKey != 0)
break;
start--;
}
int end = index;
int max = table.RowCount - 1;
while (end < max && (records[end + 1].FilterKey & 0xFFFFFF) == (token & 0xFFFFFF))
while (end < max)
{
var maskedFilterKey = records [end + 1].FilterKey & 0xFFFFFF;
if (maskedFilterKey != maskedToken && maskedFilterKey != 0)
break;
end++;
}
return new Enumerator(records, end, start - 1, token);
@@ -481,6 +489,13 @@ namespace IKVM.Reflection.Metadata
{
return mid;
}
else if (maskedValue == 0)
{
if (min > 0)
min--;
if (max < length - 1)
max++;
}
else if (maskedToken < maskedValue)
{
max = mid - 1;

View File

@@ -146,7 +146,7 @@ namespace IKVM.Reflection
System.Runtime.InteropServices.CallingConvention unmanagedCallingConvention = 0;
bool unmanaged;
byte flags = br.ReadByte();
switch (flags & 7)
switch (flags & 0xf)
{
case DEFAULT:
callingConvention = CallingConventions.Standard;
@@ -168,6 +168,10 @@ namespace IKVM.Reflection
unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.FastCall;
unmanaged = true;
break;
case 0x09: // UNMANAGED
unmanagedCallingConvention = (System.Runtime.InteropServices.CallingConvention)0x9;
unmanaged = true;
break;
case VARARG:
callingConvention = CallingConventions.VarArgs;
unmanaged = false;

View File

@@ -1042,6 +1042,7 @@ namespace IKVM.Reflection
public ConstructorInfo GetConstructor(BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
{
ConstructorInfo ci1 = null;
bindingAttr |= BindingFlags.DeclaredOnly;
if ((bindingAttr & BindingFlags.Instance) != 0)
{
ci1 = GetConstructorImpl(ConstructorInfo.ConstructorName, bindingAttr, binder, types, modifiers);