Skip to content

Commit 492d04f

Browse files
committed
Implement context function ctx_Index
1 parent 2d0f896 commit 492d04f

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
6565
import com.oracle.graal.python.builtins.objects.cext.common.CExtContext;
6666
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyArithmetic;
67+
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyAsIndex;
6768
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyAsPyObject;
6869
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyBytesAsString;
6970
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyBytesGetSize;
@@ -192,7 +193,8 @@ enum HPyContextMembers {
192193
CTX_INPLACEFLOORDIVIDE("ctx_InPlaceFloorDivide"),
193194
CTX_INPLACETRUEDIVIDE("ctx_InPlaceTrueDivide"),
194195
CTX_INPLACEREMAINDER("ctx_InPlaceRemainder"),
195-
CTX_INPLACEDIVMOD("ctx_InPlaceDivmod"),
196+
// TODO(fa): support IDivMod
197+
// CTX_INPLACEDIVMOD("ctx_InPlaceDivmod"),
196198
CTX_INPLACELSHIFT("ctx_InPlaceLshift"),
197199
CTX_INPLACERSHIFT("ctx_InPlaceRshift"),
198200
CTX_INPLACEAND("ctx_InPlaceAnd"),
@@ -455,8 +457,7 @@ private static Object[] createMembers(PythonContext context) {
455457
members[HPyContextMembers.CTX_POSITIVE.ordinal()] = new GraalHPyArithmetic(UnaryArithmetic.Pos);
456458
members[HPyContextMembers.CTX_ABSOLUTE.ordinal()] = new GraalHPyCallBuiltinFunction(BuiltinNames.ABS, 1);
457459
members[HPyContextMembers.CTX_INVERT.ordinal()] = new GraalHPyArithmetic(UnaryArithmetic.Invert);
458-
// TODO(fa): Index unsupported ?
459-
members[HPyContextMembers.CTX_INDEX.ordinal()] = null;
460+
members[HPyContextMembers.CTX_INDEX.ordinal()] = new GraalHPyAsIndex();
460461
members[HPyContextMembers.CTX_LONG.ordinal()] = new GraalHPyCallBuiltinFunction(BuiltinNames.INT, 1);
461462
members[HPyContextMembers.CTX_FLOAT.ordinal()] = new GraalHPyCallBuiltinFunction(BuiltinNames.FLOAT, 1);
462463

@@ -481,8 +482,6 @@ private static Object[] createMembers(PythonContext context) {
481482
members[HPyContextMembers.CTX_INPLACEFLOORDIVIDE.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.IFloorDiv);
482483
members[HPyContextMembers.CTX_INPLACETRUEDIVIDE.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.ITrueDiv);
483484
members[HPyContextMembers.CTX_INPLACEREMAINDER.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.IMod);
484-
// TODO(fa): IDivMod unsupported ?
485-
members[HPyContextMembers.CTX_INPLACEDIVMOD.ordinal()] = null;
486485
members[HPyContextMembers.CTX_INPLACELSHIFT.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.ILShift);
487486
members[HPyContextMembers.CTX_INPLACERSHIFT.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.IRShift);
488487
members[HPyContextMembers.CTX_INPLACEAND.ordinal()] = new GraalHPyArithmetic(InplaceArithmetic.IAnd);

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,4 +1563,29 @@ Object execute(Object[] arguments,
15631563
}
15641564
}
15651565
}
1566+
1567+
@ExportLibrary(InteropLibrary.class)
1568+
public static final class GraalHPyAsIndex extends GraalHPyContextFunction {
1569+
1570+
@ExportMessage
1571+
Object execute(Object[] arguments,
1572+
@Cached HPyAsContextNode asContextNode,
1573+
@Cached HPyAsPythonObjectNode asPythonObjectNode,
1574+
@CachedLibrary(limit = "1") PythonObjectLibrary lib,
1575+
@Cached HPyAsHandleNode asHandleNode,
1576+
@Cached HPyTransformExceptionToNativeNode transformExceptionToNativeNode) throws ArityException {
1577+
if (arguments.length != 2) {
1578+
CompilerDirectives.transferToInterpreterAndInvalidate();
1579+
throw ArityException.create(2, arguments.length);
1580+
}
1581+
GraalHPyContext nativeContext = asContextNode.execute(arguments[0]);
1582+
Object receiver = asPythonObjectNode.execute(nativeContext, arguments[1]);
1583+
try {
1584+
return asHandleNode.execute(nativeContext, lib.asIndex(receiver));
1585+
} catch (PException e) {
1586+
transformExceptionToNativeNode.execute(nativeContext, e);
1587+
return nativeContext.getNullHandle();
1588+
}
1589+
}
1590+
}
15661591
}

0 commit comments

Comments
 (0)