Skip to content

Commit ab739d1

Browse files
committed
move nodes around a bit
1 parent d0a75b1 commit ab739d1

File tree

2 files changed

+156
-138
lines changed

2 files changed

+156
-138
lines changed

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

Lines changed: 8 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@
6060
import com.oracle.graal.python.builtins.PythonBuiltins;
6161
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltinsFactory.CheckFunctionResultNodeGen;
6262
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltinsFactory.GetByteArrayNodeGen;
63-
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltinsFactory.MakeMayRaiseWrapperNodeFactory.MayRaiseBinaryNodeGen;
64-
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltinsFactory.MakeMayRaiseWrapperNodeFactory.MayRaiseTernaryNodeGen;
65-
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltinsFactory.MakeMayRaiseWrapperNodeFactory.MayRaiseUnaryNodeGen;
6663
import com.oracle.graal.python.builtins.objects.PNone;
6764
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
6865
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltins;
@@ -71,6 +68,14 @@
7168
import com.oracle.graal.python.builtins.objects.cext.CArrayWrappers.CByteArrayWrapper;
7269
import com.oracle.graal.python.builtins.objects.cext.CArrayWrappers.CStringWrapper;
7370
import com.oracle.graal.python.builtins.objects.cext.CExtNodes;
71+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.MayRaiseBinaryNode;
72+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.MayRaiseNode;
73+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.MayRaiseNodeFactory;
74+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.MayRaiseTernaryNode;
75+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.MayRaiseUnaryNode;
76+
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseBinaryNodeGen;
77+
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseTernaryNodeGen;
78+
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MayRaiseUnaryNodeGen;
7479
import com.oracle.graal.python.builtins.objects.cext.HandleCache;
7580
import com.oracle.graal.python.builtins.objects.cext.NativeWrappers.PySequenceArrayWrapper;
7681
import com.oracle.graal.python.builtins.objects.cext.NativeWrappers.PythonClassInitNativeWrapper;
@@ -111,14 +116,11 @@
111116
import com.oracle.graal.python.nodes.PNodeWithContext;
112117
import com.oracle.graal.python.nodes.SpecialAttributeNames;
113118
import com.oracle.graal.python.nodes.SpecialMethodNames;
114-
import com.oracle.graal.python.nodes.argument.CreateArgumentsNode;
115-
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
116119
import com.oracle.graal.python.nodes.argument.ReadIndexedArgumentNode;
117120
import com.oracle.graal.python.nodes.argument.ReadVarArgsNode;
118121
import com.oracle.graal.python.nodes.argument.ReadVarKeywordsNode;
119122
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
120123
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
121-
import com.oracle.graal.python.nodes.call.InvokeNode;
122124
import com.oracle.graal.python.nodes.call.PythonCallNode;
123125
import com.oracle.graal.python.nodes.expression.BinaryComparisonNode;
124126
import com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode;
@@ -160,7 +162,6 @@
160162
import com.oracle.truffle.api.interop.UnsupportedTypeException;
161163
import com.oracle.truffle.api.nodes.DirectCallNode;
162164
import com.oracle.truffle.api.nodes.Node;
163-
import com.oracle.truffle.api.nodes.NodeUtil;
164165
import com.oracle.truffle.api.nodes.NodeVisitor;
165166
import com.oracle.truffle.api.nodes.RootNode;
166167
import com.oracle.truffle.api.profiles.BranchProfile;
@@ -1775,136 +1776,6 @@ Object upcall(VirtualFrame frame, PythonModule cextModule, String name, Object[]
17751776
@Builtin(name = "make_may_raise_wrapper", minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2)
17761777
@GenerateNodeFactory
17771778
abstract static class MakeMayRaiseWrapperNode extends PythonBuiltinNode {
1778-
static class MayRaiseNodeFactory<T extends PythonBuiltinBaseNode> implements NodeFactory<T> {
1779-
private final T node;
1780-
1781-
public MayRaiseNodeFactory(T node) {
1782-
this.node = node;
1783-
}
1784-
1785-
public T createNode(Object... arguments) {
1786-
return NodeUtil.cloneNode(node);
1787-
}
1788-
1789-
@SuppressWarnings("unchecked")
1790-
public Class<T> getNodeClass() {
1791-
return (Class<T>) node.getClass();
1792-
}
1793-
1794-
public List<List<Class<?>>> getNodeSignatures() {
1795-
return null;
1796-
}
1797-
1798-
public List<Class<? extends Node>> getExecutionSignature() {
1799-
return null;
1800-
}
1801-
}
1802-
1803-
@Builtin(fixedNumOfPositionalArgs = 1)
1804-
static abstract class MayRaiseUnaryNode extends PythonUnaryBuiltinNode {
1805-
@Child private CreateArgumentsNode createArgsNode;
1806-
@Child private InvokeNode invokeNode;
1807-
private final Object errorResult;
1808-
1809-
public MayRaiseUnaryNode(PFunction func, Object errorResult) {
1810-
this.createArgsNode = CreateArgumentsNode.create();
1811-
this.invokeNode = InvokeNode.create(func);
1812-
this.errorResult = errorResult;
1813-
}
1814-
1815-
@Specialization
1816-
Object doit(Object argument) {
1817-
try {
1818-
Object[] arguments = createArgsNode.execute(argument);
1819-
return invokeNode.execute(null, arguments, new PKeyword[0]);
1820-
} catch (PException e) {
1821-
getContext().setCurrentException(e);
1822-
return errorResult;
1823-
}
1824-
}
1825-
}
1826-
1827-
@Builtin(fixedNumOfPositionalArgs = 2)
1828-
static abstract class MayRaiseBinaryNode extends PythonBinaryBuiltinNode {
1829-
@Child private CreateArgumentsNode createArgsNode;
1830-
@Child private InvokeNode invokeNode;
1831-
private final Object errorResult;
1832-
1833-
public MayRaiseBinaryNode(PFunction func, Object errorResult) {
1834-
this.createArgsNode = CreateArgumentsNode.create();
1835-
this.invokeNode = InvokeNode.create(func);
1836-
this.errorResult = errorResult;
1837-
}
1838-
1839-
@Specialization
1840-
Object doit(Object arg1, Object arg2) {
1841-
try {
1842-
Object[] arguments = createArgsNode.execute(arg1, arg2);
1843-
return invokeNode.execute(null, arguments, new PKeyword[0]);
1844-
} catch (PException e) {
1845-
getContext().setCurrentException(e);
1846-
return errorResult;
1847-
}
1848-
}
1849-
}
1850-
1851-
@Builtin(fixedNumOfPositionalArgs = 3)
1852-
static abstract class MayRaiseTernaryNode extends PythonTernaryBuiltinNode {
1853-
@Child private CreateArgumentsNode createArgsNode;
1854-
@Child private InvokeNode invokeNode;
1855-
private final Object errorResult;
1856-
1857-
public MayRaiseTernaryNode(PFunction func, Object errorResult) {
1858-
this.createArgsNode = CreateArgumentsNode.create();
1859-
this.invokeNode = InvokeNode.create(func);
1860-
this.errorResult = errorResult;
1861-
}
1862-
1863-
@Specialization
1864-
Object doit(Object arg1, Object arg2, Object arg3) {
1865-
try {
1866-
Object[] arguments = createArgsNode.execute(arg1, arg2, arg3);
1867-
return invokeNode.execute(null, arguments, new PKeyword[0]);
1868-
} catch (PException e) {
1869-
getContext().setCurrentException(e);
1870-
return errorResult;
1871-
}
1872-
}
1873-
}
1874-
1875-
@Builtin(takesVarArgs = true)
1876-
static class MayRaiseNode extends PythonBuiltinNode {
1877-
@Child private InvokeNode invokeNode;
1878-
@Child private ReadVarArgsNode readVarargsNode;
1879-
@Child private CreateArgumentsNode createArgsNode;
1880-
@Child private PythonObjectFactory factory;
1881-
private final Object errorResult;
1882-
1883-
protected MayRaiseNode(PythonCallable callable, Object errorResult) {
1884-
this.readVarargsNode = ReadVarArgsNode.create(0, true);
1885-
this.createArgsNode = CreateArgumentsNode.create();
1886-
this.invokeNode = InvokeNode.create(callable);
1887-
this.errorResult = errorResult;
1888-
}
1889-
1890-
@Override
1891-
public final Object execute(VirtualFrame frame) {
1892-
Object[] args = readVarargsNode.executeObjectArray(frame);
1893-
try {
1894-
Object[] arguments = createArgsNode.execute(args);
1895-
return invokeNode.execute(null, arguments, new PKeyword[0]);
1896-
} catch (PException e) {
1897-
getContext().setCurrentException(e);
1898-
return errorResult;
1899-
}
1900-
}
1901-
1902-
@Override
1903-
protected ReadArgumentNode[] getArguments() {
1904-
throw new IllegalAccessError();
1905-
}
1906-
}
1907-
19081779
private static final Builtin unaryBuiltin = MayRaiseUnaryNode.class.getAnnotation(Builtin.class);
19091780
private static final Builtin binaryBuiltin = MayRaiseBinaryNode.class.getAnnotation(Builtin.class);
19101781
private static final Builtin ternaryBuiltin = MayRaiseTernaryNode.class.getAnnotation(Builtin.class);

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

Lines changed: 148 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.cext;
4242

43+
import java.util.List;
44+
45+
import com.oracle.graal.python.builtins.Builtin;
4346
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4447
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.GetAttrNode;
4548
import com.oracle.graal.python.builtins.objects.PNone;
@@ -67,31 +70,45 @@
6770
import com.oracle.graal.python.builtins.objects.cext.NativeWrappers.PythonObjectNativeWrapper;
6871
import com.oracle.graal.python.builtins.objects.cext.NativeWrappers.TruffleObjectNativeWrapper;
6972
import com.oracle.graal.python.builtins.objects.floats.PFloat;
73+
import com.oracle.graal.python.builtins.objects.function.PFunction;
7074
import com.oracle.graal.python.builtins.objects.function.PKeyword;
75+
import com.oracle.graal.python.builtins.objects.function.PythonCallable;
7176
import com.oracle.graal.python.builtins.objects.ints.PInt;
7277
import com.oracle.graal.python.builtins.objects.str.PString;
7378
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
7479
import com.oracle.graal.python.builtins.objects.type.PythonClass;
75-
import com.oracle.graal.python.nodes.PNodeWithContext;
7680
import com.oracle.graal.python.nodes.PGuards;
81+
import com.oracle.graal.python.nodes.PNodeWithContext;
7782
import com.oracle.graal.python.nodes.SpecialMethodNames;
83+
import com.oracle.graal.python.nodes.argument.CreateArgumentsNode;
84+
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
85+
import com.oracle.graal.python.nodes.argument.ReadVarArgsNode;
7886
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
7987
import com.oracle.graal.python.nodes.call.CallNode;
88+
import com.oracle.graal.python.nodes.call.InvokeNode;
8089
import com.oracle.graal.python.nodes.call.special.CallBinaryMethodNode;
8190
import com.oracle.graal.python.nodes.call.special.CallTernaryMethodNode;
8291
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
8392
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
8493
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
94+
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
95+
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
96+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
97+
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
98+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
8599
import com.oracle.graal.python.nodes.object.GetClassNode;
86100
import com.oracle.graal.python.nodes.util.CastToIndexNode;
87101
import com.oracle.graal.python.runtime.PythonCore;
102+
import com.oracle.graal.python.runtime.exception.PException;
88103
import com.oracle.graal.python.runtime.exception.PythonErrorType;
104+
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
89105
import com.oracle.truffle.api.CompilerDirectives;
90106
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
91107
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
92108
import com.oracle.truffle.api.dsl.Cached;
93109
import com.oracle.truffle.api.dsl.Fallback;
94110
import com.oracle.truffle.api.dsl.ImportStatic;
111+
import com.oracle.truffle.api.dsl.NodeFactory;
95112
import com.oracle.truffle.api.dsl.Specialization;
96113
import com.oracle.truffle.api.frame.VirtualFrame;
97114
import com.oracle.truffle.api.interop.ArityException;
@@ -104,6 +121,7 @@
104121
import com.oracle.truffle.api.interop.UnsupportedTypeException;
105122
import com.oracle.truffle.api.nodes.ExplodeLoop;
106123
import com.oracle.truffle.api.nodes.Node;
124+
import com.oracle.truffle.api.nodes.NodeUtil;
107125
import com.oracle.truffle.api.profiles.BranchProfile;
108126
import com.oracle.truffle.api.profiles.ConditionProfile;
109127

@@ -1185,4 +1203,133 @@ public static PCallBinaryCapiFunction create(String name) {
11851203
}
11861204
}
11871205

1206+
public static class MayRaiseNodeFactory<T extends PythonBuiltinBaseNode> implements NodeFactory<T> {
1207+
private final T node;
1208+
1209+
public MayRaiseNodeFactory(T node) {
1210+
this.node = node;
1211+
}
1212+
1213+
public T createNode(Object... arguments) {
1214+
return NodeUtil.cloneNode(node);
1215+
}
1216+
1217+
@SuppressWarnings("unchecked")
1218+
public Class<T> getNodeClass() {
1219+
return (Class<T>) node.getClass();
1220+
}
1221+
1222+
public List<List<Class<?>>> getNodeSignatures() {
1223+
throw new IllegalAccessError();
1224+
}
1225+
1226+
public List<Class<? extends Node>> getExecutionSignature() {
1227+
throw new IllegalAccessError();
1228+
}
1229+
}
1230+
1231+
@Builtin(fixedNumOfPositionalArgs = 1)
1232+
public static abstract class MayRaiseUnaryNode extends PythonUnaryBuiltinNode {
1233+
@Child private CreateArgumentsNode createArgsNode;
1234+
@Child private InvokeNode invokeNode;
1235+
private final Object errorResult;
1236+
1237+
public MayRaiseUnaryNode(PFunction func, Object errorResult) {
1238+
this.createArgsNode = CreateArgumentsNode.create();
1239+
this.invokeNode = InvokeNode.create(func);
1240+
this.errorResult = errorResult;
1241+
}
1242+
1243+
@Specialization
1244+
Object doit(Object argument) {
1245+
try {
1246+
Object[] arguments = createArgsNode.execute(argument);
1247+
return invokeNode.execute(null, arguments, new PKeyword[0]);
1248+
} catch (PException e) {
1249+
getContext().setCurrentException(e);
1250+
return errorResult;
1251+
}
1252+
}
1253+
}
1254+
1255+
@Builtin(fixedNumOfPositionalArgs = 2)
1256+
public static abstract class MayRaiseBinaryNode extends PythonBinaryBuiltinNode {
1257+
@Child private CreateArgumentsNode createArgsNode;
1258+
@Child private InvokeNode invokeNode;
1259+
private final Object errorResult;
1260+
1261+
public MayRaiseBinaryNode(PFunction func, Object errorResult) {
1262+
this.createArgsNode = CreateArgumentsNode.create();
1263+
this.invokeNode = InvokeNode.create(func);
1264+
this.errorResult = errorResult;
1265+
}
1266+
1267+
@Specialization
1268+
Object doit(Object arg1, Object arg2) {
1269+
try {
1270+
Object[] arguments = createArgsNode.execute(arg1, arg2);
1271+
return invokeNode.execute(null, arguments, new PKeyword[0]);
1272+
} catch (PException e) {
1273+
getContext().setCurrentException(e);
1274+
return errorResult;
1275+
}
1276+
}
1277+
}
1278+
1279+
@Builtin(fixedNumOfPositionalArgs = 3)
1280+
public static abstract class MayRaiseTernaryNode extends PythonTernaryBuiltinNode {
1281+
@Child private CreateArgumentsNode createArgsNode;
1282+
@Child private InvokeNode invokeNode;
1283+
private final Object errorResult;
1284+
1285+
public MayRaiseTernaryNode(PFunction func, Object errorResult) {
1286+
this.createArgsNode = CreateArgumentsNode.create();
1287+
this.invokeNode = InvokeNode.create(func);
1288+
this.errorResult = errorResult;
1289+
}
1290+
1291+
@Specialization
1292+
Object doit(Object arg1, Object arg2, Object arg3) {
1293+
try {
1294+
Object[] arguments = createArgsNode.execute(arg1, arg2, arg3);
1295+
return invokeNode.execute(null, arguments, new PKeyword[0]);
1296+
} catch (PException e) {
1297+
getContext().setCurrentException(e);
1298+
return errorResult;
1299+
}
1300+
}
1301+
}
1302+
1303+
@Builtin(takesVarArgs = true)
1304+
public static class MayRaiseNode extends PythonBuiltinNode {
1305+
@Child private InvokeNode invokeNode;
1306+
@Child private ReadVarArgsNode readVarargsNode;
1307+
@Child private CreateArgumentsNode createArgsNode;
1308+
@Child private PythonObjectFactory factory;
1309+
private final Object errorResult;
1310+
1311+
public MayRaiseNode(PythonCallable callable, Object errorResult) {
1312+
this.readVarargsNode = ReadVarArgsNode.create(0, true);
1313+
this.createArgsNode = CreateArgumentsNode.create();
1314+
this.invokeNode = InvokeNode.create(callable);
1315+
this.errorResult = errorResult;
1316+
}
1317+
1318+
@Override
1319+
public final Object execute(VirtualFrame frame) {
1320+
Object[] args = readVarargsNode.executeObjectArray(frame);
1321+
try {
1322+
Object[] arguments = createArgsNode.execute(args);
1323+
return invokeNode.execute(null, arguments, new PKeyword[0]);
1324+
} catch (PException e) {
1325+
getContext().setCurrentException(e);
1326+
return errorResult;
1327+
}
1328+
}
1329+
1330+
@Override
1331+
protected ReadArgumentNode[] getArguments() {
1332+
throw new IllegalAccessError();
1333+
}
1334+
}
11881335
}

0 commit comments

Comments
 (0)