Browse Source

Fixed writing ASCII string into a valueStringBuilder that contains unicode. Fixes #283.

Dmitry Panov 4 years ago
parent
commit
462d53687b
2 changed files with 13 additions and 1 deletions
  1. 10 0
      builtin_string_test.go
  2. 3 1
      string_unicode.go

+ 10 - 0
builtin_string_test.go

@@ -242,4 +242,14 @@ func TestValueStringBuilder(t *testing.T) {
 			t.Fatal(res)
 			t.Fatal(res)
 		}
 		}
 	})
 	})
+
+	t.Run("concatSubstringUnicodeASCII", func(t *testing.T) {
+		t.Parallel()
+		var sb valueStringBuilder
+		sb.WriteString(newStringValue("юникод"))
+		sb.WriteSubstring(asciiString(" ascii"), 0, 6)
+		if res := sb.String(); !res.SameAs(newStringValue("юникод ascii")) {
+			t.Fatal(res)
+		}
+	})
 }
 }

+ 3 - 1
string_unicode.go

@@ -252,8 +252,10 @@ func (b *valueStringBuilder) WriteSubstring(source valueString, start int, end i
 	if ascii, ok := source.(asciiString); ok {
 	if ascii, ok := source.(asciiString); ok {
 		if b.ascii() {
 		if b.ascii() {
 			b.asciiBuilder.WriteString(string(ascii[start:end]))
 			b.asciiBuilder.WriteString(string(ascii[start:end]))
-			return
+		} else {
+			b.unicodeBuilder.writeASCIIString(string(ascii[start:end]))
 		}
 		}
+		return
 	}
 	}
 	us := source.(unicodeString)
 	us := source.(unicodeString)
 	if b.ascii() {
 	if b.ascii() {