Skip to content

Commit 20d81f1

Browse files
committed
remove redundant code and add comments
1 parent daaa131 commit 20d81f1

File tree

2 files changed

+29
-42
lines changed

2 files changed

+29
-42
lines changed

src/runtime/classobject.cs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -233,36 +233,27 @@ public static int mp_ass_subscript(IntPtr ob, IntPtr idx, IntPtr v) {
233233
free = true;
234234
}
235235

236-
// Add args given from caller + 1 for the value
236+
// Get the args passed in.
237237
int i = Runtime.PyTuple_Size(args);
238-
IntPtr real = Runtime.PyTuple_New(i + 1);
238+
IntPtr defaultArgs = cls.indexer.GetDefaultArgs(args);
239+
int numOfDefaultArgs = Runtime.PyTuple_Size(defaultArgs);
240+
int temp = i + numOfDefaultArgs;
241+
IntPtr real = Runtime.PyTuple_New(temp + 1);
239242
for (int n = 0; n < i; n++) {
240243
IntPtr item = Runtime.PyTuple_GetItem(args, n);
241244
Runtime.Incref(item);
242245
Runtime.PyTuple_SetItem(real, n, item);
243246
}
244247

245-
// Do we need default arguments added to the list
246-
if (cls.indexer.NeedsDefaultArgs(real)) {
247-
// Need to add default args to the end of real tuple
248-
// before adding the value v
249-
IntPtr defaultArgs = cls.indexer.GetDefaultArgs(real);
250-
int numOfDefaultArgs = Runtime.PyTuple_Size(defaultArgs);
251-
int temp = i + numOfDefaultArgs;
252-
real = Runtime.PyTuple_New(temp + 1);
253-
for (int n = 0; n < i; n++) {
254-
IntPtr item = Runtime.PyTuple_GetItem(args, n);
255-
Runtime.Incref(item);
256-
Runtime.PyTuple_SetItem(real, n, item);
257-
}
258-
259-
for (int n = 0; n < numOfDefaultArgs; n++) {
260-
IntPtr item = Runtime.PyTuple_GetItem(defaultArgs, n);
261-
Runtime.Incref(item);
262-
Runtime.PyTuple_SetItem(real, n + i, item);
263-
}
264-
i = temp;
248+
// Add Default Args if needed
249+
for (int n = 0; n < numOfDefaultArgs; n++) {
250+
IntPtr item = Runtime.PyTuple_GetItem(defaultArgs, n);
251+
Runtime.Incref(item);
252+
Runtime.PyTuple_SetItem(real, n + i, item);
265253
}
254+
// no longer need defaultArgs
255+
Runtime.Decref(defaultArgs);
256+
i = temp;
266257

267258
// Add value to argument list
268259
Runtime.Incref(v);

src/runtime/indexer.cs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ internal void SetItem(IntPtr inst, IntPtr args) {
6363
}
6464

6565
internal bool NeedsDefaultArgs(IntPtr args){
66-
int pynargs = Runtime.PyTuple_Size(args) - 1;
66+
int pynargs = Runtime.PyTuple_Size(args);
6767
var methods = SetterBinder.GetMethods();
6868
if(methods.Length == 0)
6969
return false;
@@ -72,7 +72,7 @@ internal bool NeedsDefaultArgs(IntPtr args){
7272
ParameterInfo[] pi = mi.GetParameters();
7373
// need to subtract one for the value
7474
int clrnargs = pi.Length - 1;
75-
if(pynargs == clrnargs)
75+
if (pynargs == clrnargs || pynargs > clrnargs)
7676
return false;
7777

7878
for (int v = pynargs; v < clrnargs; v++){
@@ -82,34 +82,30 @@ internal bool NeedsDefaultArgs(IntPtr args){
8282
return true;
8383
}
8484

85+
/// <summary>
86+
/// This will return default arguments a new instance of a tuple. The size
87+
/// of the tuple will indicate the number of default arguments.
88+
/// </summary>
89+
/// <param name="args">This is pointing to the tuple args passed in</param>
90+
/// <returns>a new instance of the tuple containing the default args</returns>
8591
internal IntPtr GetDefaultArgs(IntPtr args){
86-
//IntPtr real = Runtime.PyTuple_New(i + 1);
87-
int pynargs = Runtime.PyTuple_Size(args) - 1;
92+
93+
// if we don't need default args return empty tuple
94+
if(!NeedsDefaultArgs(args))
95+
return Runtime.PyTuple_New(0);
96+
int pynargs = Runtime.PyTuple_Size(args);
97+
98+
// Get the default arg tuple
8899
var methods = SetterBinder.GetMethods();
89-
IntPtr defaultArgs;
90-
if(methods.Length == 0){
91-
defaultArgs = Runtime.PyTuple_New(0);
92-
return defaultArgs;
93-
}
94100
MethodBase mi = methods[0];
95101
ParameterInfo[] pi = mi.GetParameters();
96102
int clrnargs = pi.Length - 1;
97-
if(pynargs == clrnargs|| pynargs > clrnargs){
98-
defaultArgs = Runtime.PyTuple_New(0);
99-
return defaultArgs;
100-
}
101-
102-
defaultArgs = Runtime.PyTuple_New(clrnargs - pynargs);
103+
IntPtr defaultArgs = Runtime.PyTuple_New(clrnargs - pynargs);
103104
for (int i = 0; i < (clrnargs - pynargs); i++) {
104-
// Here we own the reference to the Python value, and we
105-
// give the ownership to the arg tuple.
106105
if (pi[i + pynargs].DefaultValue == DBNull.Value)
107106
continue;
108107
else{
109108
IntPtr arg = Converter.ToPython(pi[i + pynargs].DefaultValue, pi[i + pynargs].ParameterType);
110-
Type type = typeof(String);
111-
Object arg2;
112-
Converter.ToManaged(arg, type, out arg2, false);
113109
Runtime.PyTuple_SetItem(defaultArgs, i, arg);
114110
}
115111
}

0 commit comments

Comments
 (0)