Skip to content

Commit 8ca4412

Browse files
committed
Move string conversion nodes to lib package
1 parent 75d8864 commit 8ca4412

File tree

14 files changed

+449
-178
lines changed

14 files changed

+449
-178
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import com.oracle.graal.python.annotations.ArgumentClinic;
8787
import com.oracle.graal.python.builtins.Builtin;
8888
import com.oracle.graal.python.builtins.CoreFunctions;
89+
import com.oracle.graal.python.builtins.Python3Core;
8990
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
9091
import com.oracle.graal.python.builtins.PythonBuiltins;
9192
import com.oracle.graal.python.builtins.modules.BuiltinFunctionsFactory.GetAttrNodeFactory;
@@ -124,6 +125,8 @@
124125
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
125126
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
126127
import com.oracle.graal.python.lib.PyNumberIndexNode;
128+
import com.oracle.graal.python.lib.PyObjectAsciiNode;
129+
import com.oracle.graal.python.lib.PyObjectReprAsObjectNode;
127130
import com.oracle.graal.python.lib.PyObjectSizeNode;
128131
import com.oracle.graal.python.nodes.BuiltinNames;
129132
import com.oracle.graal.python.nodes.ErrorMessages;
@@ -183,7 +186,6 @@
183186
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
184187
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCallContext;
185188
import com.oracle.graal.python.runtime.PythonContext;
186-
import com.oracle.graal.python.builtins.Python3Core;
187189
import com.oracle.graal.python.runtime.PythonOptions;
188190
import com.oracle.graal.python.runtime.PythonParser.ParserMode;
189191
import com.oracle.graal.python.runtime.exception.PException;
@@ -1628,7 +1630,7 @@ abstract static class ReprNode extends PythonUnaryBuiltinNode {
16281630

16291631
@Specialization
16301632
static Object repr(VirtualFrame frame, Object obj,
1631-
@Cached ObjectNodes.ReprAsObjectNode reprNode) {
1633+
@Cached PyObjectReprAsObjectNode reprNode) {
16321634
return reprNode.execute(frame, obj);
16331635
}
16341636
}
@@ -1671,7 +1673,7 @@ abstract static class AsciiNode extends PythonUnaryBuiltinNode {
16711673

16721674
@Specialization
16731675
public static String ascii(VirtualFrame frame, Object obj,
1674-
@Cached ObjectNodes.AsciiNode asciiNode) {
1676+
@Cached PyObjectAsciiNode asciiNode) {
16751677
return asciiNode.execute(frame, obj);
16761678
}
16771679
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mappingproxy/MappingproxyBuiltins.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@
4545
import com.oracle.graal.python.builtins.PythonBuiltins;
4646
import com.oracle.graal.python.builtins.objects.PNone;
4747
import com.oracle.graal.python.builtins.objects.function.PArguments;
48-
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
4948
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5049
import com.oracle.graal.python.builtins.objects.str.PString;
50+
import com.oracle.graal.python.lib.PyObjectReprAsJavaStringNode;
5151
import com.oracle.graal.python.lib.PyObjectSizeNode;
52+
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
5253
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5354
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5455
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -198,7 +199,7 @@ Object eq(VirtualFrame frame, PMappingproxy self, Object other,
198199
abstract static class StrNode extends PythonUnaryBuiltinNode {
199200
@Specialization
200201
static Object str(VirtualFrame frame, PMappingproxy self,
201-
@Cached ObjectNodes.StrAsObjectNode strNode) {
202+
@Cached PyObjectStrAsObjectNode strNode) {
202203
return strNode.execute(frame, self.getMapping());
203204
}
204205
}
@@ -208,7 +209,7 @@ static Object str(VirtualFrame frame, PMappingproxy self,
208209
abstract static class ReprNode extends PythonUnaryBuiltinNode {
209210
@Specialization
210211
static String repr(VirtualFrame frame, PMappingproxy self,
211-
@Cached ObjectNodes.ReprAsJavaStringNode reprNode) {
212+
@Cached PyObjectReprAsJavaStringNode reprNode) {
212213
String mappingRepr = reprNode.execute(frame, self.getMapping());
213214
return PString.cat("mappingproxy(", mappingRepr, ")");
214215
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/ObjectNodes.java

Lines changed: 0 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETNEWARGS__;
6161
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETSTATE__;
6262
import static com.oracle.graal.python.nodes.SpecialMethodNames.__NEW__;
63-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
6463
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
6564
import static com.oracle.graal.python.runtime.object.IDUtils.ID_ELLIPSIS;
6665
import static com.oracle.graal.python.runtime.object.IDUtils.ID_EMPTY_BYTES;
@@ -78,7 +77,6 @@
7877
import com.oracle.graal.python.builtins.modules.BuiltinFunctions;
7978
import com.oracle.graal.python.builtins.objects.PNone;
8079
import com.oracle.graal.python.builtins.objects.PNotImplemented;
81-
import com.oracle.graal.python.builtins.objects.bytes.BytesUtils;
8280
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
8381
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
8482
import com.oracle.graal.python.builtins.objects.common.EconomicMapStorage;
@@ -90,7 +88,6 @@
9088
import com.oracle.graal.python.builtins.objects.dict.PDict;
9189
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
9290
import com.oracle.graal.python.builtins.objects.floats.PFloat;
93-
import com.oracle.graal.python.builtins.objects.function.PArguments;
9491
import com.oracle.graal.python.builtins.objects.ints.PInt;
9592
import com.oracle.graal.python.builtins.objects.list.PList;
9693
import com.oracle.graal.python.builtins.objects.object.ObjectNodesFactory.GetFullyQualifiedNameNodeGen;
@@ -103,11 +100,9 @@
103100
import com.oracle.graal.python.lib.PyObjectLookupAttr;
104101
import com.oracle.graal.python.lib.PyObjectSizeNode;
105102
import com.oracle.graal.python.nodes.BuiltinNames;
106-
import com.oracle.graal.python.nodes.ErrorMessages;
107103
import com.oracle.graal.python.nodes.PGuards;
108104
import com.oracle.graal.python.nodes.PNodeWithContext;
109105
import com.oracle.graal.python.nodes.PNodeWithState;
110-
import com.oracle.graal.python.nodes.PRaiseNode;
111106
import com.oracle.graal.python.nodes.SpecialAttributeNames;
112107
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
113108
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
@@ -134,7 +129,6 @@
134129
import com.oracle.truffle.api.library.CachedLibrary;
135130
import com.oracle.truffle.api.nodes.Node;
136131
import com.oracle.truffle.api.object.HiddenKey;
137-
import com.oracle.truffle.api.profiles.BranchProfile;
138132
import com.oracle.truffle.api.profiles.ConditionProfile;
139133

140134
public abstract class ObjectNodes {
@@ -772,73 +766,6 @@ static String get(VirtualFrame frame, Object self,
772766
}
773767
}
774768

775-
/**
776-
* Equivalent of CPython's {@code PyObject_Repr}.
777-
*
778-
* The output can be either a {@link String} or a {@link PString}.
779-
*
780-
* @see ReprAsJavaStringNode
781-
*/
782-
@GenerateUncached
783-
public abstract static class ReprAsObjectNode extends PNodeWithContext {
784-
public abstract Object execute(Frame frame, Object object);
785-
786-
@Specialization(limit = "3")
787-
static Object repr(VirtualFrame frame, Object obj,
788-
@CachedLibrary("obj") PythonObjectLibrary objLib,
789-
@CachedLibrary(limit = "2") PythonObjectLibrary methodLib,
790-
@Cached DefaultObjectReprNode defaultRepr,
791-
@Cached ConditionProfile hasRepr,
792-
@Cached ConditionProfile isString,
793-
@Cached ConditionProfile isPString,
794-
@Cached BranchProfile getRaisedException,
795-
@Cached PRaiseNode raiseNode) {
796-
Object reprMethod = objLib.lookupAttributeOnType(obj, __REPR__);
797-
if (hasRepr.profile(reprMethod != PNone.NO_VALUE)) {
798-
Object result = methodLib.callUnboundMethodIgnoreGetException(reprMethod, frame, obj);
799-
if (isString.profile(result instanceof String) || isPString.profile(result instanceof PString)) {
800-
return result;
801-
}
802-
if (result != PNone.NO_VALUE) {
803-
throw raiseNode.raise(TypeError, ErrorMessages.RETURNED_NON_STRING, __REPR__, obj);
804-
}
805-
getRaisedException.enter();
806-
}
807-
return defaultRepr.execute(frame, obj);
808-
}
809-
810-
public static ReprAsObjectNode create() {
811-
return ObjectNodesFactory.ReprAsObjectNodeGen.create();
812-
}
813-
}
814-
815-
/**
816-
* Equivalent of CPython's {@code PyObject_Repr}.
817-
*
818-
* The output is always coerced to a Java {@link String}
819-
*
820-
* @see ReprAsObjectNode
821-
*/
822-
@GenerateUncached
823-
public abstract static class ReprAsJavaStringNode extends PNodeWithContext {
824-
public abstract String execute(Frame frame, Object object);
825-
826-
@Specialization
827-
static String repr(VirtualFrame frame, Object obj,
828-
@Cached ReprAsObjectNode reprNode,
829-
@Cached CastToJavaStringNode cast) {
830-
return cast.execute(reprNode.execute(frame, obj));
831-
}
832-
833-
public static ReprAsJavaStringNode create() {
834-
return ObjectNodesFactory.ReprAsJavaStringNodeGen.create();
835-
}
836-
837-
public static ReprAsJavaStringNode getUncached() {
838-
return ObjectNodesFactory.ReprAsJavaStringNodeGen.getUncached();
839-
}
840-
}
841-
842769
/**
843770
* Default repr for objects that don't override {@code __repr__}
844771
*/
@@ -858,78 +785,4 @@ public static DefaultObjectReprNode create() {
858785
}
859786
}
860787

861-
/**
862-
* Equivalent of CPython's {@code PyObject_Str}.
863-
*
864-
* The output can be either a {@link String} or a {@link PString}.
865-
*
866-
* @see StrAsJavaStringNode
867-
*/
868-
@GenerateUncached
869-
public abstract static class StrAsObjectNode extends PNodeWithContext {
870-
public abstract Object execute(Frame frame, Object object);
871-
872-
@Specialization(limit = "3")
873-
static Object str(VirtualFrame frame, Object obj,
874-
@Cached ConditionProfile gotState,
875-
@CachedLibrary("obj") PythonObjectLibrary objLib) {
876-
if (gotState.profile(frame != null)) {
877-
return objLib.asPStringWithState(obj, PArguments.getThreadState(frame));
878-
} else {
879-
return objLib.asPString(obj);
880-
}
881-
}
882-
883-
public static StrAsObjectNode create() {
884-
return ObjectNodesFactory.StrAsObjectNodeGen.create();
885-
}
886-
}
887-
888-
/**
889-
* Equivalent of CPython's {@code PyObject_Str}.
890-
*
891-
* The output is always coerced to a Java {@link String}
892-
*
893-
* @see StrAsObjectNode
894-
*/
895-
@GenerateUncached
896-
public abstract static class StrAsJavaStringNode extends PNodeWithContext {
897-
public abstract String execute(Frame frame, Object object);
898-
899-
@Specialization
900-
static String str(VirtualFrame frame, Object obj,
901-
@Cached StrAsObjectNode strNode,
902-
@Cached CastToJavaStringNode cast) {
903-
return cast.execute(strNode.execute(frame, obj));
904-
}
905-
906-
public static StrAsJavaStringNode create() {
907-
return ObjectNodesFactory.StrAsJavaStringNodeGen.create();
908-
}
909-
910-
public static StrAsJavaStringNode getUncached() {
911-
return ObjectNodesFactory.StrAsJavaStringNodeGen.getUncached();
912-
}
913-
}
914-
915-
@GenerateUncached
916-
public abstract static class AsciiNode extends PNodeWithContext {
917-
public abstract String execute(Frame frame, Object object);
918-
919-
@Specialization
920-
static String ascii(VirtualFrame frame, Object obj,
921-
@Cached ObjectNodes.ReprAsJavaStringNode reprNode) {
922-
String repr = reprNode.execute(frame, obj);
923-
byte[] bytes = BytesUtils.unicodeNonAsciiEscape(repr);
924-
return PythonUtils.newString(bytes);
925-
}
926-
927-
public static AsciiNode create() {
928-
return ObjectNodesFactory.AsciiNodeGen.create();
929-
}
930-
931-
public static AsciiNode getUncached() {
932-
return ObjectNodesFactory.AsciiNodeGen.getUncached();
933-
}
934-
}
935788
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/StructSequence.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@
6666
import com.oracle.graal.python.builtins.objects.function.PKeyword;
6767
import com.oracle.graal.python.builtins.objects.function.Signature;
6868
import com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor;
69-
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
7069
import com.oracle.graal.python.builtins.objects.object.ObjectNodes.GetFullyQualifiedClassNameNode;
7170
import com.oracle.graal.python.builtins.objects.tuple.StructSequenceFactory.DisabledNewNodeGen;
7271
import com.oracle.graal.python.builtins.objects.tuple.StructSequenceFactory.NewNodeGen;
7372
import com.oracle.graal.python.builtins.objects.tuple.StructSequenceFactory.ReduceNodeGen;
7473
import com.oracle.graal.python.builtins.objects.tuple.StructSequenceFactory.ReprNodeGen;
7574
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
7675
import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetNameNode;
76+
import com.oracle.graal.python.lib.PyObjectReprAsJavaStringNode;
7777
import com.oracle.graal.python.nodes.ErrorMessages;
7878
import com.oracle.graal.python.nodes.PRootNode;
7979
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
@@ -465,7 +465,7 @@ abstract static class ReprNode extends PythonUnaryBuiltinNode {
465465
public String repr(VirtualFrame frame, PTuple self,
466466
@Cached GetFullyQualifiedClassNameNode getFullyQualifiedClassNameNode,
467467
@Cached("createNotNormalized()") GetItemNode getItemNode,
468-
@Cached ObjectNodes.ReprAsJavaStringNode reprNode) {
468+
@Cached PyObjectReprAsJavaStringNode reprNode) {
469469
StringBuilder buf = PythonUtils.newStringBuilder();
470470
PythonUtils.append(buf, getFullyQualifiedClassNameNode.execute(frame, self));
471471
PythonUtils.append(buf, '(');

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/TupleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@
6060
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
6161
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
6262
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
63-
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
6463
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6564
import com.oracle.graal.python.builtins.objects.slice.PSlice;
6665
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltinsClinicProviders.IndexNodeClinicProviderGen;
6766
import com.oracle.graal.python.lib.PyLongAsIntNode;
6867
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
68+
import com.oracle.graal.python.lib.PyObjectReprAsJavaStringNode;
6969
import com.oracle.graal.python.nodes.ErrorMessages;
7070
import com.oracle.graal.python.nodes.PGuards;
7171
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -189,7 +189,7 @@ public int doNative(PythonNativeObject self,
189189
@GenerateNodeFactory
190190
abstract static class ReprNode extends PythonUnaryBuiltinNode {
191191

192-
public static String toString(VirtualFrame frame, Object item, ObjectNodes.ReprAsJavaStringNode reprNode) {
192+
public static String toString(VirtualFrame frame, Object item, PyObjectReprAsJavaStringNode reprNode) {
193193
if (item != null) {
194194
return reprNode.execute(frame, item);
195195
}
@@ -201,7 +201,7 @@ public static String repr(VirtualFrame frame, PTuple self,
201201
@CachedContext(PythonLanguage.class) PythonContext ctxt,
202202
@Cached SequenceStorageNodes.LenNode getLen,
203203
@Cached("createNotNormalized()") SequenceStorageNodes.GetItemNode getItemNode,
204-
@Cached ObjectNodes.ReprAsJavaStringNode reprNode) {
204+
@Cached PyObjectReprAsJavaStringNode reprNode) {
205205
SequenceStorage tupleStore = self.getSequenceStorage();
206206
int len = getLen.execute(tupleStore);
207207
if (len == 0) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyFloatFromString.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
4545

4646
import com.oracle.graal.python.builtins.objects.floats.FloatUtils;
47-
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
4847
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
4948
import com.oracle.graal.python.nodes.ErrorMessages;
5049
import com.oracle.graal.python.nodes.PNodeWithContext;
@@ -75,7 +74,7 @@ public abstract class PyFloatFromString extends PNodeWithContext {
7574

7675
@Specialization
7776
static double doString(VirtualFrame frame, String object,
78-
@Shared("repr") @Cached ObjectNodes.ReprAsJavaStringNode reprNode,
77+
@Shared("repr") @Cached PyObjectReprAsJavaStringNode reprNode,
7978
@Shared("raise") @Cached PRaiseNode raiseNode) {
8079
return convertStringToDouble(frame, object, object, reprNode, raiseNode);
8180
}
@@ -84,7 +83,7 @@ static double doString(VirtualFrame frame, String object,
8483
static double doGeneric(VirtualFrame frame, Object object,
8584
@Cached CastToJavaStringNode cast,
8685
@CachedLibrary(limit = "3") PythonObjectLibrary lib,
87-
@Shared("repr") @Cached ObjectNodes.ReprAsJavaStringNode reprNode,
86+
@Shared("repr") @Cached PyObjectReprAsJavaStringNode reprNode,
8887
@Shared("raise") @Cached PRaiseNode raiseNode) {
8988
String string = null;
9089
try {
@@ -105,7 +104,7 @@ static double doGeneric(VirtualFrame frame, Object object,
105104
throw raiseNode.raise(TypeError, ErrorMessages.ARG_MUST_BE_STRING_OR_NUMBER, "float()", object);
106105
}
107106

108-
private static double convertStringToDouble(VirtualFrame frame, String src, Object origObj, ObjectNodes.ReprAsJavaStringNode reprNode, PRaiseNode raiseNode) {
107+
private static double convertStringToDouble(VirtualFrame frame, String src, Object origObj, PyObjectReprAsJavaStringNode reprNode, PRaiseNode raiseNode) {
109108
String str = FloatUtils.removeUnicodeAndUnderscores(src);
110109
// Adapted from CPython's float_from_string_inner
111110
if (str != null) {

0 commit comments

Comments
 (0)