Skip to content

Commit 4b3ede9

Browse files
committed
[GR-17457] Inline ExceptionTranslatingNode in the last usage, TryNode
PullRequest: truffleruby/3199
2 parents 9a7fda9 + 43d18a7 commit 4b3ede9

File tree

3 files changed

+12
-49
lines changed

3 files changed

+12
-49
lines changed

src/main/java/org/truffleruby/language/exceptions/TryNode.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111

1212
import com.oracle.truffle.api.exception.AbstractTruffleException;
1313
import com.oracle.truffle.api.profiles.ConditionProfile;
14+
import com.oracle.truffle.api.CompilerDirectives;
1415
import org.truffleruby.RubyLanguage;
1516
import com.oracle.truffle.api.TruffleSafepoint;
1617
import org.truffleruby.core.exception.ExceptionOperations;
1718
import org.truffleruby.language.RubyContextSourceNode;
1819
import org.truffleruby.language.RubyNode;
1920
import org.truffleruby.language.control.RetryException;
2021
import org.truffleruby.language.control.TerminationException;
21-
import org.truffleruby.language.methods.ExceptionTranslatingNode;
2222

2323
import com.oracle.truffle.api.CompilerAsserts;
2424
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -28,13 +28,15 @@
2828
import com.oracle.truffle.api.nodes.ExplodeLoop;
2929
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
3030
import com.oracle.truffle.api.profiles.BranchProfile;
31+
import org.truffleruby.language.methods.TranslateExceptionNode;
3132
import org.truffleruby.language.threadlocal.ThreadLocalGlobals;
3233

3334
public class TryNode extends RubyContextSourceNode {
3435

35-
@Child private ExceptionTranslatingNode tryPart;
36+
@Child private RubyNode tryPart;
3637
@Children private final RescueNode[] rescueParts;
3738
@Child private RubyNode elsePart;
39+
@Child private TranslateExceptionNode translateExceptionNode;
3840
private final boolean canOmitBacktrace;
3941

4042
private final BranchProfile terminationProfile = BranchProfile.create();
@@ -44,7 +46,7 @@ public class TryNode extends RubyContextSourceNode {
4446
private final ConditionProfile raiseExceptionProfile = ConditionProfile.create();
4547

4648
public TryNode(
47-
ExceptionTranslatingNode tryPart,
49+
RubyNode tryPart,
4850
RescueNode[] rescueParts,
4951
RubyNode elsePart,
5052
boolean canOmitBacktrace) {
@@ -76,6 +78,12 @@ public Object execute(VirtualFrame frame) {
7678
} catch (ControlFlowException exception) {
7779
controlFlowProfile.enter();
7880
throw exception;
81+
} catch (Throwable t) {
82+
if (translateExceptionNode == null) {
83+
CompilerDirectives.transferToInterpreterAndInvalidate();
84+
translateExceptionNode = insert(TranslateExceptionNode.create());
85+
}
86+
throw translateExceptionNode.executeTranslation(t);
7987
}
8088

8189
if (elsePart != null) {

src/main/java/org/truffleruby/language/methods/ExceptionTranslatingNode.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/main/java/org/truffleruby/parser/BodyTranslator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@
129129
import org.truffleruby.language.methods.Arity;
130130
import org.truffleruby.language.methods.BlockDefinitionNode;
131131
import org.truffleruby.language.methods.CatchBreakNode;
132-
import org.truffleruby.language.methods.ExceptionTranslatingNode;
133132
import org.truffleruby.language.methods.GetDefaultDefineeNode;
134133
import org.truffleruby.language.methods.LiteralMethodDefinitionNode;
135134
import org.truffleruby.language.methods.ModuleBodyDefinitionNode;
@@ -2726,7 +2725,7 @@ public RubyNode visitRescueNode(RescueParseNode node) {
27262725
}
27272726

27282727
final RubyNode ret = new TryNode(
2729-
new ExceptionTranslatingNode(tryPart),
2728+
tryPart,
27302729
rescueNodes.toArray(EMPTY_RESCUE_NODE_ARRAY),
27312730
elsePart,
27322731
canOmitBacktrace);

0 commit comments

Comments
 (0)