Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ab12014777a9
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 77790a05d42b
Choose a head ref
  • 3 commits
  • 2 files changed
  • 1 contributor

Commits on Apr 6, 2016

  1. Copy the full SHA
    a236e85 View commit details
  2. Copy the full SHA
    f95611b View commit details
  3. [Truffle] Removed a useless guard.

    UTF-8 strings never have a fixed width encoding.
    nirvdrum committed Apr 6, 2016
    Copy the full SHA
    77790a0 View commit details
Original file line number Diff line number Diff line change
@@ -935,19 +935,19 @@ public StringByteCharacterIndexNode(RubyContext context, SourceSection sourceSec

public abstract int executeStringBytCharacterIndex(VirtualFrame frame, DynamicObject string, int index, int start);

@Specialization(guards = "isSingleByteOptimizableOrAsciiOnly(string)")
@Specialization(guards = "isSingleByteOptimizable(string)")
public int stringByteCharacterIndexSingleByte(DynamicObject string, int index, int start) {
// Taken from Rubinius's String::find_byte_character_index.
return index;
}

@Specialization(guards = { "!isSingleByteOptimizableOrAsciiOnly(string)", "isFixedWidthEncoding(string)", "!isValidUtf8(string)" })
@Specialization(guards = { "!isSingleByteOptimizable(string)", "isFixedWidthEncoding(string)" })
public int stringByteCharacterIndexFixedWidth(DynamicObject string, int index, int start) {
// Taken from Rubinius's String::find_byte_character_index.
return index / encoding(string).minLength();
}

@Specialization(guards = { "!isSingleByteOptimizableOrAsciiOnly(string)", "!isFixedWidthEncoding(string)", "isValidUtf8(string)" })
@Specialization(guards = { "!isSingleByteOptimizable(string)", "!isFixedWidthEncoding(string)", "isValidUtf8(string)" })
public int stringByteCharacterIndexValidUtf8(DynamicObject string, int index, int start) {
// Taken from Rubinius's String::find_byte_character_index.

@@ -956,7 +956,7 @@ public int stringByteCharacterIndexValidUtf8(DynamicObject string, int index, in
}

@TruffleBoundary
@Specialization(guards = { "!isSingleByteOptimizableOrAsciiOnly(string)", "!isFixedWidthEncoding(string)", "!isValidUtf8(string)" })
@Specialization(guards = { "!isSingleByteOptimizable(string)", "!isFixedWidthEncoding(string)", "!isValidUtf8(string)" })
public int stringByteCharacterIndex(DynamicObject string, int index, int start) {
// Taken from Rubinius's String::find_byte_character_index and Encoding::find_byte_character_index.

Original file line number Diff line number Diff line change
@@ -35,12 +35,6 @@ public static boolean isAsciiCompatible(DynamicObject string) {
return Layouts.STRING.getRope(string).getEncoding().isAsciiCompatible();
}

public static boolean isSingleByteOptimizableOrAsciiOnly(DynamicObject string) {
assert RubyGuards.isRubyString(string);
// TODO (nirvdrum 08-Jun-15) Rubinius tracks whether a String is ASCII-only via a field in the String.
return isSingleByteOptimizable(string);
}

public static boolean isSingleByte(DynamicObject string) {
assert RubyGuards.isRubyString(string);
return Layouts.STRING.getRope(string).getEncoding().isSingleByte();
@@ -60,7 +54,7 @@ public static boolean isFixedWidthEncoding(DynamicObject string) {

public static boolean isValidUtf8(DynamicObject string) {
assert RubyGuards.isRubyString(string);
return StringOperations.isCodeRangeValid(string) && Layouts.STRING.getRope(string).getEncoding() instanceof UTF8Encoding;
return StringOperations.isCodeRangeValid(string) && Layouts.STRING.getRope(string).getEncoding().isUTF8();
}

public static boolean isEmpty(DynamicObject string) {