|
25 | 25 | */
|
26 | 26 | package com.oracle.graal.python.builtins;
|
27 | 27 |
|
| 28 | +import java.util.HashSet; |
| 29 | + |
| 30 | +import com.oracle.graal.python.builtins.objects.type.LazyPythonClass; |
28 | 31 | import com.oracle.truffle.api.CompilerAsserts;
|
| 32 | +import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; |
| 33 | +import com.oracle.truffle.api.object.Shape; |
29 | 34 |
|
30 |
| -public enum PythonBuiltinClassType { |
| 35 | +public enum PythonBuiltinClassType implements LazyPythonClass { |
31 | 36 |
|
32 |
| - TruffleObject(com.oracle.truffle.api.interop.TruffleObject.class, "truffle_object"), |
33 |
| - Boolean(java.lang.Boolean.class, "bool"), |
34 |
| - GetSetDescriptor(com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor.class, "get_set_desc"), |
35 |
| - PArray(com.oracle.graal.python.builtins.objects.array.PArray.class, "array"), |
36 |
| - PArrayIterator(com.oracle.graal.python.builtins.objects.iterator.PArrayIterator.class, "arrayiterator"), |
37 |
| - PBaseException(com.oracle.graal.python.builtins.objects.exception.PBaseException.class, "BaseException"), |
38 |
| - PBaseSetIterator(com.oracle.graal.python.builtins.objects.iterator.PBaseSetIterator.class, "iterator"), |
39 |
| - PBuiltinFunction(com.oracle.graal.python.builtins.objects.function.PBuiltinFunction.class, "method_descriptor"), |
40 |
| - PBuiltinMethod(com.oracle.graal.python.builtins.objects.method.PBuiltinMethod.class, "builtin_function_or_method"), |
41 |
| - PByteArray(com.oracle.graal.python.builtins.objects.bytes.PByteArray.class, "bytearray"), |
42 |
| - PBytes(com.oracle.graal.python.builtins.objects.bytes.PBytes.class, "bytes"), |
43 |
| - PCell(com.oracle.graal.python.builtins.objects.cell.PCell.class, "cell"), |
44 |
| - PComplex(com.oracle.graal.python.builtins.objects.complex.PComplex.class, "complex"), |
45 |
| - PDict(com.oracle.graal.python.builtins.objects.dict.PDict.class, "dict"), |
46 |
| - PDictKeysView(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictKeysView.class, "dict_keys"), |
47 |
| - PDictItemsIterator(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictItemsIterator.class, "dict_itemsiterator"), |
48 |
| - PDictItemsView(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictItemsView.class, "dict_items"), |
49 |
| - PDictKeysIterator(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictKeysIterator.class, "dict_keysiterator"), |
50 |
| - PDictValuesIterator(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictValuesIterator.class, "dict_valuesiterator"), |
51 |
| - PDictValuesView(com.oracle.graal.python.builtins.objects.dict.PDictView.PDictValuesView.class, "dict_values"), |
52 |
| - PDoubleSequenceIterator(com.oracle.graal.python.builtins.objects.iterator.PDoubleSequenceIterator.class, "iterator"), |
53 |
| - PEllipsis(com.oracle.graal.python.builtins.objects.PEllipsis.class, "ellipsis"), |
54 |
| - PEnumerate(com.oracle.graal.python.builtins.objects.enumerate.PEnumerate.class, "enumerate"), |
55 |
| - PFloat(com.oracle.graal.python.builtins.objects.floats.PFloat.class, "float"), |
56 |
| - PFrame(com.oracle.graal.python.builtins.objects.frame.PFrame.class, "frame"), |
57 |
| - PFrozenSet(com.oracle.graal.python.builtins.objects.set.PFrozenSet.class, "frozenset"), |
58 |
| - PFunction(com.oracle.graal.python.builtins.objects.function.PFunction.class, "function"), |
59 |
| - PGenerator(com.oracle.graal.python.builtins.objects.generator.PGenerator.class, "generator"), |
60 |
| - PGeneratorFunction(com.oracle.graal.python.builtins.objects.function.PGeneratorFunction.class, "function"), |
61 |
| - PInt(com.oracle.graal.python.builtins.objects.ints.PInt.class, "int"), |
62 |
| - PythonNativeVoidPtr(com.oracle.graal.python.builtins.objects.cext.PythonNativeVoidPtr.class, "int"), |
63 |
| - PIntegerSequenceIterator(com.oracle.graal.python.builtins.objects.iterator.PIntegerSequenceIterator.class, "iterator"), |
64 |
| - PList(com.oracle.graal.python.builtins.objects.list.PList.class, "list"), |
65 |
| - PLongSequenceIterator(com.oracle.graal.python.builtins.objects.iterator.PLongSequenceIterator.class, "iterator"), |
66 |
| - PMappingproxy(com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy.class, "mappingproxy"), |
67 |
| - PMemoryView(com.oracle.graal.python.builtins.objects.memoryview.PMemoryView.class, "memoryview"), |
68 |
| - PMethod(com.oracle.graal.python.builtins.objects.method.PMethod.class, "method"), |
69 |
| - PNone(com.oracle.graal.python.builtins.objects.PNone.class, "NoneType"), |
70 |
| - PNotImplemented(com.oracle.graal.python.builtins.objects.PNotImplemented.class, "NotImplementedType"), |
71 |
| - PRandom(com.oracle.graal.python.builtins.objects.random.PRandom.class, "random"), |
72 |
| - PRange(com.oracle.graal.python.builtins.objects.range.PRange.class, "range"), |
73 |
| - PRangeIterator(com.oracle.graal.python.builtins.objects.iterator.PRangeIterator.class, "iterator"), |
74 |
| - PRangeReverseIterator(com.oracle.graal.python.builtins.objects.iterator.PRangeIterator.PRangeReverseIterator.class, "iterator"), |
75 |
| - PReferenceType(com.oracle.graal.python.builtins.objects.referencetype.PReferenceType.class, "ReferenceType"), |
76 |
| - PSentinelIterator(com.oracle.graal.python.builtins.objects.iterator.PSentinelIterator.class, "callable_iterator"), |
77 |
| - PSequenceIterator(com.oracle.graal.python.builtins.objects.iterator.PSequenceIterator.class, "iterator"), |
78 |
| - PForeignArrayIterator(com.oracle.graal.python.builtins.objects.iterator.PForeignArrayIterator.class, "foreign_iterator"), |
79 |
| - PSequenceReverseIterator(com.oracle.graal.python.builtins.objects.reversed.PSequenceReverseIterator.class, "reversed"), |
80 |
| - PSet(com.oracle.graal.python.builtins.objects.set.PSet.class, "set"), |
81 |
| - PSlice(com.oracle.graal.python.builtins.objects.slice.PSlice.class, "slice"), |
82 |
| - PString(com.oracle.graal.python.builtins.objects.str.PString.class, "str"), |
83 |
| - PStringIterator(com.oracle.graal.python.builtins.objects.iterator.PStringIterator.class, "iterator"), |
84 |
| - PStringReverseIterator(com.oracle.graal.python.builtins.objects.reversed.PStringReverseIterator.class, "reversed"), |
85 |
| - PTraceback(com.oracle.graal.python.builtins.objects.traceback.PTraceback.class, "traceback"), |
86 |
| - PTuple(com.oracle.graal.python.builtins.objects.tuple.PTuple.class, "tuple"), |
87 |
| - PythonBuiltinClass(com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass.class, "type"), |
88 |
| - PythonClass(com.oracle.graal.python.builtins.objects.type.PythonClass.class, "type"), |
89 |
| - PythonNativeClass(com.oracle.graal.python.builtins.objects.cext.PythonNativeClass.class, "type"), |
90 |
| - PythonModule(com.oracle.graal.python.builtins.objects.module.PythonModule.class, "module"), |
91 |
| - PythonObject(com.oracle.graal.python.builtins.objects.object.PythonObject.class, "object"), |
92 |
| - PythonNativeObject(com.oracle.graal.python.builtins.objects.cext.PythonNativeObject.class, "object"), |
93 |
| - Super(com.oracle.graal.python.builtins.objects.superobject.SuperObject.class, "super"), |
94 |
| - PCode(com.oracle.graal.python.builtins.objects.code.PCode.class, "code"), |
95 |
| - PZip(com.oracle.graal.python.builtins.objects.iterator.PZip.class, "zip"), |
96 |
| - PBuffer(com.oracle.graal.python.builtins.objects.memoryview.PBuffer.class, "buffer"); |
| 37 | + TruffleObject("truffle_object"), |
| 38 | + Boolean("bool", "builtins"), |
| 39 | + GetSetDescriptor("get_set_desc"), |
| 40 | + PArray("array", "array"), |
| 41 | + PArrayIterator("arrayiterator"), |
| 42 | + PBaseException("BaseException", "builtins"), |
| 43 | + PIterator("iterator"), |
| 44 | + PBuiltinFunction("method_descriptor"), |
| 45 | + PBuiltinMethod("builtin_function_or_method"), |
| 46 | + PByteArray("bytearray", "builtins"), |
| 47 | + PBytes("bytes", "builtins"), |
| 48 | + PCell("cell"), |
| 49 | + PComplex("complex", "builtins"), |
| 50 | + PDict("dict", "builtins"), |
| 51 | + PDictKeysView("dict_keys"), |
| 52 | + PDictItemsIterator("dict_itemsiterator"), |
| 53 | + PDictItemsView("dict_items"), |
| 54 | + PDictKeysIterator("dict_keysiterator"), |
| 55 | + PDictValuesIterator("dict_valuesiterator"), |
| 56 | + PDictValuesView("dict_values"), |
| 57 | + PEllipsis("ellipsis"), |
| 58 | + PEnumerate("enumerate", "builtins"), |
| 59 | + PFloat("float", "builtins"), |
| 60 | + PFrame("frame"), |
| 61 | + PFrozenSet("frozenset", "builtins"), |
| 62 | + PFunction("function"), |
| 63 | + PGenerator("generator"), |
| 64 | + PInt("int", "builtins"), |
| 65 | + PList("list", "builtins"), |
| 66 | + PMappingproxy("mappingproxy"), |
| 67 | + PMemoryView("memoryview", "builtins"), |
| 68 | + PMethod("method"), |
| 69 | + PNone("NoneType"), |
| 70 | + PNotImplemented("NotImplementedType"), |
| 71 | + PRandom("Random", "_random"), |
| 72 | + PRange("range", "builtins"), |
| 73 | + PReferenceType("ReferenceType", "_weakref"), |
| 74 | + PSentinelIterator("callable_iterator"), |
| 75 | + PForeignArrayIterator("foreign_iterator"), |
| 76 | + PReverseIterator("reversed", "builtins"), |
| 77 | + PSet("set", "builtins"), |
| 78 | + PSlice("slice", "builtins"), |
| 79 | + PString("str", "builtins"), |
| 80 | + PTraceback("traceback"), |
| 81 | + PTuple("tuple", "builtins"), |
| 82 | + PythonClass("type", "builtins"), |
| 83 | + PythonModule("module"), |
| 84 | + PythonObject("object", "builtins"), |
| 85 | + Super("super", "builtins"), |
| 86 | + PCode("code"), |
| 87 | + PZip("zip", "builtins"), |
| 88 | + PBuffer("buffer"); |
97 | 89 |
|
98 | 90 | private final String shortName;
|
| 91 | + private final Shape instanceShape; |
| 92 | + private final String publicInModule; |
| 93 | + |
| 94 | + // initialized in static constructor |
| 95 | + @CompilationFinal private PythonBuiltinClassType base; |
99 | 96 |
|
100 |
| - PythonBuiltinClassType(@SuppressWarnings("unused") Class<?> clazz, String shortName) { |
| 97 | + PythonBuiltinClassType(String shortName, String publicInModule) { |
101 | 98 | this.shortName = shortName;
|
| 99 | + this.publicInModule = publicInModule; |
| 100 | + this.instanceShape = com.oracle.graal.python.builtins.objects.type.PythonClass.freshShape(); |
| 101 | + } |
| 102 | + |
| 103 | + PythonBuiltinClassType(String shortName) { |
| 104 | + this(shortName, null); |
| 105 | + } |
| 106 | + |
| 107 | + public String getShortName() { |
| 108 | + return shortName; |
| 109 | + } |
| 110 | + |
| 111 | + public PythonBuiltinClassType getBase() { |
| 112 | + return base; |
| 113 | + } |
| 114 | + |
| 115 | + public String getPublicInModule() { |
| 116 | + return publicInModule; |
102 | 117 | }
|
103 | 118 |
|
104 | 119 | @Override
|
105 | 120 | public String toString() {
|
106 | 121 | CompilerAsserts.neverPartOfCompilation();
|
107 | 122 | return shortName;
|
108 | 123 | }
|
| 124 | + |
| 125 | + public Shape getInstanceShape() { |
| 126 | + return instanceShape; |
| 127 | + } |
| 128 | + |
| 129 | + static { |
| 130 | + HashSet<String> set = new HashSet<>(); |
| 131 | + for (PythonBuiltinClassType type : values()) { |
| 132 | + assert set.add(type.shortName) : type.name(); |
| 133 | + type.base = PythonObject; |
| 134 | + } |
| 135 | + Boolean.base = PInt; |
| 136 | + } |
109 | 137 | }
|
0 commit comments