@Override public Object retrieve(ThreadContext context, IRubyObject self, Object[] temp) { // SSS FIXME: Doesn't work in all cases. See example below // // s = "x\234\355\301\001\001\000\000\000\200\220\376\257\356\b\n#{"\000" * // 31}\030\200\000\000\001" // s.length prints 70 instead of 52 // // return context.getRuntime().newString(retrieveJavaString(interp, context, self)); ByteList bytes = new ByteList(); // if (is19()) bytes.setEncoding(encoding); RubyString str = RubyString.newStringShared(context.getRuntime(), bytes, StringSupport.CR_7BIT); for (Operand p : pieces) { if (p instanceof StringLiteral) { str.getByteList().append(((StringLiteral) p)._bl_value); } else { str.append((IRubyObject) p.retrieve(context, self, temp)); } } return str; }