|
42 | 42 |
|
43 | 43 | import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
|
44 | 44 | import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
|
| 45 | +import static com.oracle.graal.python.nodes.PGuards.cannotBeOverridden; |
45 | 46 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__SIZEOF__;
|
46 | 47 |
|
47 | 48 | import java.io.IOException;
|
|
69 | 70 | import com.oracle.graal.python.builtins.objects.module.PythonModule;
|
70 | 71 | import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
|
71 | 72 | import com.oracle.graal.python.builtins.objects.str.PString;
|
| 73 | +import com.oracle.graal.python.builtins.objects.str.StringNodes.StringMaterializeNode; |
72 | 74 | import com.oracle.graal.python.builtins.objects.traceback.GetTracebackNode;
|
73 | 75 | import com.oracle.graal.python.builtins.objects.traceback.LazyTraceback;
|
74 | 76 | import com.oracle.graal.python.builtins.objects.traceback.PTraceback;
|
|
97 | 99 | import com.oracle.truffle.api.TruffleLanguage.Env;
|
98 | 100 | import com.oracle.truffle.api.dsl.Cached;
|
99 | 101 | import com.oracle.truffle.api.dsl.Cached.Shared;
|
| 102 | +import com.oracle.truffle.api.dsl.Fallback; |
100 | 103 | import com.oracle.truffle.api.dsl.GenerateNodeFactory;
|
101 | 104 | import com.oracle.truffle.api.dsl.NodeFactory;
|
102 | 105 | import com.oracle.truffle.api.dsl.Specialization;
|
@@ -415,15 +418,24 @@ protected String getFileSystemEncoding() {
|
415 | 418 | abstract static class InternNode extends PythonBuiltinNode {
|
416 | 419 | @Specialization
|
417 | 420 | @TruffleBoundary
|
418 |
| - String doBytes(String s) { |
| 421 | + String doString(String s) { |
419 | 422 | return s.intern();
|
420 | 423 | }
|
421 | 424 |
|
422 |
| - @Specialization |
423 |
| - @TruffleBoundary |
424 |
| - PString doBytes(PString ps) { |
425 |
| - String s = ps.getValue(); |
426 |
| - return factory().createString(s.intern()); |
| 425 | + @Specialization(limit = "1") |
| 426 | + String doPString(PString ps, |
| 427 | + @CachedLibrary("ps") PythonObjectLibrary lib, |
| 428 | + @Cached StringMaterializeNode materializeNode) { |
| 429 | + if (cannotBeOverridden(lib.getLazyPythonClass(ps))) { |
| 430 | + return doString(materializeNode.execute(ps)); |
| 431 | + } else { |
| 432 | + throw raise(TypeError, ErrorMessages.CANNOT_INTERN_P, ps); |
| 433 | + } |
| 434 | + } |
| 435 | + |
| 436 | + @Fallback |
| 437 | + String doOthers(Object obj) { |
| 438 | + throw raise(TypeError, ErrorMessages.ARG_MUST_BE_S_NOT_P, "intern()", "str", obj); |
427 | 439 | }
|
428 | 440 | }
|
429 | 441 |
|
|
0 commit comments