Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1542cc9

Browse files
gertdreyerlostmsu
authored andcommitted
Normalized names. Added HashCode and Equals to testing objects
1 parent d3bde9d commit 1542cc9

File tree

5 files changed

+48
-41
lines changed

5 files changed

+48
-41
lines changed

src/embed_tests/TestOperator.cs

+12-7
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,17 @@ public OwnInt(int value)
4141
_value = value;
4242
}
4343

44+
public override int GetHashCode()
45+
{
46+
return unchecked(65535 + _value.GetHashCode());
47+
}
48+
49+
public override bool Equals(object obj)
50+
{
51+
return obj is OwnInt @object &&
52+
Num == @object.Num;
53+
}
54+
4455
public static OwnInt operator -(OwnInt p1, OwnInt p2)
4556
{
4657
return new OwnInt(p1._value - p2._value);
@@ -125,14 +136,8 @@ public bool CanDecode(PyType objectType, Type targetType)
125136
return objectType.Name == "int" && targetType == typeof(OwnInt);
126137
}
127138

128-
public bool TryDecode<T>(PyObject pyObj, out T? value)
139+
public bool TryDecode<T>(PyObject pyObj, out T value)
129140
{
130-
if (pyObj.PyType.Name != "int" || typeof(T) != typeof(OwnInt))
131-
{
132-
value = default(T);
133-
return false;
134-
}
135-
136141
value = (T)(object)new OwnInt(pyObj.As<int>());
137142
return true;
138143
}

src/runtime/ClassManager.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ private static ClassInfo GetClassInfo(Type type, ClassBase impl)
546546
ci.members[pyName] = new MethodObject(type, name, forwardMethods).AllocObject();
547547
// Only methods where only the right operand is the declaring type.
548548
if (reverseMethods.Length > 0)
549-
ci.members[pyNameReverse] = new MethodObject(type, name, reverseMethods, reverse_args: true).AllocObject();
549+
ci.members[pyNameReverse] = new MethodObject(type, name, reverseMethods, argsReversed: true).AllocObject();
550550
}
551551
}
552552

src/runtime/MethodBinder.cs

+26-24
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ internal class MethodBinder
3232
public const bool DefaultAllowThreads = true;
3333
public bool allow_threads = DefaultAllowThreads;
3434

35-
public bool args_reversed = false;
35+
public bool argsReversed = false;
3636

37-
internal MethodBinder(bool reverse_args = false)
37+
internal MethodBinder(bool argsReversed = false)
3838
{
3939
list = new List<MaybeMethodBase>();
40-
args_reversed = reverse_args;
40+
this.argsReversed = argsReversed;
4141
}
4242

43-
internal MethodBinder(MethodInfo mi, bool reverse_args = false)
43+
internal MethodBinder(MethodInfo mi, bool argsReversed = false)
4444
{
4545
list = new List<MaybeMethodBase> { new MaybeMethodBase(mi) };
46-
args_reversed = reverse_args;
46+
this.argsReversed = argsReversed;
4747
}
4848

4949
public int Count
@@ -276,11 +276,11 @@ internal static int ArgPrecedence(Type t)
276276
/// <param name="inst">The Python target of the method invocation.</param>
277277
/// <param name="args">The Python arguments.</param>
278278
/// <param name="kw">The Python keyword arguments.</param>
279-
/// <param name="reverse_args">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
279+
/// <param name="argsReversed">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
280280
/// <returns>A Binding if successful. Otherwise null.</returns>
281-
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool reverse_args = false)
281+
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool argsReversed = false)
282282
{
283-
return Bind(inst, args, kw, null, null, reverse_args);
283+
return Bind(inst, args, kw, null, null, argsReversed);
284284
}
285285

286286
/// <summary>
@@ -293,11 +293,11 @@ internal static int ArgPrecedence(Type t)
293293
/// <param name="args">The Python arguments.</param>
294294
/// <param name="kw">The Python keyword arguments.</param>
295295
/// <param name="info">If not null, only bind to that method.</param>
296-
/// <param name="reverse_args">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
296+
/// <param name="argsReversed">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
297297
/// <returns>A Binding if successful. Otherwise null.</returns>
298-
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool reverse_args = false)
298+
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool argsReversed = false)
299299
{
300-
return Bind(inst, args, kw, info, null, reverse_args);
300+
return Bind(inst, args, kw, info, null, argsReversed);
301301
}
302302

