Ejemplo n.º 1
0
  @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;
  }