Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions core/src/main/java/org/jruby/RubyRegexp.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
import static org.jruby.api.Create.newHash;
import static org.jruby.api.Create.newSharedString;
import static org.jruby.api.Create.newString;
import static org.jruby.api.Create.newStringByteList;
import static org.jruby.api.Define.defineClass;
import static org.jruby.api.Error.argumentError;
import static org.jruby.api.Error.indexError;
Expand Down Expand Up @@ -1711,10 +1712,22 @@ static RubyString regsub(ThreadContext context, RubyString str, RubyString src,
return regsub(context, str, src, pattern, matcher.getRegion(), matcher.getBegin(), matcher.getEnd());
}

// rb_reg_regsub
static RubyStringByteList regsub(ThreadContext context, RubyStringByteList str, RubyStringByteList src, Regex pattern, Matcher matcher) {
return regsub(context, str, src, pattern, matcher.getRegion(), matcher.getBegin(), matcher.getEnd());
}

static RubyString regsub(ThreadContext context, RubyString str, RubyString src, Regex pattern, Region regs,
final int begin, final int end) {
RubyString val = null;
if (str instanceof RubyStringByteList strSBL && src instanceof RubyStringByteList srcSBL) {
return regsub(context, strSBL, srcSBL, pattern, regs, begin, end);
}
throw new RuntimeException("unknown string type: str=" + str.getClass() + ", src=" + src.getClass());
}

// rb_reg_regsub
static RubyStringByteList regsub(ThreadContext context, RubyStringByteList str, RubyStringByteList src, Regex pattern, Region regs,
final int begin, final int end) {
RubyStringByteList val = null;
int no = 0, clen[] = {0};
Encoding strEnc = EncodingUtils.encGet(context, str);
Encoding srcEnc = EncodingUtils.encGet(context, src);
Expand All @@ -1739,7 +1752,7 @@ static RubyString regsub(ThreadContext context, RubyString str, RubyString src,

if (c != '\\' || s == e) continue;

if (val == null) val = newString(context, new ByteList(ss - p));
if (val == null) val = newStringByteList(context, new ByteList(ss - p));
EncodingUtils.encStrBufCat(context.runtime, val, sBytes, p, ss - p, strEnc);

c = ASCGET(acompat, sBytes, s, e, clen, strEnc);
Expand Down
Loading
Loading