| Index: src/uri.js
 | 
| ===================================================================
 | 
| --- src/uri.js	(revision 6703)
 | 
| +++ src/uri.js	(working copy)
 | 
| @@ -90,11 +90,13 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -function URIHexCharsToCharCode(ch1, ch2) {
 | 
| -  if (HexValueOf(ch1) == -1 || HexValueOf(ch2) == -1) {
 | 
| +function URIHexCharsToCharCode(highChar, lowChar) {
 | 
| +  var highCode = HexValueOf(highChar);
 | 
| +  var lowCode = HexValueOf(lowChar);
 | 
| +  if (highCode == -1 || lowCode == -1) {
 | 
|      throw new $URIError("URI malformed");
 | 
|    }
 | 
| -  return HexStrToCharCode(ch1 + ch2);
 | 
| +  return (highCode << 4) | lowCode;
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -196,7 +198,7 @@
 | 
|      var ch = uri.charAt(k);
 | 
|      if (ch == '%') {
 | 
|        if (k + 2 >= uriLength) throw new $URIError("URI malformed");
 | 
| -      var cc = URIHexCharsToCharCode(uri.charAt(++k), uri.charAt(++k));
 | 
| +      var cc = URIHexCharsToCharCode(uri.charCodeAt(++k), uri.charCodeAt(++k));
 | 
|        if (cc >> 7) {
 | 
|          var n = 0;
 | 
|          while (((cc << ++n) & 0x80) != 0) ;
 | 
| @@ -206,7 +208,7 @@
 | 
|          if (k + 3 * (n - 1) >= uriLength) throw new $URIError("URI malformed");
 | 
|          for (var i = 1; i < n; i++) {
 | 
|            if (uri.charAt(++k) != '%') throw new $URIError("URI malformed");
 | 
| -          octets[i] = URIHexCharsToCharCode(uri.charAt(++k), uri.charAt(++k));
 | 
| +          octets[i] = URIHexCharsToCharCode(uri.charCodeAt(++k), uri.charCodeAt(++k));
 | 
|          }
 | 
|          index = URIDecodeOctets(octets, result, index);
 | 
|        } else {
 | 
| @@ -325,9 +327,7 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -function HexValueOf(c) {
 | 
| -  var code = c.charCodeAt(0);
 | 
| -
 | 
| +function HexValueOf(code) {
 | 
|    // 0-9
 | 
|    if (code >= 48 && code <= 57) return code - 48;
 | 
|    // A-F
 | 
| @@ -356,18 +356,6 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -// Converts hex string to char code. Not efficient.
 | 
| -function HexStrToCharCode(s) {
 | 
| -  var m = 0;
 | 
| -  var r = 0;
 | 
| -  for (var i = s.length - 1; i >= 0; --i) {
 | 
| -    r = r + (HexValueOf(s.charAt(i)) << m);
 | 
| -    m = m + 4;
 | 
| -  }
 | 
| -  return r;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  // Returns true if all digits in string s are valid hex numbers
 | 
|  function IsValidHex(s) {
 | 
|    for (var i = 0; i < s.length; ++i) {
 | 
| 
 |