Skip to content

Commit fc2860e

Browse files
committed
more usages of lazy classes
1 parent f9b2995 commit fc2860e

23 files changed

+156
-136
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,9 @@ public final class Python3Core implements PythonCore {
272272
private final Map<String, PythonModule> builtinModules = new HashMap<>();
273273
@CompilationFinal private PythonModule builtinsModule;
274274

275-
@CompilationFinal private PythonBuiltinClass typeClass;
276-
@CompilationFinal private PythonBuiltinClass objectClass;
277-
@CompilationFinal private PythonBuiltinClass moduleClass;
278-
@CompilationFinal private PythonBuiltinClass foreignClass;
279275
@CompilationFinal private PInt pyTrue;
280276
@CompilationFinal private PInt pyFalse;
281277

282-
@CompilationFinal(dimensions = 1) private PythonClass[] errorClasses;
283278
private final PythonParser parser;
284279

285280
@CompilationFinal private PythonContext singletonContext;
@@ -493,7 +488,7 @@ private void initializeTypes() {
493488
createModule(annotation.defineModule());
494489
}
495490
}
496-
// publish builtin types in the "builtins" module
491+
// publish builtin types in the corresponding modules
497492
for (PythonBuiltinClassType builtinClass : PythonBuiltinClassType.VALUES) {
498493
String module = builtinClass.getPublicInModule();
499494
PythonBuiltinClass clazz = lookupType(builtinClass);

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

Lines changed: 39 additions & 39 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ String decodeBytes(ByteBuffer bytes, String encoding, String errors) {
441441
CharBuffer decoded = charset.newDecoder().onMalformedInput(errorAction).onUnmappableCharacter(errorAction).decode(bytes);
442442
return String.valueOf(decoded);
443443
} catch (IllegalArgumentException e) {
444-
throw this.raise(LookupError, "unknown encoding: %s", encoding);
444+
throw raise(LookupError, "unknown encoding: %s", encoding);
445445
} catch (CharacterCodingException e) {
446446
throw raise(UnicodeDecodeError, "%s", e.getMessage());
447447
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.util.concurrent.locks.ReentrantLock;
5151
import java.util.regex.Pattern;
5252

53+
import com.oracle.graal.python.PythonLanguage;
5354
import com.oracle.graal.python.builtins.Builtin;
5455
import com.oracle.graal.python.builtins.CoreFunctions;
5556
import com.oracle.graal.python.builtins.PythonBuiltins;
@@ -374,7 +375,7 @@ public Object run(String path, PythonModule mod) {
374375
} else {
375376
file = env.getTruffleFile(path);
376377
}
377-
Source src = getCore().getLanguage().newSource(ctxt, file, fileName);
378+
Source src = getRootNode().getLanguage(PythonLanguage.class).newSource(ctxt, file, fileName);
378379
CallTarget callTarget = env.parse(src);
379380
callTarget.call(PArguments.withGlobals(mod));
380381
} catch (PException e) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ Object first(@SuppressWarnings("unused") PNone arg) {
219219
* behavior. (it only captures the frames if a CallTarget boundary is crossed)
220220
*/
221221
private static final class GetStackTraceRootNode extends RootNode {
222-
private ContextReference<PythonContext> contextRef;
222+
private final ContextReference<PythonContext> contextRef;
223223

224224
protected GetStackTraceRootNode(PythonLanguage language) {
225225
super(language);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
185185
@Override
186186
public void initialize(PythonCore core) {
187187
super.initialize(core);
188-
PythonClass errorHandlerClass = core.factory().createPythonClass(core.lookupType(PythonBuiltinClassType.PythonClass), "CErrorHandler",
188+
PythonClass errorHandlerClass = core.factory().createPythonClass(PythonBuiltinClassType.PythonClass, "CErrorHandler",
189189
new PythonClass[]{core.lookupType(PythonBuiltinClassType.PythonObject)});
190190
builtinConstants.put("CErrorHandler", errorHandlerClass);
191191
builtinConstants.put(ERROR_HANDLER, core.factory().createPythonObject(errorHandlerClass));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PythonObjectNativeWrapperMR.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,7 @@ long doTpFlags(PythonClass object, @SuppressWarnings("unused") String key, long
650650
}
651651

652652
@Specialization(guards = {"eq(TP_BASICSIZE, key)", "isPythonBuiltinClass(object)"})
653+
@TruffleBoundary
653654
long doTpBasicsize(PythonBuiltinClass object, @SuppressWarnings("unused") String key, long basicsize) {
654655
// We have to use the 'setAttributeUnsafe' because this properly cannot be modified by
655656
// the user and we need to initialize it.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/exception/PBaseException.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,17 @@ public String toString() {
157157
CompilerAsserts.neverPartOfCompilation();
158158
if (args == null) {
159159
if (messageArgs != null && messageArgs.length > 0) {
160-
return getPythonClass().getName() + ": " + FORMATTER.format(messageFormat, messageArgs);
160+
return getLazyPythonClass().getName() + ": " + FORMATTER.format(messageFormat, messageArgs);
161161
}
162-
return getPythonClass().getName() + ": " + messageFormat;
162+
return getLazyPythonClass().getName() + ": " + messageFormat;
163163
} else if (args.getSequenceStorage().length() == 0) {
164-
return getPythonClass().getName();
164+
return getLazyPythonClass().getName();
165165
} else if (args.getSequenceStorage().length() == 1) {
166166
SequenceStorage store = args.getSequenceStorage();
167167
Object item = store instanceof BasicSequenceStorage ? store.getItemNormalized(0) : "<unknown>";
168-
return getPythonClass().getName() + ": " + item.toString();
168+
return getLazyPythonClass().getName() + ": " + item.toString();
169169
} else {
170-
return getPythonClass().getName() + ": " + args.toString();
170+
return getLazyPythonClass().getName() + ": " + args.toString();
171171
}
172172
}
173173

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/getsetdescriptor/GetSetDescriptorTypeBuiltins.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ abstract static class GetSetNode extends PythonTernaryBuiltinNode {
9191
private final IsBuiltinClassProfile isNoneBuiltinClassProfile = IsBuiltinClassProfile.create();
9292
private final ConditionProfile isBuiltinProfile = ConditionProfile.createBinaryProfile();
9393
private final IsBuiltinClassProfile isBuiltinClassProfile = IsBuiltinClassProfile.create();
94+
private final BranchProfile errorBranch = BranchProfile.create();
9495

9596
// https://github.com/python/cpython/blob/e8b19656396381407ad91473af5da8b0d4346e88/Objects/descrobject.c#L70
9697
protected boolean descr_check(GetSetDescriptor descr, Object obj, PythonClass type) {
@@ -114,7 +115,7 @@ protected boolean descr_check(GetSetDescriptor descr, Object obj, PythonClass ty
114115
}
115116
}
116117
}
117-
118+
errorBranch.enter();
118119
throw raise(TypeError, "descriptor '%s' for '%s' objects doesn't apply to '%s' object", descr.getName(), descrType.getName(), type.getName());
119120
}
120121
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/BuiltinMethodBuiltins.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@
4040
import com.oracle.graal.python.builtins.objects.module.PythonModule;
4141
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
4242
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
43+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
4344
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
4445
import com.oracle.graal.python.runtime.exception.PException;
4546
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
47+
import com.oracle.truffle.api.dsl.Cached;
4648
import com.oracle.truffle.api.dsl.Fallback;
4749
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
4850
import com.oracle.truffle.api.dsl.NodeFactory;
@@ -84,8 +86,9 @@ String reprBuiltinFunction(PBuiltinMethod self) {
8486

8587
@Specialization(guards = "!isBuiltinFunction(self)")
8688
@TruffleBoundary
87-
Object reprBuiltinMethod(PBuiltinMethod self) {
88-
return String.format("<built-in method %s of %s object at 0x%x>", self.getName(), self.getSelf(), self.hashCode());
89+
Object reprBuiltinMethod(PBuiltinMethod self,
90+
@Cached("create()") GetLazyClassNode getClassNode) {
91+
return String.format("<built-in method %s of %s object at 0x%x>", self.getName(), getClassNode.execute(self.getSelf()).getName(), self.hashCode());
8992
}
9093
}
9194

0 commit comments

Comments
 (0)