Skip to content

Commit 752f532

Browse files
committed
Fix passing empty kwnames in fastcall convention
1 parent fee167e commit 752f532

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/ExternalFunctionNodes.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,13 +1379,18 @@ protected Object[] prepareCArguments(VirtualFrame frame) {
13791379
Object[] args = readVarargsNode.executeObjectArray(frame);
13801380
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
13811381
Object[] fastcallArgs = new Object[args.length + kwargs.length];
1382-
Object[] fastcallKwnames = new Object[kwargs.length];
1382+
Object kwnamesTuple = PNone.NO_VALUE;
13831383
PythonUtils.arraycopy(args, 0, fastcallArgs, 0, args.length);
1384-
for (int i = 0; i < kwargs.length; i++) {
1385-
fastcallKwnames[i] = kwargs[i].getName();
1386-
fastcallArgs[args.length + i] = kwargs[i].getValue();
1384+
// Note: PyO3 doesn't like it when we put an empty tuple there if there are no args
1385+
if (kwargs.length > 0) {
1386+
Object[] fastcallKwnames = new Object[kwargs.length];
1387+
for (int i = 0; i < kwargs.length; i++) {
1388+
fastcallKwnames[i] = kwargs[i].getName();
1389+
fastcallArgs[args.length + i] = kwargs[i].getValue();
1390+
}
1391+
kwnamesTuple = factory.createTuple(fastcallKwnames);
13871392
}
1388-
return new Object[]{self, new CPyObjectArrayWrapper(fastcallArgs), args.length, factory.createTuple(fastcallKwnames)};
1393+
return new Object[]{self, new CPyObjectArrayWrapper(fastcallArgs), args.length, kwnamesTuple};
13891394
}
13901395

13911396
@Override

0 commit comments

Comments
 (0)