303303
private readonly struct MatchedMethod
@@ -341,9 +341,9 @@ public MismatchedMethod(Exception exception, MethodBase mb)
341341
/// <param name="kw">The Python keyword arguments.</param>
342342
/// <param name="info">If not null, only bind to that method.</param>
343343
/// <param name="methodinfo">If not null, additionally attempt to bind to the generic methods in this array by inferring generic type parameters.</param>
344-
/// <param name="reverse_args">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
344+
/// <param name="argsReversed">Reverse arguments of methods. Used for methods such as __radd__, __rsub__, __rmod__ etc</param>
345345
/// <returns>A Binding if successful. Otherwise null.</returns>
346-
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, MethodBase[]? methodinfo, bool reverse_args = false)
346+
internal Binding? Bind(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, MethodBase[]? methodinfo, bool argsReversed = false)
347347
{
348348
// loop to find match, return invoker w/ or w/o error
349349
var kwargDict = new Dictionary<string, PyObject>();
@@ -371,10 +371,10 @@ public MismatchedMethod(Exception exception, MethodBase mb)
371371
_methods = GetMethods();
372372
}
373373

374-
return Bind(inst, args, kwargDict, _methods, matchGenerics: true, reverse_args);
374+
return Bind(inst, args, kwargDict, _methods, matchGenerics: true, argsReversed);
375375
}
376376

377-
private static Binding? Bind(BorrowedReference inst, BorrowedReference args, Dictionary<string, PyObject> kwargDict, MethodBase[] methods, bool matchGenerics, bool reversed = false)
377+
private static Binding? Bind(BorrowedReference inst, BorrowedReference args, Dictionary<string, PyObject> kwargDict, MethodBase[] methods, bool matchGenerics, bool argsReversed = false)
378378
{
379379
var pynargs = (int)Runtime.PyTuple_Size(args);
380380
var isGeneric = false;
@@ -394,20 +394,22 @@ public MismatchedMethod(Exception exception, MethodBase mb)
394394
// Binary operator methods will have 2 CLR args but only one Python arg
395395
// (unary operators will have 1 less each), since Python operator methods are bound.
396396
isOperator = isOperator && pynargs == pi.Length - 1;
397-
bool isReverse = isOperator && reversed; // Only cast if isOperator.
397+
bool isReverse = isOperator && argsReversed; // Only cast if isOperator.
398398
if (isReverse && OperatorMethod.IsComparisonOp((MethodInfo)mi))
399399
continue; // Comparison operators in Python have no reverse mode.
400400
if (!MatchesArgumentCount(pynargs, pi, kwargDict, out bool paramsArray, out ArrayList? defaultArgList, out int kwargsMatched, out int defaultsNeeded) && !isOperator)
401401
{
402402
continue;
403403
}
404404
// Preprocessing pi to remove either the first or second argument.
405-
if (isOperator && !isReverse) {
405+
if (isOperator && !isReverse)
406+
{
406407
// The first Python arg is the right operand, while the bound instance is the left.
407408
// We need to skip the first (left operand) CLR argument.
408409
pi = pi.Skip(1).ToArray();
409410
}
410-
else if (isOperator && isReverse) {
411+
else if (isOperator && isReverse)
412+
{
411413
// The first Python arg is the left operand.
412414
// We need to take the first CLR argument.
413415
pi = pi.Take(1).ToArray();
@@ -817,14 +819,14 @@ static bool MatchesArgumentCount(int positionalArgumentCount, ParameterInfo[] pa
817819
return match;
818820
}
819821

820-
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool reverse_args = false)
822+
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool argsReversed = false)
821823
{
822-
return Invoke(inst, args, kw, null, null, reverse_args);
824+
return Invoke(inst, args, kw, null, null, argsReversed);
823825
}
824826

825-
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool reverse_args = false)
827+
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool argsReversed = false)
826828
{
827-
return Invoke(inst, args, kw, info, null, reverse_args = false);
829+
return Invoke(inst, args, kw, info, null, argsReversed = false);
828830
}
829831

