Skip to content

Commit 7e69e05

Browse files
committed
[GR-68601][GR-68815] Remove fixed varargs and kwargs from PArguments
PullRequest: graalpython/3968
2 parents be97e4f + 3466892 commit 7e69e05

File tree

17 files changed

+251
-375
lines changed

17 files changed

+251
-375
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/builtin/modules/ClinicTests.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -61,7 +61,6 @@
6161
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
6262
import com.oracle.graal.python.builtins.objects.PNone;
6363
import com.oracle.graal.python.builtins.objects.function.PArguments;
64-
import com.oracle.graal.python.builtins.objects.function.PKeyword;
6564
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
6665
import com.oracle.graal.python.nodes.argument.ReadIndexedArgumentNode;
6766
import com.oracle.graal.python.nodes.argument.ReadVarArgsNode;
@@ -211,15 +210,15 @@ public void testVarArgDefaultValues() {
211210
new ReadArgumentNode[]{
212211
ReadIndexedArgumentNode.create(0),
213212
ReadIndexedArgumentNode.create(1),
214-
ReadVarArgsNode.create(true),
213+
ReadVarArgsNode.create(3),
215214
ReadIndexedArgumentNode.create(2)
216215
}));
217-
Object[] scope_w = PArguments.create(2);
218-
scope_w[PArguments.USER_ARGUMENTS_OFFSET] = "abc";
219-
scope_w[PArguments.USER_ARGUMENTS_OFFSET + 1] = 42;
220-
PArguments.setVariableArguments(scope_w, 666);
221-
PArguments.setKeywordArguments(scope_w, new PKeyword[]{new PKeyword(tsLiteral("b"), PNone.NO_VALUE)});
222-
assertEquals(666, callTarget.call(scope_w));
216+
Object[] pArguments = PArguments.create(4);
217+
PArguments.setArgument(pArguments, 0, "abc");
218+
PArguments.setArgument(pArguments, 1, 42);
219+
PArguments.setArgument(pArguments, 2, PNone.NO_VALUE);
220+
PArguments.setArgument(pArguments, 3, new Object[]{666});
221+
assertEquals(666, callTarget.call(pArguments));
223222
}
224223

225224
private static CallTarget createCallTarget(PythonBinaryClinicBuiltinNode node) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/MarshalModuleBuiltins.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
import static com.oracle.graal.python.builtins.modules.io.IONodes.T_WRITE;
3232
import static com.oracle.graal.python.nodes.StringLiterals.T_VERSION;
3333
import static com.oracle.graal.python.nodes.truffle.TruffleStringMigrationHelpers.isJavaString;
34+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_BOOLEAN_ARRAY;
35+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_DOUBLE_ARRAY;
36+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_INT_ARRAY;
37+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_LONG_ARRAY;
38+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_OBJECT_ARRAY;
39+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_SHORT_ARRAY;
40+
import static com.oracle.graal.python.util.PythonUtils.EMPTY_TRUFFLESTRING_ARRAY;
3441
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
3542

