Skip to content

Commit

Permalink
[Truffle] Move Class#=== to Module and simplify assignableTo.
Browse files Browse the repository at this point in the history
  • Loading branch information
eregon committed Nov 4, 2014
1 parent 18b74c8 commit 82ce077
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 38 deletions.
26 changes: 0 additions & 26 deletions core/src/main/java/org/jruby/truffle/nodes/core/ClassNodes.java
Expand Up @@ -26,32 +26,6 @@
@CoreClass(name = "Class")
public abstract class ClassNodes {

@CoreMethod(names = "===", required = 1)
public abstract static class ContainsInstanceNode extends CoreMethodNode {

public ContainsInstanceNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

public ContainsInstanceNode(ContainsInstanceNode prev) {
super(prev);
}

@Specialization
public boolean containsInstance(RubyClass rubyClass, RubyBasicObject instance) {
notDesignedForCompilation();

return ModuleOperations.assignableTo(instance.getLogicalClass(), rubyClass);
}

@Specialization
public boolean containsInstance(RubyClass rubyClass, Object instance) {
notDesignedForCompilation();

return ModuleOperations.assignableTo(getContext().getCoreLibrary().box(instance).getLogicalClass(), rubyClass);
}
}

@CoreMethod(names = "new", needsBlock = true, argumentsAsArray = true)
public abstract static class NewNode extends CoreMethodNode {

Expand Down
26 changes: 26 additions & 0 deletions core/src/main/java/org/jruby/truffle/nodes/core/ModuleNodes.java
Expand Up @@ -41,6 +41,32 @@
@CoreClass(name = "Module")
public abstract class ModuleNodes {

@CoreMethod(names = "===", required = 1)
public abstract static class ContainsInstanceNode extends CoreMethodNode {

public ContainsInstanceNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

public ContainsInstanceNode(ContainsInstanceNode prev) {
super(prev);
}

@Specialization
public boolean containsInstance(RubyModule module, RubyBasicObject instance) {
notDesignedForCompilation();

return ModuleOperations.includesModule(instance.getMetaClass(), module);
}

@Specialization
public boolean containsInstance(RubyModule module, Object instance) {
notDesignedForCompilation();

return ModuleOperations.includesModule(getContext().getCoreLibrary().box(instance).getMetaClass(), module);
}
}

@CoreMethod(names = "<=", required = 1)
public abstract static class IsSubclassOfNode extends CoreMethodNode {

Expand Down
18 changes: 6 additions & 12 deletions core/src/main/java/org/jruby/truffle/runtime/ModuleOperations.java
Expand Up @@ -30,6 +30,12 @@ public static boolean includesModule(RubyModule module, RubyModule other) {
return false;
}

public static boolean assignableTo(RubyClass thisClass, RubyClass otherClass) {
RubyNode.notDesignedForCompilation();

return includesModule(thisClass, otherClass);
}

public static Map<String, RubyConstant> getAllConstants(RubyModule module) {
CompilerAsserts.neverPartOfCompilation();

Expand Down Expand Up @@ -216,16 +222,4 @@ public static void setClassVariable(RubyModule module, String name, Object value
module.getClassVariables().put(name, value);
}

public static boolean assignableTo(RubyClass thisClass, RubyClass otherClass) {
RubyNode.notDesignedForCompilation();

for (RubyModule ancestor : thisClass.ancestors()) {
if (ancestor == otherClass) {
return true;
}
}

return false;
}

}

0 comments on commit 82ce077

Please sign in to comment.