Skip to content

Commit ecbe811

Browse files
committed
LocalVariableSetNode is DSL inlinable node
1 parent 714c877 commit ecbe811

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

src/main/java/org/truffleruby/core/binding/BindingNodes.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -324,16 +324,18 @@ protected Object localVariableSet(RubyBinding binding, Object nameObject, Object
324324
@Cached NameToJavaStringNode nameToJavaStringNode,
325325
@Cached LocalVariableSetNode localVariableSetNode) {
326326
final var name = nameToJavaStringNode.execute(this, nameObject);
327-
return localVariableSetNode.execute(binding, name, value);
327+
return localVariableSetNode.execute(this, binding, name, value);
328328
}
329329
}
330330

331331

332332
@GenerateUncached
333333
@ImportStatic({ BindingNodes.class, FindDeclarationVariableNodes.class })
334+
@GenerateCached(false)
335+
@GenerateInline
334336
public abstract static class LocalVariableSetNode extends RubyBaseNode {
335337

336-
public abstract Object execute(RubyBinding binding, String name, Object value);
338+
public abstract Object execute(Node node, RubyBinding binding, String name, Object value);
337339

338340
@Specialization(
339341
guards = {
@@ -342,7 +344,7 @@ public abstract static class LocalVariableSetNode extends RubyBaseNode {
342344
"getFrameDescriptor(binding) == cachedFrameDescriptor",
343345
"cachedFrameSlot != null" },
344346
limit = "getCacheLimit()")
345-
protected Object localVariableSetCached(RubyBinding binding, String name, Object value,
347+
protected static Object localVariableSetCached(RubyBinding binding, String name, Object value,
346348
@Cached("name") String cachedName,
347349
@Cached("getFrameDescriptor(binding)") FrameDescriptor cachedFrameDescriptor,
348350
@Cached("findFrameSlotOrNull(name, binding.getFrame())") FrameSlotAndDepth cachedFrameSlot,
@@ -360,7 +362,7 @@ protected Object localVariableSetCached(RubyBinding binding, String name, Object
360362
"getFrameDescriptor(binding) == cachedFrameDescriptor",
361363
"cachedFrameSlot == null" },
362364
limit = "getCacheLimit()")
363-
protected Object localVariableSetNewCached(RubyBinding binding, String name, Object value,
365+
protected static Object localVariableSetNewCached(RubyBinding binding, String name, Object value,
364366
@Cached("name") String cachedName,
365367
@Cached("getFrameDescriptor(binding)") FrameDescriptor cachedFrameDescriptor,
366368
@Cached("findFrameSlotOrNull(name, binding.getFrame())") FrameSlotAndDepth cachedFrameSlot,
@@ -375,7 +377,7 @@ protected Object localVariableSetNewCached(RubyBinding binding, String name, Obj
375377
@Specialization(
376378
guards = "!isHiddenVariable(name)",
377379
replaces = { "localVariableSetCached", "localVariableSetNewCached" })
378-
protected Object localVariableSetUncached(RubyBinding binding, String name, Object value) {
380+
protected static Object localVariableSetUncached(RubyBinding binding, String name, Object value) {
379381
MaterializedFrame frame = binding.getFrame();
380382
final FrameSlotAndDepth frameSlot = FindDeclarationVariableNodes.findFrameSlotOrNull(name, frame);
381383
final int slot;
@@ -394,13 +396,13 @@ protected Object localVariableSetUncached(RubyBinding binding, String name, Obje
394396

395397
@TruffleBoundary
396398
@Specialization(guards = "isHiddenVariable(name)")
397-
protected Object localVariableSetLastLine(RubyBinding binding, String name, Object value) {
399+
protected static Object localVariableSetLastLine(Node node, RubyBinding binding, String name, Object value) {
398400
throw new RaiseException(
399-
getContext(),
400-
coreExceptions().nameError("Bad local variable name", binding, name, this));
401+
getContext(node),
402+
coreExceptions(node).nameError("Bad local variable name", binding, name, node));
401403
}
402404

403-
protected WriteFrameSlotNode createWriteNode(int frameSlot) {
405+
protected static WriteFrameSlotNode createWriteNode(int frameSlot) {
404406
return WriteFrameSlotNodeGen.create(frameSlot);
405407
}
406408

src/main/java/org/truffleruby/debug/BindingLocalVariablesObject.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ protected Object readMember(String member,
6969

7070
@ExportMessage
7171
protected void writeMember(String member, Object value,
72-
@Cached BindingNodes.LocalVariableSetNode localVariableSetNode) throws UnknownIdentifierException {
72+
@Cached BindingNodes.LocalVariableSetNode localVariableSetNode,
73+
@Bind("$node") Node node) throws UnknownIdentifierException {
7374
if (isValidLocalVariableName(member)) {
74-
localVariableSetNode.execute(binding, member, value);
75+
localVariableSetNode.execute(node, binding, member, value);
7576
} else {
7677
throw UnknownIdentifierException.create(member);
7778
}

src/main/java/org/truffleruby/debug/RubyScope.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,10 @@ static final class WriteMember {
179179
@Specialization
180180
protected static void writeMember(RubyScope scope, String member, Object value,
181181
@CachedLibrary("scope") InteropLibrary interopLibrary,
182-
@Cached BindingNodes.LocalVariableSetNode localVariableSetNode) throws UnknownIdentifierException {
182+
@Cached BindingNodes.LocalVariableSetNode localVariableSetNode,
183+
@Bind("this") Node node) throws UnknownIdentifierException {
183184
if (interopLibrary.isMemberModifiable(scope, member)) {
184-
localVariableSetNode.execute(scope.binding, member, value);
185+
localVariableSetNode.execute(node, scope.binding, member, value);
185186
} else {
186187
throw UnknownIdentifierException.create(member);
187188
}

0 commit comments

Comments
 (0)