Skip to content

Commit 787b4ce

Browse files
committed
don't treat the last statement in a block as an expression (when using the optimized representation)
1 parent ae2c053 commit 787b4ce

File tree

1 file changed

+12
-1
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/expression

1 file changed

+12
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/expression/ExpressionNode.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,10 @@
4747
import com.oracle.truffle.api.instrumentation.GenerateWrapper;
4848
import com.oracle.truffle.api.instrumentation.ProbeNode;
4949
import com.oracle.truffle.api.instrumentation.StandardTags.ExpressionTag;
50+
import com.oracle.truffle.api.instrumentation.StandardTags.StatementTag;
5051
import com.oracle.truffle.api.instrumentation.Tag;
5152
import com.oracle.truffle.api.nodes.ExplodeLoop;
53+
import com.oracle.truffle.api.nodes.Node;
5254
import com.oracle.truffle.api.nodes.NodeCost;
5355
import com.oracle.truffle.api.nodes.UnexpectedResultException;
5456

@@ -102,7 +104,16 @@ public WrapperNode createWrapper(ProbeNode probe) {
102104

103105
@Override
104106
public boolean hasTag(Class<? extends Tag> tag) {
105-
return tag == ExpressionTag.class || super.hasTag(tag);
107+
return tag == ExpressionTag.class || (tag == StatementTag.class && isStatement()) || super.hasTag(tag);
108+
}
109+
110+
private boolean isStatement() {
111+
Node parent = getParent();
112+
if (parent instanceof WrapperNode) {
113+
parent = parent.getParent();
114+
}
115+
// expressions with these parents are considered to be statements
116+
return parent instanceof ExpressionWithSideEffect || parent instanceof ExpressionWithSideEffects;
106117
}
107118

108119
public static final class ExpressionStatementNode extends StatementNode {

0 commit comments

Comments
 (0)