Skip to content

Commit 776b480

Browse files
author
Pavel Marek
committed
[GR-37071] Migrate to new Truffle frame API.
PullRequest: fastr/2703
2 parents 1911783 + 8dd5954 commit 776b480

File tree

80 files changed

+3360
-1561
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+3360
-1561
lines changed

com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,7 @@ public CallTarget parseToCallTargetWithArguments(Source source, List<String> arg
374374
}
375375

376376
// Create RFunction
377-
FrameDescriptor descriptor = new FrameDescriptor();
378-
FrameSlotChangeMonitor.initializeFunctionFrameDescriptor("<as.function.default>", descriptor);
377+
FrameDescriptor descriptor = FrameSlotChangeMonitor.createFunctionFrameDescriptor("<as.function.default>");
379378
FrameSlotChangeMonitor.initializeEnclosingFrame(descriptor, REnvironment.globalEnv().getFrame());
380379
TruffleRLanguage rLanguage = RContext.getInstance().getLanguage();
381380
FunctionDefinitionNode rootNode = FunctionDefinitionNode.create(rLanguage, RSyntaxNode.INTERNAL, descriptor, null, saveArguments, (RSyntaxNode) body, formals, "from AsFunction",

com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/MakeActiveBindingNode.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -26,10 +26,9 @@
2626
import com.oracle.truffle.api.dsl.Cached;
2727
import com.oracle.truffle.api.dsl.GenerateUncached;
2828
import com.oracle.truffle.api.dsl.Specialization;
29-
import com.oracle.truffle.api.frame.FrameSlot;
30-
import com.oracle.truffle.api.frame.FrameSlotKind;
3129
import com.oracle.truffle.api.frame.MaterializedFrame;
3230
import com.oracle.truffle.api.profiles.BranchProfile;
31+
import com.oracle.truffle.api.profiles.ValueProfile;
3332
import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode;
3433
import com.oracle.truffle.r.runtime.RError;
3534
import com.oracle.truffle.r.runtime.data.RFunction;
@@ -62,14 +61,16 @@ protected Object makeActiveBinding(RSymbol sym, RNull fun, REnvironment env, @Ca
6261

6362
@Specialization
6463
@TruffleBoundary
65-
protected Object makeActiveBinding(RSymbol sym, RFunction fun, REnvironment env, @Cached("create()") BranchProfile frameSlotBranchProfile) {
64+
protected Object makeActiveBinding(RSymbol sym, RFunction fun, REnvironment env,
65+
@Cached("create()") BranchProfile frameSlotBranchProfile,
66+
@Cached("createIdentityProfile()") ValueProfile frameDescriptorProfile) {
6667
String name = sym.getName();
6768
MaterializedFrame frame = env.getFrame();
6869
Object binding = ReadVariableNode.lookupAny(name, frame, true);
6970
if (binding == null) {
7071
if (!env.isLocked()) {
71-
FrameSlot slot = FrameSlotChangeMonitor.findOrAddFrameSlot(frame.getFrameDescriptor(), name, FrameSlotKind.Object);
72-
FrameSlotChangeMonitor.setActiveBinding(frame, slot, new ActiveBinding(sym.getRType(), fun), false, frameSlotBranchProfile);
72+
int frameIndex = FrameSlotChangeMonitor.findOrAddAuxiliaryFrameSlot(frame.getFrameDescriptor(), name);
73+
FrameSlotChangeMonitor.setActiveBinding(frame, frameIndex, new ActiveBinding(sym.getRType(), fun), false, frameSlotBranchProfile, frameDescriptorProfile);
7374
binding = ReadVariableNode.lookupAny(name, frame, true);
7475
assert binding != null;
7576
assert binding instanceof ActiveBinding;
@@ -82,8 +83,9 @@ protected Object makeActiveBinding(RSymbol sym, RFunction fun, REnvironment env,
8283
throw error(RError.Message.CANNOT_CHANGE_LOCKED_ACTIVE_BINDING);
8384
} else {
8485
// update active binding
85-
FrameSlot slot = frame.getFrameDescriptor().findFrameSlot(name);
86-
FrameSlotChangeMonitor.setActiveBinding(frame, slot, new ActiveBinding(sym.getRType(), fun), false, frameSlotBranchProfile);
86+
assert FrameSlotChangeMonitor.containsIdentifier(frame.getFrameDescriptor(), name);
87+
int frameIndex = FrameSlotChangeMonitor.getIndexOfIdentifier(frame.getFrameDescriptor(), name);
88+
FrameSlotChangeMonitor.setActiveBinding(frame, frameIndex, new ActiveBinding(sym.getRType(), fun), false, frameSlotBranchProfile, frameDescriptorProfile);
8789
}
8890
return RNull.instance;
8991
}

com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import com.oracle.truffle.api.dsl.ImportStatic;
3535
import com.oracle.truffle.api.dsl.Specialization;
3636
import com.oracle.truffle.api.frame.FrameDescriptor;
37-
import com.oracle.truffle.api.frame.FrameSlot;
3837
import com.oracle.truffle.api.frame.MaterializedFrame;
3938
import com.oracle.truffle.api.library.CachedLibrary;
4039
import com.oracle.truffle.r.library.methods.MethodsListDispatchFactory.GetGenericInternalNodeGen;
@@ -74,6 +73,7 @@
7473
import com.oracle.truffle.r.runtime.data.VectorDataLibrary;
7574
import com.oracle.truffle.r.runtime.data.nodes.attributes.GetFixedAttributeNode;
7675
import com.oracle.truffle.r.runtime.env.REnvironment;
76+
import com.oracle.truffle.r.runtime.env.frame.FrameIndex;
7777
import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
7878
import com.oracle.truffle.r.runtime.ffi.DLL;
7979
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
@@ -470,9 +470,9 @@ private static String checkSingleString(Object o, boolean nonEmpty, String what,
470470

471471
@TruffleBoundary
472472
private static Object slotRead(MaterializedFrame currentFrame, FrameDescriptor desc, String name) {
473-
FrameSlot slot = desc.findFrameSlot(name);
474-
if (slot != null) {
475-
Object res = FrameSlotChangeMonitor.getValue(slot, currentFrame);
473+
int frameIndex = FrameSlotChangeMonitor.getIndexOfIdentifier(desc, name);
474+
if (FrameIndex.isInitializedIndex(frameIndex)) {
475+
Object res = FrameSlotChangeMonitor.getValue(currentFrame, frameIndex);
476476
if (res != null) {
477477
if (res instanceof RPromise) {
478478
res = PromiseHelperNode.evaluateSlowPath((RPromise) res);

com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/SubstituteDirect.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,8 @@
3535
import com.oracle.truffle.r.runtime.RError;
3636
import com.oracle.truffle.r.runtime.RSubstitute;
3737
import com.oracle.truffle.r.runtime.data.RDataFactory;
38-
import com.oracle.truffle.r.runtime.data.RPairList;
3938
import com.oracle.truffle.r.runtime.data.RList;
39+
import com.oracle.truffle.r.runtime.data.RPairList;
4040
import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
4141
import com.oracle.truffle.r.runtime.env.REnvironment;
4242
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
@@ -91,11 +91,11 @@ public static REnvironment createNewEnvironment() {
9191
public static REnvironment createEnvironment(RList list, RList2EnvNode list2Env) {
9292
if (list2Env != null) {
9393
return list2Env.execute(list, null, null, REnvironment.baseEnv());
94+
} else {
95+
REnvironment env = RDataFactory.createNewEnv(null);
96+
env.setParent(REnvironment.baseEnv());
97+
return env;
9498
}
95-
96-
REnvironment env = RDataFactory.createNewEnv(null);
97-
env.setParent(REnvironment.baseEnv());
98-
return env;
9999
}
100100

101101
protected static RList2EnvNode createList2EnvNode() {

com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/deriv/Deriv.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@
6464
import com.oracle.truffle.r.runtime.data.RMissing;
6565
import com.oracle.truffle.r.runtime.data.RNull;
6666
import com.oracle.truffle.r.runtime.data.RPairList;
67-
import com.oracle.truffle.r.runtime.data.RSymbol;
6867
import com.oracle.truffle.r.runtime.data.RStringVector;
68+
import com.oracle.truffle.r.runtime.data.RSymbol;
6969
import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
7070
import com.oracle.truffle.r.runtime.nodes.RCodeBuilder;
7171
import com.oracle.truffle.r.runtime.nodes.RCodeBuilder.Argument;
@@ -77,6 +77,7 @@
7777
import com.oracle.truffle.r.runtime.nodes.RSyntaxLookup;
7878
import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
7979
import com.oracle.truffle.r.runtime.nodes.RSyntaxVisitor;
80+
import com.oracle.truffle.r.runtime.parsermetadata.FunctionScope;
8081

8182
//Transcribed from GnuR, library/stats/src/deriv.c
8283

@@ -190,7 +191,7 @@ private Object getResult(TruffleRLanguage language, Object functionArg) {
190191
return result;
191192
}
192193
MaterializedFrame frame = functionArg instanceof RFunction ? ((RFunction) functionArg).getEnclosingFrame() : RContext.getInstance().stateREnvironment.getGlobalFrame();
193-
RootCallTarget callTarget = RContext.getASTBuilder().rootFunction(language, RSyntaxNode.LAZY_DEPARSE, targetArgs, blockCall, null);
194+
RootCallTarget callTarget = RContext.getASTBuilder().rootFunction(language, RSyntaxNode.LAZY_DEPARSE, targetArgs, blockCall, null, FunctionScope.EMPTY_SCOPE);
194195
FrameSlotChangeMonitor.initializeEnclosingFrame(callTarget.getRootNode().getFrameDescriptor(), frame);
195196
return RDataFactory.createFunction(RFunction.NO_NAME, RFunction.NO_NAME, callTarget, null, frame);
196197
}

com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackages.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import com.oracle.truffle.api.RootCallTarget;
3434
import com.oracle.truffle.api.TruffleFile;
3535
import com.oracle.truffle.api.frame.FrameDescriptor;
36-
import com.oracle.truffle.api.frame.FrameSlot;
3736
import com.oracle.truffle.api.frame.MaterializedFrame;
3837
import com.oracle.truffle.api.source.Source;
3938
import com.oracle.truffle.r.nodes.builtin.base.BasePackage;
@@ -55,6 +54,7 @@
5554
import com.oracle.truffle.r.runtime.data.RFunction;
5655
import com.oracle.truffle.r.runtime.env.REnvironment;
5756
import com.oracle.truffle.r.runtime.env.REnvironment.PutException;
57+
import com.oracle.truffle.r.runtime.env.frame.FrameIndex;
5858
import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
5959

6060
/**
@@ -118,9 +118,9 @@ public static void loadBase(RContext context, MaterializedFrame baseFrame) {
118118
throw new RInternalError(e, "error while parsing base source from %s", baseSource.getName());
119119
}
120120
// forcibly clear last.warnings during startup:
121-
FrameSlot slot = baseFrame.getFrameDescriptor().findFrameSlot("last.warning");
122-
if (slot != null) {
123-
FrameSlotChangeMonitor.setObject(baseFrame, slot, null);
121+
int frameIndex = FrameSlotChangeMonitor.getIndexOfIdentifier(baseFrame.getFrameDescriptor(), "last.warning");
122+
if (FrameIndex.isInitializedIndex(frameIndex)) {
123+
FrameSlotChangeMonitor.setObject(baseFrame, frameIndex, null);
124124
}
125125
} finally {
126126
RContext.getInstance().setLoadingBase(false);
@@ -163,9 +163,8 @@ public RFunction lookupBuiltin(TruffleRLanguage language, String methodName) {
163163
private static RootCallTarget createArgumentsCallTarget(TruffleRLanguage language, RBuiltinFactory builtin) {
164164
CompilerAsserts.neverPartOfCompilation();
165165

166-
FrameDescriptor frameDescriptor = new FrameDescriptor();
166+
FrameDescriptor frameDescriptor = FrameSlotChangeMonitor.createFunctionFrameDescriptor(builtin.getName());
167167
RBuiltinRootNode root = new RBuiltinRootNode(language, builtin, frameDescriptor, null);
168-
FrameSlotChangeMonitor.initializeFunctionFrameDescriptor(builtin.getName(), frameDescriptor);
169168
return root.getCallTarget();
170169
}
171170

com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsFunction.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -141,8 +141,7 @@ protected RFunction asFunction(RAbstractVector x, REnvironment envir) {
141141
if (!RBaseNode.isRSyntaxNode(body)) {
142142
throw RInternalError.unimplemented();
143143
}
144-
FrameDescriptor descriptor = new FrameDescriptor();
145-
FrameSlotChangeMonitor.initializeFunctionFrameDescriptor("<as.function.default>", descriptor);
144+
FrameDescriptor descriptor = FrameSlotChangeMonitor.createFunctionFrameDescriptor("<as.function.default>");
146145
FrameSlotChangeMonitor.initializeEnclosingFrame(descriptor, envir.getFrame());
147146
FunctionDefinitionNode rootNode = FunctionDefinitionNode.create(getRLanguage(), RSyntaxNode.LAZY_DEPARSE, descriptor, null, saveArguments, (RSyntaxNode) body, formals, "from AsFunction",
148147
null);

com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,15 @@
2626
import static com.oracle.truffle.r.runtime.RVisibility.OFF;
2727
import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX;
2828
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL;
29-
import static com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor.findOrAddFrameSlot;
3029

3130
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3231
import com.oracle.truffle.api.dsl.Cached;
3332
import com.oracle.truffle.api.dsl.Specialization;
3433
import com.oracle.truffle.api.frame.FrameDescriptor;
35-
import com.oracle.truffle.api.frame.FrameSlotKind;
3634
import com.oracle.truffle.api.frame.VirtualFrame;
3735
import com.oracle.truffle.api.profiles.ConditionProfile;
3836
import com.oracle.truffle.api.profiles.ValueProfile;
39-
import com.oracle.truffle.r.nodes.access.FrameSlotNode;
37+
import com.oracle.truffle.r.nodes.access.FrameIndexNode;
4038
import com.oracle.truffle.r.nodes.access.WriteSuperFrameVariableNode.ResolvedWriteSuperFrameVariableNode;
4139
import com.oracle.truffle.r.nodes.access.WriteSuperFrameVariableNodeFactory.ResolvedWriteSuperFrameVariableNodeGen;
4240
import com.oracle.truffle.r.nodes.access.WriteVariableNode.Mode;
@@ -50,6 +48,7 @@
5048
import com.oracle.truffle.r.runtime.data.nodes.ShareObjectNode;
5149
import com.oracle.truffle.r.runtime.env.REnvironment;
5250
import com.oracle.truffle.r.runtime.env.REnvironment.PutException;
51+
import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
5352
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
5453

5554
/**
@@ -151,7 +150,14 @@ public static AssignInternalNode create() {
151150
public abstract void execute(VirtualFrame frame, REnvironment env, String name, Object value);
152151

153152
protected static ResolvedWriteSuperFrameVariableNode createWrite(String name, FrameDescriptor envDesc) {
154-
return ResolvedWriteSuperFrameVariableNodeGen.create(name, Mode.REGULAR, null, null, FrameSlotNode.create(findOrAddFrameSlot(envDesc, name, FrameSlotKind.Illegal)));
153+
int frameIndex;
154+
if (!FrameSlotChangeMonitor.containsIdentifier(envDesc, name)) {
155+
frameIndex = FrameSlotChangeMonitor.findOrAddAuxiliaryFrameSlot(envDesc, name);
156+
} else {
157+
frameIndex = FrameSlotChangeMonitor.getIndexOfIdentifier(envDesc, name);
158+
}
159+
FrameIndexNode frameIndexNode = FrameIndexNode.createInitializedWithIndex(envDesc, frameIndex);
160+
return ResolvedWriteSuperFrameVariableNodeGen.create(name, Mode.REGULAR, null, null, frameIndexNode);
155161
}
156162

157163
protected FrameDescriptor getFrameDescriptor(REnvironment env) {

com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@
119119
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInitEventLoop;
120120
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInitEventLoopNodeGen;
121121
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInspect;
122+
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInspectFrame;
123+
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInspectFrameNodeGen;
122124
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInspectNodeGen;
123125
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInterop;
124126
import com.oracle.truffle.r.nodes.builtin.fastr.FastRInterop.FastRInteropCheckException;
@@ -511,6 +513,7 @@ public BasePackage(RContext context) {
511513
add(FastRInteropGetException.class, FastRInteropGetExceptionNodeGen::create);
512514
add(FastRInteropClearException.class, FastRInteropClearExceptionNodeGen::create);
513515
add(FastRInspect.class, FastRInspectNodeGen::create);
516+
add(FastRInspectFrame.class, FastRInspectFrameNodeGen::create);
514517
add(FastRInterop.Eval.class, FastRInteropFactory.EvalNodeGen::create);
515518
add(FastRInterop.Export.class, FastRInteropFactory.ExportNodeGen::create);
516519
add(FastRInterop.Import.class, FastRInteropFactory.ImportNodeGen::create);

com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConditionFunctions.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3232
import com.oracle.truffle.api.dsl.Cached;
3333
import com.oracle.truffle.api.dsl.Specialization;
34-
import com.oracle.truffle.api.frame.FrameSlot;
3534
import com.oracle.truffle.api.frame.FrameSlotTypeException;
3635
import com.oracle.truffle.api.frame.VirtualFrame;
3736
import com.oracle.truffle.api.nodes.RootNode;
@@ -70,23 +69,23 @@ protected Object addCondHands(Object classes, Object handlers, Object parentEnv,
7069
return getHandlerStack(getRContext());
7170
}
7271

73-
protected FrameSlot createHandlerFrameSlot(VirtualFrame frame) {
72+
protected int createHandlerFrameIndex(VirtualFrame frame) {
7473
RootNode rootNode = RArguments.getFunction(frame).getRootNode();
75-
return ((FunctionDefinitionNode) rootNode).getHandlerFrameSlot(frame);
74+
return ((FunctionDefinitionNode) rootNode).getHandlerFrameIndex(frame);
7675
}
7776

7877
@Specialization
7978
protected Object addCondHands(VirtualFrame frame, RStringVector classes, RList handlers, REnvironment parentEnv, Object target, byte calling,
80-
@Cached("createHandlerFrameSlot(frame)") FrameSlot handlerFrameSlot) {
79+
@Cached("createHandlerFrameIndex(frame)") int handlerFrameIndex) {
8180
if (classes.getLength() != handlers.getLength()) {
8281
CompilerDirectives.transferToInterpreter();
8382
throw error(RError.Message.BAD_HANDLER_DATA);
8483
}
8584
try {
86-
if (!frame.isObject(handlerFrameSlot) || FrameSlotChangeMonitor.getObject(handlerFrameSlot, frame) == null) {
85+
if (!FrameSlotChangeMonitor.isObject(frame, handlerFrameIndex) || FrameSlotChangeMonitor.getObject(frame, handlerFrameIndex) == null) {
8786
// We save the original condition handlers to a frame slot, so that
8887
// FunctionDefinitionNode can restore them on function exit
89-
FrameSlotChangeMonitor.setObject(frame, handlerFrameSlot, RErrorHandling.getHandlerStack(getRContext()));
88+
FrameSlotChangeMonitor.setObject(frame, handlerFrameIndex, RErrorHandling.getHandlerStack(getRContext()));
9089
}
9190
} catch (FrameSlotTypeException e) {
9291
throw RInternalError.shouldNotReachHere();
@@ -123,20 +122,21 @@ public abstract static class AddRestart extends RBuiltinNode.Arg1 {
123122
casts.arg("restart").mustBe(instanceOf(RList.class), RError.Message.BAD_RESTART);
124123
}
125124

126-
protected FrameSlot createRestartFrameSlot(VirtualFrame frame) {
125+
protected int createRestartFrameIndex(VirtualFrame frame) {
127126
RootNode rootNode = RArguments.getFunction(frame).getRootNode();
128-
return ((FunctionDefinitionNode) rootNode).getRestartFrameSlot(frame);
127+
return ((FunctionDefinitionNode) rootNode).getRestartFrameIndex(frame);
129128
}
130129

131130
@Specialization
132131
protected Object addRestart(VirtualFrame frame, RList restart,
133-
@Cached("createRestartFrameSlot(frame)") FrameSlot restartFrameSlot) {
132+
@Cached("createRestartFrameIndex(frame)") int restartFrameIndex) {
134133
if (restart.getLength() < 2) {
135134
throw error(RError.Message.BAD_RESTART);
136135
}
137136
try {
138-
if (!frame.isObject(restartFrameSlot) || frame.getObject(restartFrameSlot) == null) {
139-
FrameSlotChangeMonitor.setObject(frame, restartFrameSlot, RErrorHandling.getRestartStack(getRContext()));
137+
if (!FrameSlotChangeMonitor.isObject(frame, restartFrameIndex) ||
138+
FrameSlotChangeMonitor.getObject(frame, restartFrameIndex) == null) {
139+
FrameSlotChangeMonitor.setObject(frame, restartFrameIndex, RErrorHandling.getRestartStack(getRContext()));
140140
}
141141
} catch (FrameSlotTypeException e) {
142142
throw RInternalError.shouldNotReachHere();

0 commit comments

Comments
 (0)