Skip to content

Commit d0011d1

Browse files
committed
[GR-36580] Adopt TruffleString
PullRequest: graalpython/2116
2 parents 38194c1 + 9e208aa commit d0011d1

File tree

654 files changed

+24509
-18987
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

654 files changed

+24509
-18987
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "009458261d287aa3e859ff7405ce0793d1914fc6" }
1+
{ "overlay": "1143cb42864b0555ad23080c5b5b2850c547bdd8" }

graalpython/com.oracle.graal.python.annotations/src/com/oracle/graal/python/annotations/ArgumentClinic.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, 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
@@ -57,7 +57,7 @@
5757
* Specifies a predefined conversion routine to use. Other fields of this annotation specify
5858
* configuration for the conversion routine. Note that not all routines support all the
5959
* configuration options.
60-
*
60+
*
6161
* Conversion routines are implemented in {@code ConverterFactory}. It creates Java code
6262
* snippets that instantiate the actual cast nodes, which should implement
6363
* {@code ArgumentCastNode}.
@@ -89,9 +89,9 @@
8989
*/
9090
String[] args() default {};
9191

92-
public static final String VALUE_EMPTY_STRING = "\"\"";
93-
public static final String VALUE_NONE = "PNone.NONE";
94-
public static final String VALUE_NO_VALUE = "PNone.NO_VALUE";
92+
String VALUE_EMPTY_TSTRING = "T_EMPTY_STRING";
93+
String VALUE_NONE = "PNone.NONE";
94+
String VALUE_NO_VALUE = "PNone.NO_VALUE";
9595

