OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 (function(global, utils) { | 5 (function(global, utils) { |
6 | 6 |
7 'use strict'; | 7 'use strict'; |
8 | 8 |
9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
10 | 10 |
11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- |
12 | 12 |
13 // Property of the builtins object for recording the result of the last | |
14 // regexp match. The property RegExpLastMatchInfo includes the matchIndices | |
15 // array of the last successful regexp match (an array of start/end index | |
16 // pairs for the match and all the captured substrings), the invariant is | |
17 // that there are at least two capture indices. The array also contains | |
18 // the subject string for the last successful match. | |
19 // We use a JSObject rather than a JSArray so we don't have to manually update | |
20 // its length. | |
21 var RegExpLastMatchInfo = { | |
22 REGEXP_NUMBER_OF_CAPTURES: 2, | |
23 REGEXP_LAST_SUBJECT: "", | |
24 REGEXP_LAST_INPUT: UNDEFINED, // Settable with RegExpSetInput. | |
25 CAPTURE0: 0, | |
26 CAPTURE1: 0 | |
27 }; | |
28 | |
29 // ES#sec-getsubstitution | 13 // ES#sec-getsubstitution |
30 // GetSubstitution(matched, str, position, captures, replacement) | 14 // GetSubstitution(matched, str, position, captures, replacement) |
31 // Expand the $-expressions in the string and return a new string with | 15 // Expand the $-expressions in the string and return a new string with |
32 // the result. | 16 // the result. |
33 function GetSubstitution(matched, string, position, captures, replacement) { | 17 function GetSubstitution(matched, string, position, captures, replacement) { |
34 var matchLength = matched.length; | 18 var matchLength = matched.length; |
35 var stringLength = string.length; | 19 var stringLength = string.length; |
36 var capturesLength = captures.length; | 20 var capturesLength = captures.length; |
37 var tailPos = position + matchLength; | 21 var tailPos = position + matchLength; |
38 var result = ""; | 22 var result = ""; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 | 89 |
106 // Append substring between the previous and the next $ character. | 90 // Append substring between the previous and the next $ character. |
107 if (next > pos) { | 91 if (next > pos) { |
108 result += %_SubString(replacement, pos, next); | 92 result += %_SubString(replacement, pos, next); |
109 } | 93 } |
110 } | 94 } |
111 return result; | 95 return result; |
112 } | 96 } |
113 | 97 |
114 // ------------------------------------------------------------------- | 98 // ------------------------------------------------------------------- |
115 | |
116 %InstallToContext(["regexp_last_match_info", RegExpLastMatchInfo]); | |
117 | |
118 // ------------------------------------------------------------------- | |
119 // Exports | 99 // Exports |
120 | 100 |
121 utils.Export(function(to) { | 101 utils.Export(function(to) { |
122 to.GetSubstitution = GetSubstitution; | 102 to.GetSubstitution = GetSubstitution; |
123 }); | 103 }); |
124 | 104 |
125 }) | 105 }) |
OLD | NEW |