Skip to content

Commit

Permalink
Showing 4 changed files with 38 additions and 17 deletions.
7 changes: 0 additions & 7 deletions spec/truffle/tags/core/marshal/dump_tags.txt
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
fails:Marshal.dump dumps an extended_object
fails:Marshal.dump with a String dumps a String extended with a Module
fails:Marshal.dump with a Regexp dumps a Regexp
fails:Marshal.dump with a Regexp dumps a Regexp with flags
fails:Marshal.dump with a Regexp dumps a Regexp with instance variables
fails:Marshal.dump with a Regexp dumps an extended Regexp
fails:Marshal.dump with a Regexp dumps a Regexp subclass
fails:Marshal.dump with a Regexp dumps a UTF-8 Regexp
fails:Marshal.dump with a Regexp dumps a Regexp in another encoding
fails:Marshal.dump with an Array dumps an extended Array
fails:Marshal.dump with a Hash dumps an extended Hash
fails:Marshal.dump with a Struct dumps an extended Struct
fails:Marshal.dump with an Object dumps an extended Object
fails:Marshal.dump with an Object dumps a BasicObject subclass if it defines respond_to?
fails:Marshal.dump with a Time dumps the zone and the offset
fails:Marshal.dump with a Time dumps the zone, but not the offset if zone is UTC
fails:Marshal.dump with an Exception dumps the message for the exception
fails:Marshal.dump with an Exception contains the filename in the backtrace
fails:Marshal.dump with a Symbol dumps a binary encoded Symbol
fails:Marshal.dump with a String dumps a String subclass extended with a Module
Original file line number Diff line number Diff line change
@@ -57,6 +57,8 @@
import org.jruby.truffle.nodes.core.BasicObjectNodesFactory.ReferenceEqualNodeFactory;
import org.jruby.truffle.nodes.core.KernelNodes;
import org.jruby.truffle.nodes.core.KernelNodesFactory;
import org.jruby.truffle.nodes.dispatch.CallDispatchHeadNode;
import org.jruby.truffle.nodes.dispatch.DispatchHeadNodeFactory;
import org.jruby.truffle.nodes.objects.ClassNode;
import org.jruby.truffle.nodes.objects.ClassNodeGen;
import org.jruby.truffle.nodes.objects.IsANode;
@@ -159,6 +161,37 @@ public Object vmExit(Object status) {

}

@RubiniusPrimitive(name = "vm_extended_modules", needsSelf = false)
public static abstract class VMExtendedModulesNode extends RubiniusPrimitiveNode {

@Child private CallDispatchHeadNode newArrayNode;
@Child private CallDispatchHeadNode arrayAppendNode;

public VMExtendedModulesNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
newArrayNode = DispatchHeadNodeFactory.createMethodCall(context);
arrayAppendNode = DispatchHeadNodeFactory.createMethodCall(context);
}

@Specialization
public Object vmExtendedModules(VirtualFrame frame, Object object) {
final DynamicObject metaClass = getContext().getCoreLibrary().getMetaClass(object);

if (Layouts.CLASS.getIsSingleton(metaClass)) {
final Object ret = newArrayNode.call(frame, getContext().getCoreLibrary().getArrayClass(), "new", null);

for (DynamicObject included : Layouts.MODULE.getFields(metaClass).prependedAndIncludedModules()) {
arrayAppendNode.call(frame, ret, "<<", null, included);
}

return ret;
}

return nil();
}

}

@RubiniusPrimitive(name = "vm_get_module_name", needsSelf = false)
public static abstract class VMGetModuleNamePrimitiveNode extends RubiniusPrimitiveNode {

5 changes: 5 additions & 0 deletions truffle/src/main/ruby/core/rubinius/bootstrap/rubinius.rb
Original file line number Diff line number Diff line change
@@ -32,6 +32,11 @@ def self.watch_signal(sig, ignored)
raise PrimitiveFailure, "Rubinius.vm_watch_signal primitive failed" # Truffle: simplified failure
end

def self.extended_modules(obj)
Rubinius.primitive :vm_extended_modules
raise PrimitiveFailure, "Rubinius.extended_modules primitive failed"
end

def self.raise_exception(exc)
Rubinius.primitive :vm_raise_exception
raise PrimitiveFailure, "Rubinius.vm_raise_exception primitive failed"
10 changes: 0 additions & 10 deletions truffle/src/main/ruby/core/shims.rb
Original file line number Diff line number Diff line change
@@ -63,16 +63,6 @@ def self.last_match(n = nil)

module Rubinius
L64 = true

def extended_modules(object)
[]
end
end

class Module
def extended_modules(object)
[]
end
end

class String

0 comments on commit 23fb07d

Please sign in to comment.