9696
enum PrimitiveType {
9797
Boolean,
@@ -116,10 +116,10 @@ enum ClinicConversion {
116116
*/
117117
IntToBoolean,
118118
/**
119-
* GraalPython specific converter that narrows any String representation to Java String.
119+
* GraalPython specific converter that narrows any String representation to Truffle String.
120120
* Supports {@link #defaultValue()}, and {@link #useDefaultForNone()}.
121121
*/
122-
String,
122+
TString,
123123
/**
124124
* Corresponds to CPython's {@code int} converter. Supports {@link #defaultValue()}, and
125125
* {@link #useDefaultForNone()}.

graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/ArgumentClinicModel.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, 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
@@ -222,6 +222,9 @@ public static ArgumentClinicData create(ArgumentClinic annotation, TypeElement t
222222
if (annotation.defaultValue().startsWith("PNone.")) {
223223
imports.add("com.oracle.graal.python.builtins.objects.PNone");
224224
}
225+
if (annotation.defaultValue().startsWith("T_")) {
226+
imports.add("static com.oracle.graal.python.nodes.StringLiterals.*");
227+
}
225228

226229
return new ArgumentClinicData(annotation, index, new HashSet<>(Arrays.asList(factory.acceptedPrimitiveTypes)), castNodeFactory, imports);
227230
}

graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/ConverterFactory.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, 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
@@ -88,8 +88,8 @@ public enum Param {
8888

8989
private static ConverterFactory[] BuiltinBoolean;
9090
private static ConverterFactory[] BuiltinIntToBoolean;
91-
private static ConverterFactory[] BuiltinString;
92-
private static ConverterFactory[] BuiltinStringWithDefaultValue;
91+
private static ConverterFactory[] BuiltinTString;
92+
private static ConverterFactory[] BuiltinTStringWithDefaultValue;
9393
private static ConverterFactory[] BuiltinInt;
9494
private static ConverterFactory[] BuiltinLong;
9595
private static ConverterFactory[] BuiltinCodePoint;
@@ -132,8 +132,8 @@ public static ConverterFactory[] getBuiltin(ArgumentClinic annotation) {
132132
return BuiltinBoolean;
133133
case IntToBoolean:
134134
return BuiltinIntToBoolean;
135-
case String:
136-
return annotation.defaultValue().isEmpty() ? BuiltinString : BuiltinStringWithDefaultValue;
135+
case TString:
136+
return annotation.defaultValue().isEmpty() ? BuiltinTString : BuiltinTStringWithDefaultValue;
137137
case Int:
138138
return BuiltinInt;
139139
case Long:
@@ -218,8 +218,8 @@ private static ConverterFactory[] forBuiltin(Elements elementUtils, String class
218218
public static void initBuiltins(Elements elementUtils) throws ProcessingError {
219219
BuiltinBoolean = forBuiltin(elementUtils, "JavaBooleanConverterNode");
220220
BuiltinIntToBoolean = forBuiltin(elementUtils, "JavaIntToBooleanConverterNode");
221-
BuiltinString = forBuiltin(elementUtils, "JavaStringConverterNode");
222-
BuiltinStringWithDefaultValue = forBuiltin(elementUtils, "JavaStringConverterWithDefaultValueNode");
221+
BuiltinTString = forBuiltin(elementUtils, "TruffleStringConverterNode");
222+
BuiltinTStringWithDefaultValue = forBuiltin(elementUtils, "TruffleStringConverterWithDefaultValueNode");
223223
BuiltinInt = forBuiltin(elementUtils, "JavaIntConversionNode");
224224
BuiltinLong = forBuiltin(elementUtils, "JavaLongConversionNode");
225225
BuiltinDouble = forBuiltin(elementUtils, "JavaDoubleConversionNode");

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public static void main(String[] args) {
7474
private static final String LANGUAGE_ID = "python";
7575

7676
// provided by GraalVM bash launchers, ignored in native image mode
77-
protected static final String BASH_LAUNCHER_EXEC_NAME = System.getProperty("org.graalvm.launcher.executablename");
77+
protected static final String J_BASH_LAUNCHER_EXEC_NAME = System.getProperty("org.graalvm.launcher.executablename");
7878

7979
private static long startupWallClockTime = -1;
8080
private static long startupNanoTime = -1;
@@ -394,7 +394,7 @@ private static String getLauncherExecName() {
394394
}
395395
return ProcessProperties.getExecutableName();
396396
}
397-
return GraalPythonMain.BASH_LAUNCHER_EXEC_NAME;
397+
return GraalPythonMain.J_BASH_LAUNCHER_EXEC_NAME;
398398
}
399399

400400
/**

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/SocketTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import static com.oracle.graal.python.runtime.PosixConstants.SO_TYPE;
7474
import static com.oracle.graal.python.runtime.PosixConstants.TCP_NODELAY;
7575
import static com.oracle.graal.python.runtime.PosixConstants.TCP_USER_TIMEOUT;
76+
import static com.oracle.graal.python.util.PythonUtils.toTruffleStringUncached;
7677
import static org.hamcrest.CoreMatchers.anyOf;
7778
import static org.hamcrest.CoreMatchers.equalTo;
7879
import static org.junit.Assert.assertArrayEquals;
@@ -958,11 +959,11 @@ private void checkUsa(FamilySpecificSockAddr expectedAddr, UniversalSockAddr act
958959
}
959960

960961
private Object s2p(String s) {
961-
return lib.createPathFromString(posixSupport, s);
962+
return lib.createPathFromString(posixSupport, toTruffleStringUncached(s));
962963
}
963964

964965
private String p2s(Object p) {
965-
return lib.getPathAsString(posixSupport, p);
966+
return lib.getPathAsString(posixSupport, p).toJavaStringUncached();
966967
}
967968

968969
private void expectErrno(OSErrorEnum... expectedErrorCodes) {

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2022, 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
@@ -40,6 +40,7 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules;
4242

43+
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
4344
import static org.junit.Assert.assertEquals;
4445
import static org.junit.Assert.assertFalse;
4546
import static org.junit.Assert.assertTrue;
@@ -73,10 +74,16 @@
7374
import com.oracle.truffle.api.dsl.Specialization;
7475
import com.oracle.truffle.api.frame.VirtualFrame;
7576
import com.oracle.truffle.api.nodes.RootNode;
77+
import com.oracle.truffle.api.strings.TruffleString;
7678

7779
public class ClinicTests {
7880
public static final boolean EXPECT_TYPE_ERROR = true;
7981
public static final int DEFAULT_VALUE_42 = 42;
82+
private static final TruffleString T_DO_DEFAULTS = tsLiteral("doDefaults");
83+
private static final TruffleString T_TYPE_ERROR = tsLiteral("typeError");
84+
private static final TruffleString T_A_INPUT = tsLiteral("a_input");
85+
private static final TruffleString T_B_INPUT = tsLiteral("b_input");
86+
private static final TruffleString T_DONE = tsLiteral("done");
8087

8188
@Before
8289
public void setUp() {
@@ -101,22 +108,22 @@ protected ArgumentClinicProvider getArgumentClinic() {
101108
Object doDefaults(int a, int b) {
102109
assertEquals(42, a);
103110
assertEquals(7, b);
104-
return "doDefaults";
111+
return T_DO_DEFAULTS;
105112
}
106113
}
107114

108115
@Test
109116
public void testDefaultValues() {
110117
CallTarget callTarget = createCallTarget(MyBuiltinWithDefaultValuesNodeGen.create());
111-
assertEquals("doDefaults", callTarget.call(PNone.NO_VALUE, PNone.NO_VALUE));
112-
assertEquals("doDefaults", callTarget.call(PNone.NONE, PNone.NO_VALUE));
113-
assertEquals("typeError", callTarget.call(PNone.NONE, PNone.NONE, EXPECT_TYPE_ERROR));
118+
assertEquals(T_DO_DEFAULTS, callTarget.call(PNone.NO_VALUE, PNone.NO_VALUE));
119+
assertEquals(T_DO_DEFAULTS, callTarget.call(PNone.NONE, PNone.NO_VALUE));
120+
assertEquals(T_TYPE_ERROR, callTarget.call(PNone.NONE, PNone.NONE, EXPECT_TYPE_ERROR));
114121
}
115122

116123
public static final class MyCustomConvertor extends ArgumentCastNode {
117-
private final String expectedArgValue;
124+
private final TruffleString expectedArgValue;
118125

119-
public MyCustomConvertor(String expectedArgValue) {
126+
public MyCustomConvertor(TruffleString expectedArgValue) {
120127
this.expectedArgValue = expectedArgValue;
121128
}
122129

@@ -138,13 +145,13 @@ public static MyCustomConvertor createWithExpected(@ArgumentName String name, @A
138145
assertEquals(42, defaultValue);
139146
assertTrue(useDefaultForNone);
140147
assertEquals("a_extra", extraArgument);
141-
return new MyCustomConvertor("a_input");
148+
return new MyCustomConvertor(T_A_INPUT);
142149
case "b":
143150
assertEquals(1, index);
144151
assertEquals(7, defaultValue);
145152
assertFalse(useDefaultForNone);
146153
assertEquals("b_extra", extraArgument);
147-
return new MyCustomConvertor("b_input");
154+
return new MyCustomConvertor(T_B_INPUT);
148155
default:
149156
throw new AssertionError(name);
150157
}
@@ -167,14 +174,14 @@ protected ArgumentClinicProvider getArgumentClinic() {
167174
Object doDefaults(int a, int b) {
168175
assertEquals(42, a);
169176
assertEquals(42, b);
170-
return "done";
177+
return T_DONE;
171178
}
172179
}
173180

174181
@Test
175182
public void testCustomConvertor() {
176183
CallTarget callTarget = createCallTarget(MyBuiltinWithCustomConvertorNodeGen.create());
177-
assertEquals("done", callTarget.call("a_input", "b_input"));
184+
assertEquals(T_DONE, callTarget.call(T_A_INPUT, T_B_INPUT));
178185
}
179186

180187
private static CallTarget createCallTarget(PythonBinaryClinicBuiltinNode node) {
@@ -197,7 +204,7 @@ public Object execute(VirtualFrame frame) {
197204
boolean expectTypeError = frame.getArguments().length >= 3 && (boolean) frame.getArguments()[2];
198205
if (expectTypeError) {
199206
ex.expect(PythonBuiltinClassType.TypeError, IsBuiltinClassProfile.getUncached());
200-
return "typeError";
207+
return T_TYPE_ERROR;
201208
} else {
202209
throw ex;
203210
}

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/ConversionNodeTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2022, 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
@@ -58,8 +58,10 @@
5858
import com.oracle.truffle.api.RootCallTarget;
5959
import com.oracle.truffle.api.frame.VirtualFrame;
6060

61+
import static com.oracle.graal.python.util.PythonUtils.tsArray;
62+
6163
public class ConversionNodeTests {
62-
static final Signature SIGNATURE = new Signature(-1, false, -1, false, new String[]{"arg"}, null);
64+
static final Signature SIGNATURE = new Signature(-1, false, -1, false, tsArray("arg"), null);
6365
@Rule public ExpectedException expectedException = ExpectedException.none();
6466

6567
protected static Object call(Object arg, ArgumentCastNode castNode) {

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/PathConversionNodeTests.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, 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
@@ -40,6 +40,9 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules;
4242

43+
import static com.oracle.graal.python.test.PythonTests.ts;
44+
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
45+
4346
import java.math.BigInteger;
4447
import java.util.Collections;
4548

@@ -63,10 +66,13 @@
6366
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
6467
import com.oracle.graal.python.test.PythonTests;
6568
import com.oracle.graal.python.util.Function;
69+
import com.oracle.truffle.api.strings.TruffleString;
6670

6771
@RunWith(Parameterized.class)
6872
public class PathConversionNodeTests extends ConversionNodeTests {
6973

74+
private static final TruffleString T_ABC = TruffleString.fromJavaStringUncached("abc", TS_ENCODING);
75+
7076
@Parameter(0) public String backendName;
7177
private Function<PosixPath, String> pathToString;
7278

@@ -109,14 +115,14 @@ public void noValueForbiddenWithoutFd() {
109115

110116
@Test
111117
public void string() {
112-
Assert.assertEquals("abc", callAndExpectPath(false, false, "abc", false));
113-
Assert.assertEquals("abc", callAndExpectPath(false, false, factory().createString("abc"), false));
118+
Assert.assertEquals("abc", callAndExpectPath(false, false, T_ABC, false));
119+
Assert.assertEquals("abc", callAndExpectPath(false, false, factory().createString(T_ABC), false));
114120
}
115121

116122
@Test
117123
public void stringWithZero() {
118124
expectPythonMessage("ValueError: fun: embedded null character in arg");
119-
call(false, false, "a\0c");
125+
call(false, false, ts("a\0c"));
120126
}
121127

122128
@Test

0 commit comments

Comments
 (0)