Skip to content

Commit 3427b9d

Browse files
committed
[GR-12160] Add findSourceLocation() impl for methods, functions, classes, code
PullRequest: graalpython/244
2 parents fa96845 + 3260911 commit 3427b9d

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,14 @@
4141
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
4242
import com.oracle.graal.python.builtins.objects.function.PArguments;
4343
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
44+
import com.oracle.graal.python.builtins.objects.function.PFunction;
4445
import com.oracle.graal.python.builtins.objects.function.PKeyword;
46+
import com.oracle.graal.python.builtins.objects.function.PythonCallable;
4547
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
48+
import com.oracle.graal.python.builtins.objects.method.PMethod;
4649
import com.oracle.graal.python.builtins.objects.module.PythonModule;
4750
import com.oracle.graal.python.builtins.objects.object.PythonObject;
51+
import com.oracle.graal.python.builtins.objects.type.PythonClass;
4852
import com.oracle.graal.python.nodes.BuiltinNames;
4953
import com.oracle.graal.python.nodes.NodeFactory;
5054
import com.oracle.graal.python.nodes.PNode;
@@ -86,8 +90,9 @@
8690
import com.oracle.truffle.api.object.Shape;
8791
import com.oracle.truffle.api.source.Source;
8892
import com.oracle.truffle.api.source.Source.SourceBuilder;
93+
import com.oracle.truffle.api.source.SourceSection;
8994

90-
@TruffleLanguage.Registration(id = PythonLanguage.ID, name = PythonLanguage.NAME, version = PythonLanguage.VERSION, mimeType = PythonLanguage.MIME_TYPE, interactive = true, internal = false, contextPolicy = TruffleLanguage.ContextPolicy.SHARED)
95+
@TruffleLanguage.Registration(id = PythonLanguage.ID, name = PythonLanguage.NAME, version = PythonLanguage.VERSION, characterMimeTypes = PythonLanguage.MIME_TYPE, interactive = true, internal = false, contextPolicy = TruffleLanguage.ContextPolicy.SHARED)
9196
@ProvidedTags({StandardTags.CallTag.class, StandardTags.StatementTag.class, StandardTags.RootTag.class, StandardTags.TryBlockTag.class, StandardTags.ExpressionTag.class,
9297
DebuggerTags.AlwaysHalt.class})
9398
public final class PythonLanguage extends TruffleLanguage<PythonContext> {
@@ -380,6 +385,25 @@ protected Iterable<Scope> findTopScopes(PythonContext context) {
380385
return scopes;
381386
}
382387

388+
@Override
389+
@TruffleBoundary
390+
protected SourceSection findSourceLocation(PythonContext context, Object value) {
391+
if (value instanceof PFunction || value instanceof PMethod) {
392+
PythonCallable callable = (PythonCallable) value;
393+
return callable.getCallTarget().getRootNode().getSourceSection();
394+
} else if (value instanceof PCode) {
395+
return ((PCode) value).getRootNode().getSourceSection();
396+
} else if (value instanceof PythonClass) {
397+
for (String k : ((PythonClass) value).getAttributeNames()) {
398+
SourceSection attrSourceLocation = findSourceLocation(context, ((PythonClass) value).getAttribute(k));
399+
if (attrSourceLocation != null) {
400+
return attrSourceLocation;
401+
}
402+
}
403+
}
404+
return null;
405+
}
406+
383407
@Override
384408
protected String toString(PythonContext context, Object value) {
385409
final PythonModule builtins = context.getBuiltins();

0 commit comments

Comments
 (0)