OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file contains support for URI manipulations written in | 5 // This file contains support for URI manipulations written in |
6 // JavaScript. | 6 // JavaScript. |
7 | 7 |
8 (function(global, utils) { | 8 (function(global, utils) { |
9 | 9 |
10 "use strict"; | 10 "use strict"; |
11 | 11 |
12 %CheckIsBootstrapping(); | 12 %CheckIsBootstrapping(); |
13 | 13 |
14 //- ------------------------------------------------------------------ | 14 //- ------------------------------------------------------------------ |
15 // Imports | 15 // Imports |
16 | 16 |
17 var GlobalObject = global.Object; | 17 var GlobalObject = global.Object; |
18 var GlobalArray = global.Array; | |
19 var InternalArray = utils.InternalArray; | 18 var InternalArray = utils.InternalArray; |
20 var MakeURIError; | 19 var MakeURIError; |
21 | 20 |
22 utils.Import(function(from) { | 21 utils.Import(function(from) { |
23 MakeURIError = from.MakeURIError; | 22 MakeURIError = from.MakeURIError; |
24 }); | 23 }); |
25 | 24 |
26 | 25 |
27 // ------------------------------------------------------------------- | 26 // ------------------------------------------------------------------- |
28 // Define internal helper functions. | 27 // Define internal helper functions. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 if (octets[1]) index = URIAddEncodedOctetToBuffer(octets[1], result, index); | 68 if (octets[1]) index = URIAddEncodedOctetToBuffer(octets[1], result, index); |
70 if (octets[2]) index = URIAddEncodedOctetToBuffer(octets[2], result, index); | 69 if (octets[2]) index = URIAddEncodedOctetToBuffer(octets[2], result, index); |
71 if (octets[3]) index = URIAddEncodedOctetToBuffer(octets[3], result, index); | 70 if (octets[3]) index = URIAddEncodedOctetToBuffer(octets[3], result, index); |
72 return index; | 71 return index; |
73 } | 72 } |
74 | 73 |
75 function URIEncodeSingle(cc, result, index) { | 74 function URIEncodeSingle(cc, result, index) { |
76 var x = (cc >> 12) & 0xF; | 75 var x = (cc >> 12) & 0xF; |
77 var y = (cc >> 6) & 63; | 76 var y = (cc >> 6) & 63; |
78 var z = cc & 63; | 77 var z = cc & 63; |
79 var octets = new GlobalArray(3); | 78 var octets = new InternalArray(3); |
80 if (cc <= 0x007F) { | 79 if (cc <= 0x007F) { |
81 octets[0] = cc; | 80 octets[0] = cc; |
82 } else if (cc <= 0x07FF) { | 81 } else if (cc <= 0x07FF) { |
83 octets[0] = y + 192; | 82 octets[0] = y + 192; |
84 octets[1] = z + 128; | 83 octets[1] = z + 128; |
85 } else { | 84 } else { |
86 octets[0] = x + 224; | 85 octets[0] = x + 224; |
87 octets[1] = y + 128; | 86 octets[1] = y + 128; |
88 octets[2] = z + 128; | 87 octets[2] = z + 128; |
89 } | 88 } |
90 return URIEncodeOctets(octets, result, index); | 89 return URIEncodeOctets(octets, result, index); |
91 } | 90 } |
92 | 91 |
93 function URIEncodePair(cc1 , cc2, result, index) { | 92 function URIEncodePair(cc1 , cc2, result, index) { |
94 var u = ((cc1 >> 6) & 0xF) + 1; | 93 var u = ((cc1 >> 6) & 0xF) + 1; |
95 var w = (cc1 >> 2) & 0xF; | 94 var w = (cc1 >> 2) & 0xF; |
96 var x = cc1 & 3; | 95 var x = cc1 & 3; |
97 var y = (cc2 >> 6) & 0xF; | 96 var y = (cc2 >> 6) & 0xF; |
98 var z = cc2 & 63; | 97 var z = cc2 & 63; |
99 var octets = new GlobalArray(4); | 98 var octets = new InternalArray(4); |
100 octets[0] = (u >> 2) + 240; | 99 octets[0] = (u >> 2) + 240; |
101 octets[1] = (((u & 3) << 4) | w) + 128; | 100 octets[1] = (((u & 3) << 4) | w) + 128; |
102 octets[2] = ((x << 4) | y) + 128; | 101 octets[2] = ((x << 4) | y) + 128; |
103 octets[3] = z + 128; | 102 octets[3] = z + 128; |
104 return URIEncodeOctets(octets, result, index); | 103 return URIEncodeOctets(octets, result, index); |
105 } | 104 } |
106 | 105 |
107 function URIHexCharsToCharCode(highChar, lowChar) { | 106 function URIHexCharsToCharCode(highChar, lowChar) { |
108 var highCode = HexValueOf(highChar); | 107 var highCode = HexValueOf(highChar); |
109 var lowCode = HexValueOf(lowChar); | 108 var lowCode = HexValueOf(lowChar); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 for ( ; k < uriLength; k++) { | 240 for ( ; k < uriLength; k++) { |
242 var code = %_StringCharCodeAt(uri, k); | 241 var code = %_StringCharCodeAt(uri, k); |
243 if (code == 37) { // '%' | 242 if (code == 37) { // '%' |
244 if (k + 2 >= uriLength) throw MakeURIError(); | 243 if (k + 2 >= uriLength) throw MakeURIError(); |
245 var cc = URIHexCharsToCharCode(%_StringCharCodeAt(uri, ++k), | 244 var cc = URIHexCharsToCharCode(%_StringCharCodeAt(uri, ++k), |
246 %_StringCharCodeAt(uri, ++k)); | 245 %_StringCharCodeAt(uri, ++k)); |
247 if (cc >> 7) { | 246 if (cc >> 7) { |
248 var n = 0; | 247 var n = 0; |
249 while (((cc << ++n) & 0x80) != 0) { } | 248 while (((cc << ++n) & 0x80) != 0) { } |
250 if (n == 1 || n > 4) throw MakeURIError(); | 249 if (n == 1 || n > 4) throw MakeURIError(); |
251 var octets = new GlobalArray(n); | 250 var octets = new InternalArray(n); |
252 octets[0] = cc; | 251 octets[0] = cc; |
253 if (k + 3 * (n - 1) >= uriLength) throw MakeURIError(); | 252 if (k + 3 * (n - 1) >= uriLength) throw MakeURIError(); |
254 for (var i = 1; i < n; i++) { | 253 for (var i = 1; i < n; i++) { |
255 if (uri[++k] != '%') throw MakeURIError(); | 254 if (uri[++k] != '%') throw MakeURIError(); |
256 octets[i] = URIHexCharsToCharCode(%_StringCharCodeAt(uri, ++k), | 255 octets[i] = URIHexCharsToCharCode(%_StringCharCodeAt(uri, ++k), |
257 %_StringCharCodeAt(uri, ++k)); | 256 %_StringCharCodeAt(uri, ++k)); |
258 } | 257 } |
259 index = URIDecodeOctets(octets, two_byte, index); | 258 index = URIDecodeOctets(octets, two_byte, index); |
260 } else if (reserved(cc)) { | 259 } else if (reserved(cc)) { |
261 %_TwoByteSeqStringSetChar(index++, 37, two_byte); // '%'. | 260 %_TwoByteSeqStringSetChar(index++, 37, two_byte); // '%'. |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 utils.InstallFunctions(global, DONT_ENUM, [ | 370 utils.InstallFunctions(global, DONT_ENUM, [ |
372 "escape", URIEscapeJS, | 371 "escape", URIEscapeJS, |
373 "unescape", URIUnescapeJS, | 372 "unescape", URIUnescapeJS, |
374 "decodeURI", URIDecode, | 373 "decodeURI", URIDecode, |
375 "decodeURIComponent", URIDecodeComponent, | 374 "decodeURIComponent", URIDecodeComponent, |
376 "encodeURI", URIEncode, | 375 "encodeURI", URIEncode, |
377 "encodeURIComponent", URIEncodeComponent | 376 "encodeURIComponent", URIEncodeComponent |
378 ]); | 377 ]); |
379 | 378 |
380 }) | 379 }) |
OLD | NEW |