Ver Fonte

JS: Re-added comment, moved surrogates code to the right place

Wojciech Mandrysz há 9 anos atrás
pai
commit
292c2c91cf
2 ficheiros alterados com 10 adições e 9 exclusões
  1. 2 1
      js/binary/decoder.js
  2. 8 8
      js/binary/encoder.js

+ 2 - 1
js/binary/decoder.js

@@ -941,7 +941,8 @@ jspb.BinaryDecoder.prototype.readString = function(length) {
       codeUnits.push(high, low)
     }
   }
-
+  // String.fromCharCode.apply is faster than manually appending characters on
+  // Chrome 25+, and generates no additional cons string garbage.
   var result = String.fromCharCode.apply(null, codeUnits);
   this.cursor_ = cursor;
   return result;

+ 8 - 8
js/binary/encoder.js

@@ -413,14 +413,6 @@ jspb.BinaryEncoder.prototype.writeString = function(value) {
   for (var i = 0; i < value.length; i++) {
     
     var c = value.charCodeAt(i);
-    // Look for surrogates
-    if (c >= 0xD800 && c <= 0xDBFF && i + 1 < value.length) {
-      var second = value.charCodeAt(i + 1);
-      if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
-        // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-        c = (c - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
-      }
-    }
 
     if (c < 128) {
       this.buffer_.push(c);
@@ -428,6 +420,14 @@ jspb.BinaryEncoder.prototype.writeString = function(value) {
       this.buffer_.push((c >> 6) | 192);
       this.buffer_.push((c & 63) | 128);
     } else if (c < 65536) {
+      // Look for surrogates
+      if (c >= 0xD800 && c <= 0xDBFF && i + 1 < value.length) {
+        var second = value.charCodeAt(i + 1);
+        if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
+          // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+          c = (c - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+        }
+      }
       this.buffer_.push((c >> 12) | 224);
       this.buffer_.push(((c >> 6) & 63) | 128);
       this.buffer_.push((c & 63) | 128);