830832
protected static void AppendArgumentTypes(StringBuilder to, BorrowedReference args)
@@ -860,7 +862,7 @@ protected static void AppendArgumentTypes(StringBuilder to, BorrowedReference ar
860862
to.Append(')');
861863
}
862864

863-
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, MethodBase[]? methodinfo, bool reverse_args = false)
865+
internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, MethodBase? info, MethodBase[]? methodinfo, bool argsReversed = false)
864866
{
865867
// No valid methods, nothing to bind.
866868
if (GetMethods().Length == 0)
@@ -873,7 +875,7 @@ internal virtual NewReference Invoke(BorrowedReference inst, BorrowedReference a
873875
return Exceptions.RaiseTypeError(msg.ToString());
874876
}
875877

876-
Binding? binding = Bind(inst, args, kw, info, methodinfo, reverse_args);
878+
Binding? binding = Bind(inst, args, kw, info, methodinfo, argsReversed);
877879
object result;
878880
IntPtr ts = IntPtr.Zero;
879881

src/runtime/Types/MethodBinding.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public static NewReference tp_call(BorrowedReference ob, BorrowedReference args,
238238
}
239239
}
240240

241-
return self.m.Invoke(target is null ? BorrowedReference.Null : target, args, kw, self.info.UnsafeValue, self.m.binder.args_reversed);
241+
return self.m.Invoke(target is null ? BorrowedReference.Null : target, args, kw, self.info.UnsafeValue, self.m.binder.argsReversed);
242242
}
243243
finally
244244
{

src/runtime/Types/MethodObject.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ internal class MethodObject : ExtensionType
2727
internal PyString? doc;
2828
internal MaybeType type;
2929

30-
public MethodObject(MaybeType type, string name, MethodBase[] info, bool allow_threads, bool reverse_args = false)
30+
public MethodObject(MaybeType type, string name, MethodBase[] info, bool allow_threads, bool argsReversed = false)
3131
{
3232
this.type = type;
3333
this.name = name;
3434
this.infoList = new List<MaybeMethodInfo>();
35-
binder = new MethodBinder(reverse_args);
35+
binder = new MethodBinder(argsReversed);
3636
foreach (MethodBase item in info)
3737
{
3838
this.infoList.Add(item);
@@ -45,8 +45,8 @@ public MethodObject(MaybeType type, string name, MethodBase[] info, bool allow_t
4545
binder.allow_threads = allow_threads;
4646
}
4747

48-
public MethodObject(MaybeType type, string name, MethodBase[] info, bool reverse_args = false)
49-
: this(type, name, info, allow_threads: AllowThreads(info), reverse_args)
48+
public MethodObject(MaybeType type, string name, MethodBase[] info, bool argsReversed = false)
49+
: this(type, name, info, allow_threads: AllowThreads(info), argsReversed)
5050
{
5151
}
5252

@@ -67,14 +67,14 @@ internal MethodBase[] info
6767
}
6868
}
6969

70-
public virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool reverse_args = false)
70+
public virtual NewReference Invoke(BorrowedReference inst, BorrowedReference args, BorrowedReference kw, bool argsReversed = false)
7171
{
72-
return Invoke(inst, args, kw, null, reverse_args);
72+
return Invoke(inst, args, kw, null, argsReversed);
7373
}
7474

75-
public virtual NewReference Invoke(BorrowedReference target, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool reverse_args = false)
75+
public virtual NewReference Invoke(BorrowedReference target, BorrowedReference args, BorrowedReference kw, MethodBase? info, bool argsReversed = false)
7676
{
77-
return binder.Invoke(target, args, kw, info, this.info, reverse_args);
77+
return binder.Invoke(target, args, kw, info, this.info, argsReversed);
7878
}
7979

8080
/// <summary>

0 commit comments

Comments
 (0)