Skip to content

Commit

Permalink
Showing 4 changed files with 20 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -83,6 +83,7 @@
import org.jcodings.specific.ASCIIEncoding;
import org.jcodings.specific.USASCIIEncoding;
import org.jcodings.specific.UTF8Encoding;
import org.jruby.RubyString;
import org.jruby.truffle.Layouts;
import org.jruby.truffle.RubyContext;
import org.jruby.truffle.builtins.CoreClass;
@@ -3122,6 +3123,19 @@ protected static boolean hasRawBytes(DynamicObject string) {

}

@CoreMethod(names = "string_escape")
public abstract static class StringEscapeNode extends CoreMethodArrayArgumentsNode {

@TruffleBoundary
@Specialization
public DynamicObject string_escape(DynamicObject string) {
final org.jruby.RubyString rubyString = new RubyString(getContext().getJRubyRuntime(), getContext().getJRubyRuntime().getString(),
StringOperations.getByteListReadOnly(string));
return createString(((RubyString) org.jruby.RubyString.rbStrEscape(getContext().getJRubyRuntime().getCurrentContext(), rubyString)).getByteList());
}

}

@Primitive(name = "string_find_character")
@ImportStatic(StringGuards.class)
public static abstract class StringFindCharacterNode extends PrimitiveArrayArgumentsNode {
Original file line number Diff line number Diff line change
@@ -9,25 +9,23 @@
*/
package org.jruby.truffle.interop.cext;

import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.dsl.CreateCast;
import com.oracle.truffle.api.dsl.NodeChild;
import com.oracle.truffle.api.dsl.NodeChildren;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.Frame;
import com.oracle.truffle.api.frame.FrameInstance;
import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
import com.oracle.truffle.api.frame.FrameInstanceVisitor;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
import com.oracle.truffle.api.object.DynamicObject;
import org.jruby.RubyString;
import org.jruby.truffle.builtins.CoreClass;
import org.jruby.truffle.builtins.CoreMethod;
import org.jruby.truffle.builtins.CoreMethodArrayArgumentsNode;
import org.jruby.truffle.builtins.CoreMethodNode;
import org.jruby.truffle.core.cast.NameToJavaStringNodeGen;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.language.RubyConstant;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.arguments.RubyArguments;
@@ -175,20 +173,6 @@ public DynamicObject toRubyString(DynamicObject string) {

}

@CoreMethod(names = "rb_str_escape", isModuleFunction = true, required = 1)
public abstract static class RbStrEscapeNode extends CoreMethodArrayArgumentsNode {

@TruffleBoundary
@Specialization
public CExtString rb_str_escape(CExtString cExtString) {
final org.jruby.RubyString rubyString = new RubyString(getContext().getJRubyRuntime(), getContext().getJRubyRuntime().getString(),
StringOperations.getByteListReadOnly(cExtString.getString()));
DynamicObject result = createString(((RubyString) org.jruby.RubyString.rbStrEscape(getContext().getJRubyRuntime().getCurrentContext(), rubyString)).getByteList());
return new CExtString(result);
}

}

@CoreMethod(names = "get_block", isModuleFunction = true)
public abstract static class GetBlockNode extends CoreMethodArrayArgumentsNode {

2 changes: 1 addition & 1 deletion truffle/src/main/ruby/core/array.rb
Original file line number Diff line number Diff line change
@@ -515,7 +515,7 @@ def inspect

return "[...]" if Thread.detect_recursion self do
each_with_index do |element, index|
temp = Rubinius::Type.object_inspect(element)
temp = Rubinius::Type.inspect(element)
result.force_encoding(temp.encoding) if index == 0
result << temp << comma
end
12 changes: 3 additions & 9 deletions truffle/src/main/ruby/core/type.rb
Original file line number Diff line number Diff line change
@@ -420,17 +420,11 @@ def self.compatible_encoding(a, b)
end

# similar to rb_inspect
def self.object_inspect(val)
def self.inspect(val)
str = Rubinius::Type.coerce_to(val.inspect, String, :to_s)
result_encoding = Encoding.default_internal || Encoding.default_external
unless result_encoding.ascii_compatible?
unless str.ascii_only?
return Truffle::CExt.to_ruby_string(Truffle::CExt.rb_str_escape(Truffle::CExt.CExtString(str)))
end
return str
end
if (str.encoding != result_encoding && !str.ascii_only?)
return Truffle::CExt.to_ruby_string(Truffle::CExt.rb_str_escape(Truffle::CExt.CExtString(str)))
if !str.ascii_only? && (!result_encoding.ascii_compatible? || str.encoding != result_encoding)
return str.string_escape
end
return str
end

0 comments on commit a7ba831

Please sign in to comment.