|
54 | 54 | import com.oracle.graal.python.builtins.PythonBuiltinClassType;
|
55 | 55 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
56 | 56 | import com.oracle.graal.python.builtins.objects.PNone;
|
| 57 | +import com.oracle.graal.python.builtins.objects.common.SequenceNodes; |
57 | 58 | import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
|
58 | 59 | import com.oracle.graal.python.builtins.objects.function.PFunction;
|
59 | 60 | import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
|
60 | 61 | import com.oracle.graal.python.builtins.objects.method.PMethod;
|
61 | 62 | import com.oracle.graal.python.builtins.objects.module.PythonModule;
|
62 | 63 | import com.oracle.graal.python.nodes.SpecialAttributeNames;
|
63 | 64 | import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
|
| 65 | +import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode; |
64 | 66 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
| 67 | +import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode; |
65 | 68 | import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
|
66 | 69 | import com.oracle.graal.python.nodes.util.CastToStringNode;
|
67 | 70 | import com.oracle.graal.python.runtime.PythonContext;
|
68 | 71 | import com.oracle.graal.python.runtime.PythonCore;
|
69 | 72 | 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; |
70 | 75 | import com.oracle.truffle.api.CompilerDirectives;
|
71 | 76 | import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
|
72 | 77 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
73 | 78 | import com.oracle.truffle.api.TruffleFile;
|
74 | 79 | import com.oracle.truffle.api.TruffleLanguage.Env;
|
| 80 | +import com.oracle.truffle.api.dsl.Cached; |
| 81 | +import com.oracle.truffle.api.dsl.CachedContext; |
75 | 82 | import com.oracle.truffle.api.dsl.Fallback;
|
76 | 83 | import com.oracle.truffle.api.dsl.GenerateNodeFactory;
|
77 | 84 | import com.oracle.truffle.api.dsl.Specialization;
|
|
91 | 98 | @CoreFunctions(defineModule = "polyglot")
|
92 | 99 | public final class PolyglotModuleBuiltins extends PythonBuiltins {
|
93 | 100 | @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() { |
95 | 102 | return PolyglotModuleBuiltinsFactory.getFactories();
|
96 | 103 | }
|
97 | 104 |
|
@@ -554,4 +561,22 @@ boolean keyInfo(Object receiver, long member, String info) {
|
554 | 561 | }
|
555 | 562 | }
|
556 | 563 |
|
| 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 | + |
557 | 582 | }
|
0 commit comments