public static Object begin(DynamicObject matchData, int index) { assert RubyGuards.isRubyMatchData(matchData); final int b = (Layouts.MATCH_DATA.getFields(matchData).region == null) ? Layouts.MATCH_DATA.getFields(matchData).begin : Layouts.MATCH_DATA.getFields(matchData).region.beg[index]; if (b < 0) { return BasicObjectNodes.getContext(matchData).getCoreLibrary().getNilObject(); } updateCharOffset(matchData); return Layouts.MATCH_DATA.getFields(matchData).charOffsets.beg[index]; }
public static Object end(DynamicObject matchData, int index) { assert RubyGuards.isRubyMatchData(matchData); int e = (Layouts.MATCH_DATA.getFields(matchData).region == null) ? Layouts.MATCH_DATA.getFields(matchData).end : Layouts.MATCH_DATA.getFields(matchData).region.end[index]; if (e < 0) { return BasicObjectNodes.getContext(matchData).getCoreLibrary().getNilObject(); } final CodeRangeable sourceWrapped = StringNodes.getCodeRangeable(Layouts.MATCH_DATA.getFields(matchData).source); if (!StringSupport.isSingleByteOptimizable( sourceWrapped, sourceWrapped.getByteList().getEncoding())) { updateCharOffset(matchData); e = Layouts.MATCH_DATA.getFields(matchData).charOffsets.end[index]; } return e; }