Skip to content

Commit 740cb40

Browse files
committed
[GR-66932] Avoid sending empty kwargs dicts to native
PullRequest: graalpython/3881
2 parents 5a784b9 + 9980f04 commit 740cb40

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ protected Object[] prepareCArguments(VirtualFrame frame) {
983983
Object[] args = readVarargsNode.executeObjectArray(frame);
984984
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
985985
PythonLanguage language = getLanguage(PythonLanguage.class);
986-
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), PFactory.createDict(language, kwargs)};
986+
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), kwargs.length > 0 ? PFactory.createDict(language, kwargs) : PNone.NO_VALUE};
987987
}
988988

989989
@Override
@@ -1106,7 +1106,7 @@ protected Object[] prepareCArguments(VirtualFrame frame) {
11061106
args = PythonUtils.arrayCopyOfRange(args, 1, args.length);
11071107
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
11081108
PythonLanguage language = getLanguage(PythonLanguage.class);
1109-
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), PFactory.createDict(language, kwargs)};
1109+
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), kwargs.length > 0 ? PFactory.createDict(language, kwargs) : PNone.NO_VALUE};
11101110
}
11111111
}
11121112

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/slots/TpSlotVarargs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ static Object callNative(VirtualFrame frame, TpSlotCExtNative slot, Object self,
322322
PythonLanguage language = context.getLanguage(inliningTarget);
323323
PythonThreadState state = getThreadStateNode.execute(inliningTarget, context);
324324
PTuple argsTuple = createArgsTupleNode.execute(inliningTarget, language, args, eagerTupleState);
325-
Object kwargsDict = PFactory.createDict(language, keywords);
325+
Object kwargsDict = keywords.length > 0 ? PFactory.createDict(language, keywords) : NO_VALUE;
326326
Object nativeResult = externalInvokeNode.call(frame, inliningTarget, state, C_API_TIMING, name, slot.callable,
327327
toNativeNode.execute(self), toNativeNode.execute(argsTuple), toNativeNode.execute(kwargsDict));
328328
eagerTupleState.report(inliningTarget, argsTuple);

0 commit comments

Comments
 (0)