|
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