Mercurial > hg > graal-jvmci-8
changeset 15201:e4b64b69e336
Add Invoke.getContextMethod and Invoke.getContextType
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 17 Apr 2014 11:25:27 +0200 |
parents | 97eed257999b |
children | 1f130000d700 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java |
diffstat | 1 files changed, 26 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Thu Apr 17 18:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Thu Apr 17 11:25:27 2014 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; @@ -52,4 +53,29 @@ boolean isPolymorphic(); void setPolymorphic(boolean value); + + /** + * Returns the {@linkplain ResolvedJavaMethod method} from which this invoke is executed. This + * is the caller method and in the case of inlining may be different from the method of the + * graph this node is in. + * + * @return the method from which this invoke is executed. + */ + default ResolvedJavaMethod getContextMethod() { + FrameState state = stateAfter(); + if (state == null) { + state = stateDuring(); + } + return state.method(); + } + + /** + * Returns the {@linkplain ResolvedJavaType type} from which this invoke is executed. This is + * the declaring type of the caller method. + * + * @return the type from which this invoke is executed. + */ + default ResolvedJavaType getContextType() { + return getContextMethod().getDeclaringClass(); + } }