Skip to content

Commit 06c53b9

Browse files
committed
[Truffle] Refactor a good part of Module concerning visibility.
* @coremethod with "private" names are now automatically private. * At last, proper implementation of Module.{public_,private_,protected_,}methods.
1 parent e7c7beb commit 06c53b9

22 files changed

+223
-156
lines changed

spec/truffle/tags/core/module/extend_object_tags.txt

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
1-
fails:Module#module_function is a private method
2-
fails:Module#module_function on Class raises a TypeError if calling after rebinded to Class
3-
fails:Module#module_function with specific method names tries to convert the given names to strings using to_str
4-
fails:Module#module_function with specific method names raises a TypeError when the given names can't be converted to string using to_str
51
fails:Module#module_function as a toggle (no arguments) in a Module body affects evaled method definitions also even when outside the eval itself
62
fails:Module#module_function as a toggle (no arguments) in a Module body functions normally if both toggle and definitions inside a eval

spec/truffle/tags/core/module/private_tags.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
fails:Module#private is a private method
2-
fails:Module#private makes a public Object instance method private in Kernel
3-
fails:Module#private raises a NameError when given an undefined name
41
fails:Module#private without arguments sets visibility to following method definitions
52
fails:Module#private without arguments stops setting visibility if the body encounters other visibility setters without arguments
63
fails:Module#private without arguments continues setting visibility if the body encounters other visibility setters with arguments

spec/truffle/tags/core/module/protected_tags.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
fails:Module#protected is a private method
2-
fails:Module#protected makes a public Object instance method protected in Kernel
3-
fails:Module#protected raises a NameError when given an undefined name
41
fails:Module#protected without arguments sets visibility to following method definitions
52
fails:Module#protected without arguments stops setting visibility if the body encounters other visibility setters without arguments
63
fails:Module#protected without arguments continues setting visibility if the body encounters other visibility setters with arguments

spec/truffle/tags/core/module/public_tags.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
fails:Module#public is a private method
21
fails:Module#public on a superclass method calls the redefined method
3-
fails:Module#public makes a private Object instance method public in Kernel
4-
fails:Module#public raises a NameError when given an undefined name
52
fails:Module#public without arguments stops setting visibility if the body encounters other visibility setters without arguments
63
fails:Module#public without arguments does not affect method definitions when itself is inside an eval and method definitions are outside
74
fails:Module#public without arguments affects evaled method definitions when itself is outside the eval

truffle/src/main/java/org/jruby/truffle/nodes/coerce/SymbolOrToStrNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public SymbolOrToStrNode(SymbolOrToStrNode prev) {
3939
toStr = prev.toStr;
4040
}
4141

42+
public abstract String executeToJavaString(VirtualFrame frame, Object object);
43+
4244
@Specialization
4345
public String coerceRubySymbol(RubySymbol symbol) {
4446
return symbol.toString();

truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayNodes.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,11 +1936,8 @@ public RubyArray initialize(RubyArray array, RubyArray copy, UndefinedPlaceholde
19361936

19371937
}
19381938

1939-
@CoreMethod(names = "initialize_copy", visibility = Visibility.PRIVATE, required = 1, raiseIfFrozenSelf = true)
1940-
@NodeChildren({
1941-
@NodeChild(value = "self"),
1942-
@NodeChild(value = "from")
1943-
})
1939+
@CoreMethod(names = "initialize_copy", required = 1, raiseIfFrozenSelf = true)
1940+
@NodeChildren({ @NodeChild(value = "self"), @NodeChild(value = "from") })
19441941
@ImportGuards(ArrayGuards.class)
19451942
public abstract static class InitializeCopyNode extends RubyNode {
19461943
// TODO(cs): what about allocationSite ?

truffle/src/main/java/org/jruby/truffle/nodes/core/BasicObjectNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ protected boolean notSameClass(Object a, Object b) {
174174

175175
}
176176

177-
@CoreMethod(names = "initialize", needsSelf = false, visibility = Visibility.PRIVATE)
177+
@CoreMethod(names = "initialize", needsSelf = false)
178178
public abstract static class InitializeNode extends CoreMethodNode {
179179

180180
public InitializeNode(RubyContext context, SourceSection sourceSection) {

truffle/src/main/java/org/jruby/truffle/nodes/core/BindingNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
@CoreClass(name = "Binding")
2828
public abstract class BindingNodes {
2929

30-
@CoreMethod(names = "initialize_copy", visibility = Visibility.PRIVATE, required = 1)
30+
@CoreMethod(names = "initialize_copy", required = 1)
3131
public abstract static class InitializeCopyNode extends CoreMethodNode {
3232

3333
public InitializeCopyNode(RubyContext context, SourceSection sourceSection) {

truffle/src/main/java/org/jruby/truffle/nodes/core/CoreMethodNodeManager.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,19 @@ private static void addMethod(RubyClass rubyObjectClass, MethodDetails methodDet
116116
}
117117
}
118118

119-
private static void addMethod(RubyModule module, RubyRootNode rootNode, List<String> names, Visibility visibility) {
119+
private static void addMethod(RubyModule module, RubyRootNode rootNode, List<String> names, final Visibility originalVisibility) {
120120
for (String name : names) {
121121
final RubyRootNode rootNodeCopy = NodeUtil.cloneNode(rootNode);
122122

123+
Visibility visibility = originalVisibility;
124+
if (ModuleOperations.isMethodPrivateFromName(name)) {
125+
visibility = Visibility.PRIVATE;
126+
}
127+
123128
final InternalMethod method = new InternalMethod(rootNodeCopy.getSharedMethodInfo(), name, module, visibility, false,
124129
Truffle.getRuntime().createCallTarget(rootNodeCopy), null);
125130

126-
module.addMethod(null, method.withVisibility(visibility).withNewName(name));
131+
module.addMethod(null, method.withVisibility(visibility).withName(name));
127132
}
128133
}
129134

0 commit comments

Comments
 (0)