3643
import java.io.ByteArrayInputStream;
@@ -1234,6 +1241,9 @@ private Object readJavaArray() {
12341241

12351242
private int[] readIntArray() {
12361243
int length = readInt();
1244+
if (length == 0) {
1245+
return EMPTY_INT_ARRAY;
1246+
}
12371247
int[] a = new int[length];
12381248
for (int i = 0; i < length; i++) {
12391249
a[i] = readInt();
@@ -1243,6 +1253,9 @@ private int[] readIntArray() {
12431253

12441254
private long[] readLongArray() {
12451255
int length = readInt();
1256+
if (length == 0) {
1257+
return EMPTY_LONG_ARRAY;
1258+
}
12461259
long[] a = new long[length];
12471260
for (int i = 0; i < length; i++) {
12481261
a[i] = readLong();
@@ -1252,6 +1265,9 @@ private long[] readLongArray() {
12521265

12531266
private double[] readDoubleArray() {
12541267
int length = readInt();
1268+
if (length == 0) {
1269+
return EMPTY_DOUBLE_ARRAY;
1270+
}
12551271
double[] a = new double[length];
12561272
for (int i = 0; i < length; i++) {
12571273
a[i] = readDouble();
@@ -1261,6 +1277,9 @@ private double[] readDoubleArray() {
12611277

12621278
private short[] readShortArray() {
12631279
int length = readInt();
1280+
if (length == 0) {
1281+
return EMPTY_SHORT_ARRAY;
1282+
}
12641283
short[] a = new short[length];
12651284
for (int i = 0; i < length; i++) {
12661285
a[i] = readShort();
@@ -1270,6 +1289,9 @@ private short[] readShortArray() {
12701289

12711290
private boolean[] readBooleanArray() {
12721291
int length = readInt();
1292+
if (length == 0) {
1293+
return EMPTY_BOOLEAN_ARRAY;
1294+
}
12731295
boolean[] a = new boolean[length];
12741296
for (int i = 0; i < length; i++) {
12751297
a[i] = readByte() != 0;
@@ -1279,6 +1301,9 @@ private boolean[] readBooleanArray() {
12791301

12801302
private TruffleString[] readStringArray() {
12811303
int length = readInt();
1304+
if (length == 0) {
1305+
return EMPTY_TRUFFLESTRING_ARRAY;
1306+
}
12821307
TruffleString[] a = new TruffleString[length];
12831308
for (int i = 0; i < length; i++) {
12841309
a[i] = readString();
@@ -1288,6 +1313,9 @@ private TruffleString[] readStringArray() {
12881313

12891314
private Object[] readObjectArray() {
12901315
int length = readInt();
1316+
if (length == 0) {
1317+
return EMPTY_OBJECT_ARRAY;
1318+
}
12911319
Object[] a = new Object[length];
12921320
for (int i = 0; i < length; i++) {
12931321
a[i] = readObject();

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

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ private MethDirectRoot(PythonLanguage lang, TruffleString name, PExternalFunctio
699699
@Override
700700
protected Object[] prepareCArguments(VirtualFrame frame) {
701701
// return a copy of the args array since it will be modified
702-
Object[] varargs = PArguments.getVariableArguments(frame);
702+
Object[] varargs = (Object[]) PArguments.getArgument(frame, SIGNATURE.varArgsPArgumentsIndex());
703703
return PythonUtils.arrayCopyOf(varargs, varargs.length);
704704
}
705705

@@ -971,17 +971,17 @@ public static class MethKeywordsRoot extends MethodDescriptorRoot {
971971

972972
public MethKeywordsRoot(PythonLanguage language, TruffleString name, boolean isStatic, PExternalFunctionWrapper provider) {
973973
super(language, name, isStatic, provider);
974-
this.readVarargsNode = ReadVarArgsNode.create(true);
975-
this.readKwargsNode = ReadVarKeywordsNode.create(PythonUtils.EMPTY_TRUFFLESTRING_ARRAY);
974+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
975+
this.readKwargsNode = ReadVarKeywordsNode.create(SIGNATURE.varKeywordsPArgumentsIndex());
976976
this.createArgsTupleNode = CreateArgsTupleNodeGen.create();
977977
this.freeNode = ReleaseNativeSequenceStorageNodeGen.create();
978978
}
979979

980980
@Override
981981
protected Object[] prepareCArguments(VirtualFrame frame) {
982982
Object self = readSelf(frame);
983-
Object[] args = readVarargsNode.executeObjectArray(frame);
984-
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
983+
Object[] args = readVarargsNode.execute(frame);
984+
PKeyword[] kwargs = readKwargsNode.execute(frame);
985985
PythonLanguage language = getLanguage(PythonLanguage.class);
986986
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), kwargs.length > 0 ? PFactory.createDict(language, kwargs) : PNone.NO_VALUE};
987987
}
@@ -1013,15 +1013,15 @@ public static final class MethVarargsRoot extends MethodDescriptorRoot {
10131013

10141014
public MethVarargsRoot(PythonLanguage language, TruffleString name, boolean isStatic, PExternalFunctionWrapper provider) {
10151015
super(language, name, isStatic, provider);
1016-
this.readVarargsNode = ReadVarArgsNode.create(true);
1016+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
10171017
this.createArgsTupleNode = CreateArgsTupleNodeGen.create();
10181018
this.freeNode = ReleaseNativeSequenceStorageNodeGen.create();
10191019
}
10201020

10211021
@Override
10221022
protected Object[] prepareCArguments(VirtualFrame frame) {
10231023
Object self = readSelf(frame);
1024-
Object[] args = readVarargsNode.executeObjectArray(frame);
1024+
Object[] args = readVarargsNode.execute(frame);
10251025
return new Object[]{self, createArgsTupleNode.execute(getLanguage(PythonLanguage.class), args, seenNativeArgsTupleStorage)};
10261026
}
10271027

@@ -1100,11 +1100,11 @@ public MethNewRoot(PythonLanguage language, TruffleString name, boolean isStatic
11001100
@Override
11011101
protected Object[] prepareCArguments(VirtualFrame frame) {
11021102
Object methodSelf = readSelf(frame);
1103-
Object[] args = readVarargsNode.executeObjectArray(frame);
1103+
Object[] args = readVarargsNode.execute(frame);
11041104
// TODO checks
11051105
Object self = args[0];
11061106
args = PythonUtils.arrayCopyOfRange(args, 1, args.length);
1107-
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
1107+
PKeyword[] kwargs = readKwargsNode.execute(frame);
11081108
PythonLanguage language = getLanguage(PythonLanguage.class);
11091109
return new Object[]{self, createArgsTupleNode.execute(language, args, seenNativeArgsTupleStorage), kwargs.length > 0 ? PFactory.createDict(language, kwargs) : PNone.NO_VALUE};
11101110
}
@@ -1192,15 +1192,15 @@ public static final class MethFastcallWithKeywordsRoot extends MethodDescriptorR
11921192

11931193
public MethFastcallWithKeywordsRoot(PythonLanguage language, TruffleString name, boolean isStatic, PExternalFunctionWrapper provider) {
11941194
super(language, name, isStatic, provider);
1195-
this.readVarargsNode = ReadVarArgsNode.create(true);
1196-
this.readKwargsNode = ReadVarKeywordsNode.create(PythonUtils.EMPTY_TRUFFLESTRING_ARRAY);
1195+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
1196+
this.readKwargsNode = ReadVarKeywordsNode.create(SIGNATURE.varKeywordsPArgumentsIndex());
11971197
}
11981198

11991199
@Override
12001200
protected Object[] prepareCArguments(VirtualFrame frame) {
12011201
Object self = readSelf(frame);
1202-
Object[] args = readVarargsNode.executeObjectArray(frame);
1203-
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
1202+
Object[] args = readVarargsNode.execute(frame);
1203+
PKeyword[] kwargs = readKwargsNode.execute(frame);
12041204
Object[] fastcallArgs = new Object[args.length + kwargs.length];
12051205
Object kwnamesTuple = PNone.NO_VALUE;
12061206
PythonUtils.arraycopy(args, 0, fastcallArgs, 0, args.length);
@@ -1240,16 +1240,16 @@ public static final class MethMethodRoot extends MethodDescriptorRoot {
12401240
public MethMethodRoot(PythonLanguage language, TruffleString name, boolean isStatic, PExternalFunctionWrapper provider) {
12411241
super(language, name, isStatic, provider);
12421242
this.readClsNode = ReadIndexedArgumentNode.create(1);
1243-
this.readVarargsNode = ReadVarArgsNode.create(true);
1244-
this.readKwargsNode = ReadVarKeywordsNode.create(PythonUtils.EMPTY_TRUFFLESTRING_ARRAY);
1243+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
1244+
this.readKwargsNode = ReadVarKeywordsNode.create(SIGNATURE.varKeywordsPArgumentsIndex());
12451245
}
12461246

12471247
@Override
12481248
protected Object[] prepareCArguments(VirtualFrame frame) {
12491249
Object self = readSelf(frame);
12501250
Object cls = readClsNode.execute(frame);
1251-
Object[] args = readVarargsNode.executeObjectArray(frame);
1252-
PKeyword[] kwargs = readKwargsNode.executePKeyword(frame);
1251+
Object[] args = readVarargsNode.execute(frame);
1252+
PKeyword[] kwargs = readKwargsNode.execute(frame);
12531253
Object[] fastcallArgs = new Object[args.length + kwargs.length];
12541254
Object[] fastcallKwnames = new Object[kwargs.length];
12551255
PythonUtils.arraycopy(args, 0, fastcallArgs, 0, args.length);
@@ -1282,13 +1282,13 @@ public static final class MethFastcallRoot extends MethodDescriptorRoot {
12821282

12831283
public MethFastcallRoot(PythonLanguage language, TruffleString name, boolean isStatic, PExternalFunctionWrapper provider) {
12841284
super(language, name, isStatic, provider);
1285-
this.readVarargsNode = ReadVarArgsNode.create(true);
1285+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
12861286
}
12871287

12881288
@Override
12891289
protected Object[] prepareCArguments(VirtualFrame frame) {
12901290
Object self = readSelf(frame);
1291-
Object[] args = readVarargsNode.executeObjectArray(frame);
1291+
Object[] args = readVarargsNode.execute(frame);
12921292
return new Object[]{self, new CPyObjectArrayWrapper(args), args.length};
12931293
}
12941294

@@ -1713,14 +1713,14 @@ static class MethPowRootNode extends MethodDescriptorRoot {
17131713

17141714
MethPowRootNode(PythonLanguage language, TruffleString name, PExternalFunctionWrapper provider) {
17151715
super(language, name, false, provider);
1716-
this.readVarargsNode = ReadVarArgsNode.create(true);
1716+
this.readVarargsNode = ReadVarArgsNode.create(SIGNATURE.varArgsPArgumentsIndex());
17171717
this.profile = ConditionProfile.create();
17181718
}
17191719

17201720
@Override
17211721
protected final Object[] prepareCArguments(VirtualFrame frame) {
17221722
Object self = readSelf(frame);
1723-
Object[] varargs = readVarargsNode.executeObjectArray(frame);
1723+
Object[] varargs = readVarargsNode.execute(frame);
17241724
Object arg0 = varargs[0];
17251725
Object arg1 = profile.profile(varargs.length > 1) ? varargs[1] : PNone.NONE;
17261726
return getArguments(self, arg0, arg1);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/exception/OSErrorEnum.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,8 @@ public enum OSErrorEnum {
223223

224224
OSErrorEnum(int number, TruffleString message, TruffleString... alternativeMessages) {
225225
this.number = number;
226-
this.message = message != null ? message : null;
227-
this.alternativeMessages = new TruffleString[alternativeMessages.length];
228-
for (int i = 0; i < alternativeMessages.length; i++) {
229-
this.alternativeMessages[i] = alternativeMessages[i];
230-
}
226+
this.message = message;
227+
this.alternativeMessages = alternativeMessages;
231228
}
232229

233230
OSErrorEnum(int number, TruffleString message) {

0 commit comments

Comments
 (0)