Skip to content

Commit d550c55

Browse files
committed
Add builtin 'storage' to access typed sequence storages.
1 parent 4b44b28 commit d550c55

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,31 @@
5454
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5555
import com.oracle.graal.python.builtins.PythonBuiltins;
5656
import com.oracle.graal.python.builtins.objects.PNone;
57+
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
5758
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
5859
import com.oracle.graal.python.builtins.objects.function.PFunction;
5960
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
6061
import com.oracle.graal.python.builtins.objects.method.PMethod;
6162
import com.oracle.graal.python.builtins.objects.module.PythonModule;
6263
import com.oracle.graal.python.nodes.SpecialAttributeNames;
6364
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
65+
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6466
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
67+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
6568
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
6669
import com.oracle.graal.python.nodes.util.CastToStringNode;
6770
import com.oracle.graal.python.runtime.PythonContext;
6871
import com.oracle.graal.python.runtime.PythonCore;
6972
import com.oracle.graal.python.runtime.exception.PythonErrorType;
73+
import com.oracle.graal.python.runtime.sequence.PSequence;
74+
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
7075
import com.oracle.truffle.api.CompilerDirectives;
7176
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
7277
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
7378
import com.oracle.truffle.api.TruffleFile;
7479
import com.oracle.truffle.api.TruffleLanguage.Env;
80+
import com.oracle.truffle.api.dsl.Cached;
81+
import com.oracle.truffle.api.dsl.CachedContext;
7582
import com.oracle.truffle.api.dsl.Fallback;
7683
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
7784
import com.oracle.truffle.api.dsl.Specialization;
@@ -91,7 +98,7 @@
9198
@CoreFunctions(defineModule = "polyglot")
9299
public final class PolyglotModuleBuiltins extends PythonBuiltins {
93100
@Override
94-
protected List<com.oracle.truffle.api.dsl.NodeFactory<? extends PythonBuiltinNode>> getNodeFactories() {
101+
protected List<com.oracle.truffle.api.dsl.NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
95102
return PolyglotModuleBuiltinsFactory.getFactories();
96103
}
97104

@@ -554,4 +561,22 @@ boolean keyInfo(Object receiver, long member, String info) {
554561
}
555562
}
556563

564+
@Builtin(name = "storage", minNumOfPositionalArgs = 1)
565+
@GenerateNodeFactory
566+
@TypeSystemReference(PythonArithmeticTypes.class)
567+
public abstract static class StorageNode extends PythonUnaryBuiltinNode {
568+
@Specialization
569+
Object doSequence(PSequence seq,
570+
@Cached SequenceNodes.GetSequenceStorageNode getSequenceStorageNode,
571+
@CachedContext(PythonLanguage.class) PythonContext context) {
572+
SequenceStorage storage = getSequenceStorageNode.execute(seq);
573+
return context.getEnv().asGuestValue(storage.getInternalArrayObject());
574+
}
575+
576+
@Fallback
577+
Object doError(Object object) {
578+
throw raise(PythonBuiltinClassType.TypeError, "unsupported operand '%p'", object);
579+
}
580+
}
581+
557582
}

0 commit comments

Comments
 (0)