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