Skip to content

Commit 0f106ea

Browse files
committed
Do not convert j.l.String->RubyString when calling polyglot_*member* methods
* Note that conversion was already no longer happening since ForeignToRubyNode stopped converting j.l.String.
1 parent d83ebfb commit 0f106ea

File tree

2 files changed

+17
-43
lines changed

2 files changed

+17
-43
lines changed

src/main/java/org/truffleruby/interop/FromJavaStringNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static FromJavaStringNode create() {
2929
return FromJavaStringNodeGen.create();
3030
}
3131

32-
public abstract RubyString executeFromJavaString(Object value);
32+
public abstract RubyString executeFromJavaString(String value);
3333

3434
@Specialization(guards = "stringsEquals(cachedValue, value)", limit = "getLimit()")
3535
protected RubyString doCached(String value,

src/main/java/org/truffleruby/language/RubyDynamicObject.java

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.truffleruby.core.string.RubyString;
2626
import org.truffleruby.core.string.StringUtils;
2727
import org.truffleruby.interop.ForeignToRubyArgumentsNode;
28-
import org.truffleruby.interop.ForeignToRubyNode;
2928
import org.truffleruby.interop.TranslateInteropRubyExceptionNode;
3029
import org.truffleruby.language.control.RaiseException;
3130
import org.truffleruby.language.dispatch.DispatchConfiguration;
@@ -587,18 +586,16 @@ private static boolean isIVar(String name) {
587586
public Object readMember(String name,
588587
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
589588
@Cached @Shared("definedNode") InternalRespondToNode definedNode,
590-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
591589
@Cached GetMethodObjectNode getMethodObjectNode,
592590
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
593591
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
594592
@Shared("ivarFoundProfile") @Cached ConditionProfile ivarFoundProfile,
595593
@Shared("translateRubyException") @Cached TranslateInteropRubyExceptionNode translateRubyException,
596594
@Shared("errorProfile") @Cached BranchProfile errorProfile)
597595
throws UnknownIdentifierException, UnsupportedMessageException {
598-
Object rubyName = nameToRubyNode.executeConvert(name);
599596
Object dynamic;
600597
try {
601-
dynamic = dispatchNode.call(this, "polyglot_read_member", rubyName);
598+
dynamic = dispatchNode.call(this, "polyglot_read_member", name);
602599
} catch (RaiseException e) {
603600
throw translateRubyException.execute(e, name);
604601
}
@@ -623,15 +620,13 @@ public void writeMember(String name, Object value,
623620
@Cached WriteObjectFieldNode writeObjectFieldNode,
624621
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
625622
@CachedLibrary("this") RubyLibrary rubyLibrary,
626-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
627623
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
628624
@Shared("translateRubyException") @Cached TranslateInteropRubyExceptionNode translateRubyException,
629625
@Shared("errorProfile") @Cached BranchProfile errorProfile)
630626
throws UnknownIdentifierException, UnsupportedMessageException {
631-
Object rubyName = nameToRubyNode.executeConvert(name);
632627
Object dynamic;
633628
try {
634-
dynamic = dispatchNode.call(this, "polyglot_write_member", rubyName, value);
629+
dynamic = dispatchNode.call(this, "polyglot_write_member", name, value);
635630
} catch (RaiseException e) {
636631
throw translateRubyException.execute(e, name);
637632
}
@@ -652,19 +647,16 @@ public void writeMember(String name, Object value,
652647

653648
@ExportMessage
654649
public void removeMember(String name,
655-
@Exclusive @Cached ForeignToRubyNode foreignToRubyNode,
656650
@Exclusive @Cached DispatchNode removeInstanceVariableNode,
657651
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
658-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
659652
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
660653
@Shared("translateRubyException") @Cached TranslateInteropRubyExceptionNode translateRubyException,
661654
@Shared("errorProfile") @Cached BranchProfile errorProfile,
662655
@CachedLibrary("this") InteropLibrary interopLibrary)
663656
throws UnknownIdentifierException, UnsupportedMessageException {
664-
Object rubyName = nameToRubyNode.executeConvert(name);
665657
Object dynamic;
666658
try {
667-
dynamic = dispatchNode.call(this, "polyglot_remove_member", rubyName);
659+
dynamic = dispatchNode.call(this, "polyglot_remove_member", name);
668660
} catch (RaiseException e) {
669661
throw translateRubyException.execute(e, name);
670662
}
@@ -675,7 +667,7 @@ public void removeMember(String name,
675667
throw UnknownIdentifierException.create(name);
676668
}
677669
try {
678-
removeInstanceVariableNode.call(this, "remove_instance_variable", rubyName);
670+
removeInstanceVariableNode.call(this, "remove_instance_variable", name);
679671
} catch (RaiseException e) { // raises only if the name is missing
680672
// concurrent change in whether the member is removable
681673
errorProfile.enter();
@@ -690,13 +682,11 @@ public Object invokeMember(String name, Object[] arguments,
690682
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchMember,
691683
@Exclusive @Cached ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
692684
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
693-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
694685
@Shared("translateRubyException") @Cached TranslateInteropRubyExceptionNode translateRubyException,
695686
@Shared("errorProfile") @Cached BranchProfile errorProfile)
696687
throws UnknownIdentifierException, UnsupportedTypeException, UnsupportedMessageException, ArityException {
697688
Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(arguments);
698-
Object rubyName = nameToRubyNode.executeConvert(name);
699-
Object[] combinedArguments = ArrayUtils.unshift(convertedArguments, rubyName);
689+
Object[] combinedArguments = ArrayUtils.unshift(convertedArguments, name);
700690
Object dynamic;
701691
try {
702692
dynamic = dispatchDynamic.call(this, "polyglot_invoke_member", combinedArguments);
@@ -720,12 +710,10 @@ public boolean isMemberReadable(String name,
720710
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
721711
@Cached @Shared("definedNode") InternalRespondToNode definedNode,
722712
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
723-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
724713
@Exclusive @Cached BooleanCastNode booleanCastNode,
725714
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
726715
@Shared("ivarFoundProfile") @Cached ConditionProfile ivarFoundProfile) {
727-
Object rubyName = nameToRubyNode.executeConvert(name);
728-
Object dynamic = dispatchNode.call(this, "polyglot_member_readable?", rubyName);
716+
Object dynamic = dispatchNode.call(this, "polyglot_member_readable?", name);
729717
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
730718
if (ivarFoundProfile.profile(objectLibrary.containsKey(this, name))) {
731719
return true;
@@ -743,10 +731,8 @@ public boolean isMemberModifiable(String name,
743731
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
744732
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
745733
@Exclusive @Cached BooleanCastNode booleanCastNode,
746-
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
747-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode) {
748-
Object rubyName = nameToRubyNode.executeConvert(name);
749-
Object dynamic = dispatchNode.call(this, "polyglot_member_modifiable?", rubyName);
734+
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile) {
735+
Object dynamic = dispatchNode.call(this, "polyglot_member_modifiable?", name);
750736
return isMemberModifiableRemovable(
751737
dynamic,
752738
name,
@@ -762,10 +748,8 @@ public boolean isMemberRemovable(String name,
762748
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
763749
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
764750
@Exclusive @Cached BooleanCastNode booleanCastNode,
765-
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
766-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode) {
767-
Object rubyName = nameToRubyNode.executeConvert(name);
768-
Object dynamic = dispatchNode.call(this, "polyglot_member_removable?", rubyName);
751+
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile) {
752+
Object dynamic = dispatchNode.call(this, "polyglot_member_removable?", name);
769753
return isMemberModifiableRemovable(
770754
dynamic,
771755
name,
@@ -798,10 +782,8 @@ public boolean isMemberInsertable(String name,
798782
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
799783
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
800784
@Exclusive @Cached BooleanCastNode booleanCastNode,
801-
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
802-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode) {
803-
Object rubyName = nameToRubyNode.executeConvert(name);
804-
Object dynamic = dispatchNode.call(this, "polyglot_member_insertable?", rubyName);
785+
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile) {
786+
Object dynamic = dispatchNode.call(this, "polyglot_member_insertable?", name);
805787
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
806788
if (rubyLibrary.isFrozen(this) || !isIVar(name)) {
807789
return false;
@@ -818,12 +800,10 @@ public boolean isMemberInvocable(String name,
818800
@CachedLibrary("this") DynamicObjectLibrary objectLibrary,
819801
@Cached @Shared("definedNode") InternalRespondToNode definedNode,
820802
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
821-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
822803
@Exclusive @Cached BooleanCastNode booleanCastNode,
823804
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
824805
@Shared("ivarFoundProfile") @Cached ConditionProfile ivarFoundProfile) {
825-
Object rubyName = nameToRubyNode.executeConvert(name);
826-
Object dynamic = dispatchNode.call(this, "polyglot_member_invocable?", rubyName);
806+
Object dynamic = dispatchNode.call(this, "polyglot_member_invocable?", name);
827807
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
828808
Object iVar = objectLibrary.getOrDefault(this, name, null);
829809
if (ivarFoundProfile.profile(iVar != null)) {
@@ -842,12 +822,10 @@ public boolean isMemberInternal(String name,
842822
@Cached @Shared("definedNode") InternalRespondToNode definedNode,
843823
@Exclusive @Cached(parameters = "PUBLIC") InternalRespondToNode definedPublicNode,
844824
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
845-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
846825
@Exclusive @Cached BooleanCastNode booleanCastNode,
847826
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
848827
@Shared("ivarFoundProfile") @Cached ConditionProfile ivarFoundProfile) {
849-
Object rubyName = nameToRubyNode.executeConvert(name);
850-
Object dynamic = dispatchNode.call(this, "polyglot_member_internal?", rubyName);
828+
Object dynamic = dispatchNode.call(this, "polyglot_member_internal?", name);
851829
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
852830
Object result = objectLibrary.getOrDefault(this, name, null);
853831
if (ivarFoundProfile.profile(result != null)) {
@@ -864,12 +842,10 @@ public boolean isMemberInternal(String name,
864842

865843
@ExportMessage
866844
public boolean hasMemberReadSideEffects(String name,
867-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
868845
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
869846
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
870847
@Exclusive @Cached BooleanCastNode booleanCastNode) {
871-
Object rubyName = nameToRubyNode.executeConvert(name);
872-
Object dynamic = dispatchNode.call(this, "polyglot_has_member_read_side_effects?", rubyName);
848+
Object dynamic = dispatchNode.call(this, "polyglot_has_member_read_side_effects?", name);
873849
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
874850
return false;
875851
} else {
@@ -879,12 +855,10 @@ public boolean hasMemberReadSideEffects(String name,
879855

880856
@ExportMessage
881857
public boolean hasMemberWriteSideEffects(String name,
882-
@Cached @Shared("nameToRubyNode") ForeignToRubyNode nameToRubyNode,
883858
@Exclusive @Cached(parameters = "PRIVATE_RETURN_MISSING") DispatchNode dispatchNode,
884859
@Shared("dynamicProfile") @Cached ConditionProfile dynamicProfile,
885860
@Exclusive @Cached BooleanCastNode booleanCastNode) {
886-
Object rubyName = nameToRubyNode.executeConvert(name);
887-
Object dynamic = dispatchNode.call(this, "polyglot_has_member_write_side_effects?", rubyName);
861+
Object dynamic = dispatchNode.call(this, "polyglot_has_member_write_side_effects?", name);
888862
if (dynamicProfile.profile(dynamic == DispatchNode.MISSING)) {
889863
return false;
890864
} else {

0 commit comments

Comments
 (0)