Line data Source code
1 : #include "src/builtins/builtins-utils-gen.h"
2 : #include "src/builtins/builtins.h"
3 : #include "src/code-factory.h"
4 : #include "src/elements-kind.h"
5 : #include "src/heap/factory-inl.h"
6 : #include "src/objects.h"
7 : #include "src/objects/arguments.h"
8 : #include "src/objects/bigint.h"
9 : #include "src/objects/free-space.h"
10 : #include "src/objects/js-generator.h"
11 : #include "src/objects/js-promise.h"
12 : #include "src/objects/js-regexp-string-iterator.h"
13 : #include "src/objects/module.h"
14 : #include "src/objects/stack-frame-info.h"
15 : #include "src/builtins/builtins-regexp-gen.h"
16 : #include "src/builtins/builtins-array-gen.h"
17 : #include "src/builtins/builtins-collections-gen.h"
18 : #include "src/builtins/builtins-data-view-gen.h"
19 : #include "src/builtins/builtins-iterator-gen.h"
20 : #include "src/builtins/builtins-proxy-gen.h"
21 : #include "src/builtins/builtins-proxy-gen.h"
22 : #include "src/builtins/builtins-regexp-gen.h"
23 : #include "src/builtins/builtins-regexp-gen.h"
24 : #include "src/builtins/builtins-regexp-gen.h"
25 : #include "src/builtins/builtins-typed-array-gen.h"
26 : #include "src/builtins/builtins-constructor-gen.h"
27 : #include "src/builtins/builtins-typed-array-gen.h"
28 : #include "src/builtins/builtins-typed-array-gen.h"
29 : #include "src/builtins/builtins-typed-array-gen.h"
30 : #include "src/builtins/builtins-typed-array-gen.h"
31 : #include "src/builtins/builtins-typed-array-gen.h"
32 : #include "src/builtins/builtins-typed-array-gen.h"
33 : #include "src/builtins/builtins-typed-array-gen.h"
34 : #include "src/builtins/builtins-typed-array-gen.h"
35 : #include "torque-generated/builtins-base-from-dsl-gen.h"
36 : #include "torque-generated/builtins-growable-fixed-array-from-dsl-gen.h"
37 : #include "torque-generated/builtins-arguments-from-dsl-gen.h"
38 : #include "torque-generated/builtins-array-from-dsl-gen.h"
39 : #include "torque-generated/builtins-array-copywithin-from-dsl-gen.h"
40 : #include "torque-generated/builtins-array-filter-from-dsl-gen.h"
41 : #include "torque-generated/builtins-array-find-from-dsl-gen.h"
42 : #include "torque-generated/builtins-array-findindex-from-dsl-gen.h"
43 : #include "torque-generated/builtins-array-foreach-from-dsl-gen.h"
44 : #include "torque-generated/builtins-array-join-from-dsl-gen.h"
45 : #include "torque-generated/builtins-array-lastindexof-from-dsl-gen.h"
46 : #include "torque-generated/builtins-array-of-from-dsl-gen.h"
47 : #include "torque-generated/builtins-array-map-from-dsl-gen.h"
48 : #include "torque-generated/builtins-array-reverse-from-dsl-gen.h"
49 : #include "torque-generated/builtins-array-shift-from-dsl-gen.h"
50 : #include "torque-generated/builtins-array-slice-from-dsl-gen.h"
51 : #include "torque-generated/builtins-array-splice-from-dsl-gen.h"
52 : #include "torque-generated/builtins-array-unshift-from-dsl-gen.h"
53 : #include "torque-generated/builtins-collections-from-dsl-gen.h"
54 : #include "torque-generated/builtins-data-view-from-dsl-gen.h"
55 : #include "torque-generated/builtins-extras-utils-from-dsl-gen.h"
56 : #include "torque-generated/builtins-iterator-from-dsl-gen.h"
57 : #include "torque-generated/builtins-object-from-dsl-gen.h"
58 : #include "torque-generated/builtins-proxy-from-dsl-gen.h"
59 : #include "torque-generated/builtins-regexp-from-dsl-gen.h"
60 : #include "torque-generated/builtins-regexp-replace-from-dsl-gen.h"
61 : #include "torque-generated/builtins-string-from-dsl-gen.h"
62 : #include "torque-generated/builtins-string-html-from-dsl-gen.h"
63 : #include "torque-generated/builtins-string-repeat-from-dsl-gen.h"
64 : #include "torque-generated/builtins-typed-array-from-dsl-gen.h"
65 : #include "torque-generated/builtins-typed-array-createtypedarray-from-dsl-gen.h"
66 : #include "torque-generated/builtins-typed-array-every-from-dsl-gen.h"
67 : #include "torque-generated/builtins-typed-array-filter-from-dsl-gen.h"
68 : #include "torque-generated/builtins-typed-array-find-from-dsl-gen.h"
69 : #include "torque-generated/builtins-typed-array-findindex-from-dsl-gen.h"
70 : #include "torque-generated/builtins-typed-array-foreach-from-dsl-gen.h"
71 : #include "torque-generated/builtins-typed-array-reduce-from-dsl-gen.h"
72 : #include "torque-generated/builtins-typed-array-reduceright-from-dsl-gen.h"
73 : #include "torque-generated/builtins-typed-array-slice-from-dsl-gen.h"
74 : #include "torque-generated/builtins-typed-array-some-from-dsl-gen.h"
75 : #include "torque-generated/builtins-typed-array-subarray-from-dsl-gen.h"
76 : #include "torque-generated/builtins-test-from-dsl-gen.h"
77 :
78 : namespace v8 {
79 : namespace internal {
80 :
81 56 : compiler::TNode<String> RegexpReplaceBuiltinsFromDSLAssembler::RegExpReplaceFastString(compiler::TNode<Context> p_context, compiler::TNode<JSRegExp> p_regexp, compiler::TNode<String> p_string, compiler::TNode<String> p_replaceString) {
82 56 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
83 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
84 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
85 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
86 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
87 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, JSRegExp, String> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
88 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, JSRegExp, String, RegExpMatchInfo> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
89 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
90 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
91 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
92 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
93 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
94 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
95 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
96 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT, RegExpMatchInfo, Smi, Smi> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
97 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String, Smi, BoolT, Smi, BoolT> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
98 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
99 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, String, String> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
100 : ca_.Goto(&block0, p_context, p_regexp, p_string, p_replaceString);
101 :
102 56 : if (block0.is_used()) {
103 : compiler::TNode<Context> tmp0;
104 : compiler::TNode<JSRegExp> tmp1;
105 : compiler::TNode<String> tmp2;
106 : compiler::TNode<String> tmp3;
107 : ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3);
108 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 36);
109 : compiler::TNode<String> tmp4;
110 : USE(tmp4);
111 168 : tmp4 = BaseBuiltinsFromDSLAssembler(state_).kEmptyString();
112 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 37);
113 : compiler::TNode<Smi> tmp5;
114 : USE(tmp5);
115 168 : tmp5 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
116 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 38);
117 : compiler::TNode<BoolT> tmp6;
118 : USE(tmp6);
119 168 : tmp6 = ca_.UncheckedCast<BoolT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr6ATbool16ATconstexpr_bool(false));
120 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 39);
121 : compiler::TNode<Smi> tmp7;
122 : USE(tmp7);
123 168 : tmp7 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp3}));
124 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 40);
125 : compiler::TNode<BoolT> tmp8;
126 : USE(tmp8);
127 112 : tmp8 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterGlobal(compiler::TNode<JSRegExp>{tmp1}));
128 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 42);
129 56 : ca_.Branch(tmp8, &block2, &block3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8);
130 : }
131 :
132 56 : if (block2.is_used()) {
133 : compiler::TNode<Context> tmp9;
134 : compiler::TNode<JSRegExp> tmp10;
135 : compiler::TNode<String> tmp11;
136 : compiler::TNode<String> tmp12;
137 : compiler::TNode<String> tmp13;
138 : compiler::TNode<Smi> tmp14;
139 : compiler::TNode<BoolT> tmp15;
140 : compiler::TNode<Smi> tmp16;
141 : compiler::TNode<BoolT> tmp17;
142 : ca_.Bind(&block2, &tmp9, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
143 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 43);
144 : compiler::TNode<BoolT> tmp18;
145 : USE(tmp18);
146 112 : tmp18 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterUnicode(compiler::TNode<JSRegExp>{tmp10}));
147 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 44);
148 : compiler::TNode<Smi> tmp19;
149 : USE(tmp19);
150 168 : tmp19 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
151 168 : RegExpBuiltinsAssembler(state_).FastStoreLastIndex(compiler::TNode<JSRegExp>{tmp10}, compiler::TNode<Smi>{tmp19});
152 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 42);
153 : ca_.Goto(&block3, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp18, tmp16, tmp17);
154 : }
155 :
156 56 : if (block3.is_used()) {
157 : compiler::TNode<Context> tmp20;
158 : compiler::TNode<JSRegExp> tmp21;
159 : compiler::TNode<String> tmp22;
160 : compiler::TNode<String> tmp23;
161 : compiler::TNode<String> tmp24;
162 : compiler::TNode<Smi> tmp25;
163 : compiler::TNode<BoolT> tmp26;
164 : compiler::TNode<Smi> tmp27;
165 : compiler::TNode<BoolT> tmp28;
166 : ca_.Bind(&block3, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25, &tmp26, &tmp27, &tmp28);
167 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 47);
168 : ca_.Goto(&block6, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27, tmp28);
169 : }
170 :
171 56 : if (block6.is_used()) {
172 : compiler::TNode<Context> tmp29;
173 : compiler::TNode<JSRegExp> tmp30;
174 : compiler::TNode<String> tmp31;
175 : compiler::TNode<String> tmp32;
176 : compiler::TNode<String> tmp33;
177 : compiler::TNode<Smi> tmp34;
178 : compiler::TNode<BoolT> tmp35;
179 : compiler::TNode<Smi> tmp36;
180 : compiler::TNode<BoolT> tmp37;
181 : ca_.Bind(&block6, &tmp29, &tmp30, &tmp31, &tmp32, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37);
182 : compiler::TNode<BoolT> tmp38;
183 : USE(tmp38);
184 168 : tmp38 = ca_.UncheckedCast<BoolT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr6ATbool16ATconstexpr_bool(true));
185 56 : ca_.Branch(tmp38, &block4, &block5, tmp29, tmp30, tmp31, tmp32, tmp33, tmp34, tmp35, tmp36, tmp37);
186 : }
187 :
188 56 : if (block4.is_used()) {
189 : compiler::TNode<Context> tmp39;
190 : compiler::TNode<JSRegExp> tmp40;
191 : compiler::TNode<String> tmp41;
192 : compiler::TNode<String> tmp42;
193 : compiler::TNode<String> tmp43;
194 : compiler::TNode<Smi> tmp44;
195 : compiler::TNode<BoolT> tmp45;
196 : compiler::TNode<Smi> tmp46;
197 : compiler::TNode<BoolT> tmp47;
198 : ca_.Bind(&block4, &tmp39, &tmp40, &tmp41, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46, &tmp47);
199 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 49);
200 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 48);
201 : compiler::TNode<RegExpMatchInfo> tmp48;
202 : USE(tmp48);
203 56 : compiler::CodeAssemblerLabel label0(&ca_);
204 168 : tmp48 = RegExpBuiltinsAssembler(state_).RegExpPrototypeExecBodyWithoutResultFast(compiler::TNode<Context>{tmp39}, compiler::TNode<JSReceiver>{tmp40}, compiler::TNode<String>{tmp41}, &label0);
205 : ca_.Goto(&block9, tmp39, tmp40, tmp41, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp40, tmp41, tmp48);
206 56 : if (label0.is_used()) {
207 56 : ca_.Bind(&label0);
208 : ca_.Goto(&block10, tmp39, tmp40, tmp41, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp40, tmp41);
209 : }
210 : }
211 :
212 56 : if (block10.is_used()) {
213 : compiler::TNode<Context> tmp49;
214 : compiler::TNode<JSRegExp> tmp50;
215 : compiler::TNode<String> tmp51;
216 : compiler::TNode<String> tmp52;
217 : compiler::TNode<String> tmp53;
218 : compiler::TNode<Smi> tmp54;
219 : compiler::TNode<BoolT> tmp55;
220 : compiler::TNode<Smi> tmp56;
221 : compiler::TNode<BoolT> tmp57;
222 : compiler::TNode<JSRegExp> tmp58;
223 : compiler::TNode<String> tmp59;
224 : ca_.Bind(&block10, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59);
225 : ca_.Goto(&block8, tmp49, tmp50, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56, tmp57);
226 : }
227 :
228 56 : if (block9.is_used()) {
229 : compiler::TNode<Context> tmp60;
230 : compiler::TNode<JSRegExp> tmp61;
231 : compiler::TNode<String> tmp62;
232 : compiler::TNode<String> tmp63;
233 : compiler::TNode<String> tmp64;
234 : compiler::TNode<Smi> tmp65;
235 : compiler::TNode<BoolT> tmp66;
236 : compiler::TNode<Smi> tmp67;
237 : compiler::TNode<BoolT> tmp68;
238 : compiler::TNode<JSRegExp> tmp69;
239 : compiler::TNode<String> tmp70;
240 : compiler::TNode<RegExpMatchInfo> tmp71;
241 : ca_.Bind(&block9, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64, &tmp65, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71);
242 : ca_.Goto(&block7, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp71);
243 : }
244 :
245 56 : if (block8.is_used()) {
246 : compiler::TNode<Context> tmp72;
247 : compiler::TNode<JSRegExp> tmp73;
248 : compiler::TNode<String> tmp74;
249 : compiler::TNode<String> tmp75;
250 : compiler::TNode<String> tmp76;
251 : compiler::TNode<Smi> tmp77;
252 : compiler::TNode<BoolT> tmp78;
253 : compiler::TNode<Smi> tmp79;
254 : compiler::TNode<BoolT> tmp80;
255 : ca_.Bind(&block8, &tmp72, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77, &tmp78, &tmp79, &tmp80);
256 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 49);
257 : ca_.Goto(&block5, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp78, tmp79, tmp80);
258 : }
259 :
260 56 : if (block7.is_used()) {
261 : compiler::TNode<Context> tmp81;
262 : compiler::TNode<JSRegExp> tmp82;
263 : compiler::TNode<String> tmp83;
264 : compiler::TNode<String> tmp84;
265 : compiler::TNode<String> tmp85;
266 : compiler::TNode<Smi> tmp86;
267 : compiler::TNode<BoolT> tmp87;
268 : compiler::TNode<Smi> tmp88;
269 : compiler::TNode<BoolT> tmp89;
270 : compiler::TNode<RegExpMatchInfo> tmp90;
271 : ca_.Bind(&block7, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90);
272 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 48);
273 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 50);
274 : compiler::TNode<Smi> tmp91;
275 : USE(tmp91);
276 168 : tmp91 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_)._method_RegExpMatchInfo_GetStartOfCapture(compiler::TNode<Context>{tmp81}, compiler::TNode<RegExpMatchInfo>{tmp90}, 0));
277 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 51);
278 : compiler::TNode<Smi> tmp92;
279 : USE(tmp92);
280 168 : tmp92 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_)._method_RegExpMatchInfo_GetEndOfCapture(compiler::TNode<Context>{tmp81}, compiler::TNode<RegExpMatchInfo>{tmp90}, 0));
281 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 55);
282 : compiler::TNode<String> tmp93;
283 112 : tmp93 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kSubString, tmp81, tmp83, tmp86, tmp91));
284 : USE(tmp93);
285 : compiler::TNode<String> tmp94;
286 : USE(tmp94);
287 168 : tmp94 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp81}, compiler::TNode<String>{tmp85}, compiler::TNode<String>{tmp93}));
288 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 56);
289 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 58);
290 : compiler::TNode<Smi> tmp95;
291 : USE(tmp95);
292 168 : tmp95 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
293 : compiler::TNode<BoolT> tmp96;
294 : USE(tmp96);
295 112 : tmp96 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiNotEqual(compiler::TNode<Smi>{tmp88}, compiler::TNode<Smi>{tmp95}));
296 56 : ca_.Branch(tmp96, &block11, &block12, tmp81, tmp82, tmp83, tmp84, tmp94, tmp92, tmp87, tmp88, tmp89, tmp90, tmp91, tmp92);
297 : }
298 :
299 56 : if (block11.is_used()) {
300 : compiler::TNode<Context> tmp97;
301 : compiler::TNode<JSRegExp> tmp98;
302 : compiler::TNode<String> tmp99;
303 : compiler::TNode<String> tmp100;
304 : compiler::TNode<String> tmp101;
305 : compiler::TNode<Smi> tmp102;
306 : compiler::TNode<BoolT> tmp103;
307 : compiler::TNode<Smi> tmp104;
308 : compiler::TNode<BoolT> tmp105;
309 : compiler::TNode<RegExpMatchInfo> tmp106;
310 : compiler::TNode<Smi> tmp107;
311 : compiler::TNode<Smi> tmp108;
312 : ca_.Bind(&block11, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104, &tmp105, &tmp106, &tmp107, &tmp108);
313 : compiler::TNode<String> tmp109;
314 : USE(tmp109);
315 168 : tmp109 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp97}, compiler::TNode<String>{tmp101}, compiler::TNode<String>{tmp100}));
316 : ca_.Goto(&block12, tmp97, tmp98, tmp99, tmp100, tmp109, tmp102, tmp103, tmp104, tmp105, tmp106, tmp107, tmp108);
317 : }
318 :
319 56 : if (block12.is_used()) {
320 : compiler::TNode<Context> tmp110;
321 : compiler::TNode<JSRegExp> tmp111;
322 : compiler::TNode<String> tmp112;
323 : compiler::TNode<String> tmp113;
324 : compiler::TNode<String> tmp114;
325 : compiler::TNode<Smi> tmp115;
326 : compiler::TNode<BoolT> tmp116;
327 : compiler::TNode<Smi> tmp117;
328 : compiler::TNode<BoolT> tmp118;
329 : compiler::TNode<RegExpMatchInfo> tmp119;
330 : compiler::TNode<Smi> tmp120;
331 : compiler::TNode<Smi> tmp121;
332 : ca_.Bind(&block12, &tmp110, &tmp111, &tmp112, &tmp113, &tmp114, &tmp115, &tmp116, &tmp117, &tmp118, &tmp119, &tmp120, &tmp121);
333 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 61);
334 : compiler::TNode<BoolT> tmp122;
335 : USE(tmp122);
336 168 : tmp122 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).Word32BinaryNot(compiler::TNode<BoolT>{tmp118}));
337 56 : ca_.Branch(tmp122, &block13, &block14, tmp110, tmp111, tmp112, tmp113, tmp114, tmp115, tmp116, tmp117, tmp118, tmp119, tmp120, tmp121);
338 : }
339 :
340 56 : if (block13.is_used()) {
341 : compiler::TNode<Context> tmp123;
342 : compiler::TNode<JSRegExp> tmp124;
343 : compiler::TNode<String> tmp125;
344 : compiler::TNode<String> tmp126;
345 : compiler::TNode<String> tmp127;
346 : compiler::TNode<Smi> tmp128;
347 : compiler::TNode<BoolT> tmp129;
348 : compiler::TNode<Smi> tmp130;
349 : compiler::TNode<BoolT> tmp131;
350 : compiler::TNode<RegExpMatchInfo> tmp132;
351 : compiler::TNode<Smi> tmp133;
352 : compiler::TNode<Smi> tmp134;
353 : ca_.Bind(&block13, &tmp123, &tmp124, &tmp125, &tmp126, &tmp127, &tmp128, &tmp129, &tmp130, &tmp131, &tmp132, &tmp133, &tmp134);
354 : ca_.Goto(&block5, tmp123, tmp124, tmp125, tmp126, tmp127, tmp128, tmp129, tmp130, tmp131);
355 : }
356 :
357 56 : if (block14.is_used()) {
358 : compiler::TNode<Context> tmp135;
359 : compiler::TNode<JSRegExp> tmp136;
360 : compiler::TNode<String> tmp137;
361 : compiler::TNode<String> tmp138;
362 : compiler::TNode<String> tmp139;
363 : compiler::TNode<Smi> tmp140;
364 : compiler::TNode<BoolT> tmp141;
365 : compiler::TNode<Smi> tmp142;
366 : compiler::TNode<BoolT> tmp143;
367 : compiler::TNode<RegExpMatchInfo> tmp144;
368 : compiler::TNode<Smi> tmp145;
369 : compiler::TNode<Smi> tmp146;
370 : ca_.Bind(&block14, &tmp135, &tmp136, &tmp137, &tmp138, &tmp139, &tmp140, &tmp141, &tmp142, &tmp143, &tmp144, &tmp145, &tmp146);
371 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 64);
372 : compiler::TNode<BoolT> tmp147;
373 : USE(tmp147);
374 112 : tmp147 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiEqual(compiler::TNode<Smi>{tmp146}, compiler::TNode<Smi>{tmp145}));
375 56 : ca_.Branch(tmp147, &block15, &block16, tmp135, tmp136, tmp137, tmp138, tmp139, tmp140, tmp141, tmp142, tmp143, tmp144, tmp145, tmp146);
376 : }
377 :
378 56 : if (block15.is_used()) {
379 : compiler::TNode<Context> tmp148;
380 : compiler::TNode<JSRegExp> tmp149;
381 : compiler::TNode<String> tmp150;
382 : compiler::TNode<String> tmp151;
383 : compiler::TNode<String> tmp152;
384 : compiler::TNode<Smi> tmp153;
385 : compiler::TNode<BoolT> tmp154;
386 : compiler::TNode<Smi> tmp155;
387 : compiler::TNode<BoolT> tmp156;
388 : compiler::TNode<RegExpMatchInfo> tmp157;
389 : compiler::TNode<Smi> tmp158;
390 : compiler::TNode<Smi> tmp159;
391 : ca_.Bind(&block15, &tmp148, &tmp149, &tmp150, &tmp151, &tmp152, &tmp153, &tmp154, &tmp155, &tmp156, &tmp157, &tmp158, &tmp159);
392 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 65);
393 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 66);
394 : compiler::TNode<Smi> tmp160;
395 : USE(tmp160);
396 168 : tmp160 = ca_.UncheckedCast<Smi>(RegExpBuiltinsAssembler(state_).FastLoadLastIndex(compiler::TNode<JSRegExp>{tmp149}));
397 : compiler::TNode<Smi> tmp161;
398 : USE(tmp161);
399 112 : tmp161 = ca_.UncheckedCast<Smi>(RegExpBuiltinsAssembler(state_).AdvanceStringIndexFast(compiler::TNode<String>{tmp150}, compiler::TNode<Number>{tmp160}, compiler::TNode<BoolT>{tmp154}));
400 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 65);
401 168 : RegExpBuiltinsAssembler(state_).FastStoreLastIndex(compiler::TNode<JSRegExp>{tmp149}, compiler::TNode<Smi>{tmp161});
402 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 64);
403 : ca_.Goto(&block16, tmp148, tmp149, tmp150, tmp151, tmp152, tmp153, tmp154, tmp155, tmp156, tmp157, tmp158, tmp159);
404 : }
405 :
406 56 : if (block16.is_used()) {
407 : compiler::TNode<Context> tmp162;
408 : compiler::TNode<JSRegExp> tmp163;
409 : compiler::TNode<String> tmp164;
410 : compiler::TNode<String> tmp165;
411 : compiler::TNode<String> tmp166;
412 : compiler::TNode<Smi> tmp167;
413 : compiler::TNode<BoolT> tmp168;
414 : compiler::TNode<Smi> tmp169;
415 : compiler::TNode<BoolT> tmp170;
416 : compiler::TNode<RegExpMatchInfo> tmp171;
417 : compiler::TNode<Smi> tmp172;
418 : compiler::TNode<Smi> tmp173;
419 : ca_.Bind(&block16, &tmp162, &tmp163, &tmp164, &tmp165, &tmp166, &tmp167, &tmp168, &tmp169, &tmp170, &tmp171, &tmp172, &tmp173);
420 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 47);
421 : ca_.Goto(&block6, tmp162, tmp163, tmp164, tmp165, tmp166, tmp167, tmp168, tmp169, tmp170);
422 : }
423 :
424 56 : if (block5.is_used()) {
425 : compiler::TNode<Context> tmp174;
426 : compiler::TNode<JSRegExp> tmp175;
427 : compiler::TNode<String> tmp176;
428 : compiler::TNode<String> tmp177;
429 : compiler::TNode<String> tmp178;
430 : compiler::TNode<Smi> tmp179;
431 : compiler::TNode<BoolT> tmp180;
432 : compiler::TNode<Smi> tmp181;
433 : compiler::TNode<BoolT> tmp182;
434 : ca_.Bind(&block5, &tmp174, &tmp175, &tmp176, &tmp177, &tmp178, &tmp179, &tmp180, &tmp181, &tmp182);
435 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 70);
436 : compiler::TNode<Smi> tmp183;
437 : USE(tmp183);
438 168 : tmp183 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp176}));
439 : compiler::TNode<String> tmp184;
440 112 : tmp184 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kSubString, tmp174, tmp176, tmp179, tmp183));
441 : USE(tmp184);
442 : compiler::TNode<String> tmp185;
443 : USE(tmp185);
444 168 : tmp185 = ca_.UncheckedCast<String>(BaseBuiltinsFromDSLAssembler(state_).StringAdd(compiler::TNode<Context>{tmp174}, compiler::TNode<String>{tmp178}, compiler::TNode<String>{tmp184}));
445 : ca_.Goto(&block1, tmp174, tmp175, tmp176, tmp177, tmp185);
446 : }
447 :
448 56 : if (block1.is_used()) {
449 : compiler::TNode<Context> tmp186;
450 : compiler::TNode<JSRegExp> tmp187;
451 : compiler::TNode<String> tmp188;
452 : compiler::TNode<String> tmp189;
453 : compiler::TNode<String> tmp190;
454 : ca_.Bind(&block1, &tmp186, &tmp187, &tmp188, &tmp189, &tmp190);
455 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 31);
456 : ca_.Goto(&block17, tmp186, tmp187, tmp188, tmp189, tmp190);
457 : }
458 :
459 : compiler::TNode<Context> tmp191;
460 : compiler::TNode<JSRegExp> tmp192;
461 : compiler::TNode<String> tmp193;
462 : compiler::TNode<String> tmp194;
463 : compiler::TNode<String> tmp195;
464 : ca_.Bind(&block17, &tmp191, &tmp192, &tmp193, &tmp194, &tmp195);
465 112 : return compiler::TNode<String>{tmp195};
466 : }
467 :
468 224 : TF_BUILTIN(RegExpReplace, CodeStubAssembler) {
469 56 : compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state());
470 : TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
471 : USE(parameter0);
472 : compiler::TNode<JSRegExp> parameter1 = UncheckedCast<JSRegExp>(Parameter(Descriptor::kRegexp));
473 : USE(parameter1);
474 : compiler::TNode<String> parameter2 = UncheckedCast<String>(Parameter(Descriptor::kString));
475 : USE(parameter2);
476 : compiler::TNode<Object> parameter3 = UncheckedCast<Object>(Parameter(Descriptor::kReplaceValue));
477 : USE(parameter3);
478 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
479 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
480 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSReceiver> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
481 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
482 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
483 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver, String> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
484 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, JSReceiver, String> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
485 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
486 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
487 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp, JSRegExp> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
488 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
489 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String, JSRegExp> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
490 : compiler::CodeAssemblerParameterizedLabel<Context, JSRegExp, String, Object, Object, Object, JSRegExp, String> block10(&ca_, compiler::CodeAssemblerLabel::kDeferred);
491 : ca_.Goto(&block0, parameter0, parameter1, parameter2, parameter3);
492 :
493 56 : if (block0.is_used()) {
494 : compiler::TNode<Context> tmp0;
495 : compiler::TNode<JSRegExp> tmp1;
496 : compiler::TNode<String> tmp2;
497 : compiler::TNode<Object> tmp3;
498 : ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3);
499 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 80);
500 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 81);
501 : compiler::TNode<JSReceiver> tmp4;
502 : USE(tmp4);
503 56 : compiler::CodeAssemblerLabel label0(&ca_);
504 112 : tmp4 = BaseBuiltinsFromDSLAssembler(state_).Cast39UT15JSBoundFunction10JSFunction7JSProxy(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp3}, &label0);
505 : ca_.Goto(&block3, tmp0, tmp1, tmp2, tmp3, tmp3, tmp3, tmp4);
506 56 : if (label0.is_used()) {
507 56 : ca_.Bind(&label0);
508 : ca_.Goto(&block4, tmp0, tmp1, tmp2, tmp3, tmp3, tmp3);
509 : }
510 : }
511 :
512 56 : if (block4.is_used()) {
513 : compiler::TNode<Context> tmp5;
514 : compiler::TNode<JSRegExp> tmp6;
515 : compiler::TNode<String> tmp7;
516 : compiler::TNode<Object> tmp8;
517 : compiler::TNode<Object> tmp9;
518 : compiler::TNode<Object> tmp10;
519 : ca_.Bind(&block4, &tmp5, &tmp6, &tmp7, &tmp8, &tmp9, &tmp10);
520 : ca_.Goto(&block2, tmp5, tmp6, tmp7, tmp8, tmp9);
521 : }
522 :
523 56 : if (block3.is_used()) {
524 : compiler::TNode<Context> tmp11;
525 : compiler::TNode<JSRegExp> tmp12;
526 : compiler::TNode<String> tmp13;
527 : compiler::TNode<Object> tmp14;
528 : compiler::TNode<Object> tmp15;
529 : compiler::TNode<Object> tmp16;
530 : compiler::TNode<JSReceiver> tmp17;
531 : ca_.Bind(&block3, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
532 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
533 : compiler::TNode<BoolT> tmp18;
534 : USE(tmp18);
535 56 : tmp18 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).FastFlagGetterGlobal(compiler::TNode<JSRegExp>{tmp12}));
536 56 : ca_.Branch(tmp18, &block5, &block6, tmp11, tmp12, tmp13, tmp14, tmp15, tmp17);
537 : }
538 :
539 56 : if (block5.is_used()) {
540 : compiler::TNode<Context> tmp19;
541 : compiler::TNode<JSRegExp> tmp20;
542 : compiler::TNode<String> tmp21;
543 : compiler::TNode<Object> tmp22;
544 : compiler::TNode<Object> tmp23;
545 : compiler::TNode<JSReceiver> tmp24;
546 : ca_.Bind(&block5, &tmp19, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24);
547 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 83);
548 : compiler::TNode<String> tmp25;
549 : USE(tmp25);
550 168 : tmp25 = ca_.UncheckedCast<String>(RegExpBuiltinsAssembler(state_).ReplaceGlobalCallableFastPath(compiler::TNode<Context>{tmp19}, compiler::TNode<JSRegExp>{tmp20}, compiler::TNode<String>{tmp21}, compiler::TNode<JSReceiver>{tmp24}));
551 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
552 : ca_.Goto(&block8, tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25);
553 : }
554 :
555 56 : if (block6.is_used()) {
556 : compiler::TNode<Context> tmp26;
557 : compiler::TNode<JSRegExp> tmp27;
558 : compiler::TNode<String> tmp28;
559 : compiler::TNode<Object> tmp29;
560 : compiler::TNode<Object> tmp30;
561 : compiler::TNode<JSReceiver> tmp31;
562 : ca_.Bind(&block6, &tmp26, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31);
563 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 84);
564 : compiler::TNode<String> tmp32;
565 112 : tmp32 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kStringReplaceNonGlobalRegExpWithFunction, tmp26, tmp28, tmp27, tmp31));
566 : USE(tmp32);
567 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 82);
568 : ca_.Goto(&block7, tmp26, tmp27, tmp28, tmp29, tmp30, tmp31, tmp32);
569 : }
570 :
571 56 : if (block8.is_used()) {
572 : compiler::TNode<Context> tmp33;
573 : compiler::TNode<JSRegExp> tmp34;
574 : compiler::TNode<String> tmp35;
575 : compiler::TNode<Object> tmp36;
576 : compiler::TNode<Object> tmp37;
577 : compiler::TNode<JSReceiver> tmp38;
578 : compiler::TNode<String> tmp39;
579 : ca_.Bind(&block8, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39);
580 : ca_.Goto(&block7, tmp33, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39);
581 : }
582 :
583 56 : if (block7.is_used()) {
584 : compiler::TNode<Context> tmp40;
585 : compiler::TNode<JSRegExp> tmp41;
586 : compiler::TNode<String> tmp42;
587 : compiler::TNode<Object> tmp43;
588 : compiler::TNode<Object> tmp44;
589 : compiler::TNode<JSReceiver> tmp45;
590 : compiler::TNode<String> tmp46;
591 : ca_.Bind(&block7, &tmp40, &tmp41, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46);
592 112 : CodeStubAssembler(state_).Return(tmp46);
593 : }
594 :
595 56 : if (block2.is_used()) {
596 : compiler::TNode<Context> tmp47;
597 : compiler::TNode<JSRegExp> tmp48;
598 : compiler::TNode<String> tmp49;
599 : compiler::TNode<Object> tmp50;
600 : compiler::TNode<Object> tmp51;
601 : ca_.Bind(&block2, &tmp47, &tmp48, &tmp49, &tmp50, &tmp51);
602 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 86);
603 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 87);
604 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 88);
605 : compiler::TNode<String> tmp52;
606 : USE(tmp52);
607 224 : tmp52 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp47}, compiler::TNode<Object>{tmp50}));
608 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 94);
609 : compiler::TNode<JSRegExp> tmp53;
610 : USE(tmp53);
611 56 : compiler::CodeAssemblerLabel label0(&ca_);
612 112 : tmp53 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATFastJSRegExp(compiler::TNode<Context>{tmp47}, compiler::TNode<HeapObject>{tmp48}, &label0);
613 : ca_.Goto(&block11, tmp47, tmp48, tmp49, tmp50, tmp51, ca_.UncheckedCast<Object>(tmp51), tmp48, tmp52, tmp48, tmp53);
614 56 : if (label0.is_used()) {
615 56 : ca_.Bind(&label0);
616 : ca_.Goto(&block12, tmp47, tmp48, tmp49, tmp50, tmp51, ca_.UncheckedCast<Object>(tmp51), tmp48, tmp52, tmp48);
617 : }
618 : }
619 :
620 56 : if (block12.is_used()) {
621 : compiler::TNode<Context> tmp54;
622 : compiler::TNode<JSRegExp> tmp55;
623 : compiler::TNode<String> tmp56;
624 : compiler::TNode<Object> tmp57;
625 : compiler::TNode<Object> tmp58;
626 : compiler::TNode<Object> tmp59;
627 : compiler::TNode<JSRegExp> tmp60;
628 : compiler::TNode<String> tmp61;
629 : compiler::TNode<JSRegExp> tmp62;
630 : ca_.Bind(&block12, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62);
631 : ca_.Goto(&block10, tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp60, tmp61);
632 : }
633 :
634 56 : if (block11.is_used()) {
635 : compiler::TNode<Context> tmp63;
636 : compiler::TNode<JSRegExp> tmp64;
637 : compiler::TNode<String> tmp65;
638 : compiler::TNode<Object> tmp66;
639 : compiler::TNode<Object> tmp67;
640 : compiler::TNode<Object> tmp68;
641 : compiler::TNode<JSRegExp> tmp69;
642 : compiler::TNode<String> tmp70;
643 : compiler::TNode<JSRegExp> tmp71;
644 : compiler::TNode<JSRegExp> tmp72;
645 : ca_.Bind(&block11, &tmp63, &tmp64, &tmp65, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72);
646 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 96);
647 : compiler::TNode<String> tmp73;
648 : USE(tmp73);
649 112 : tmp73 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).SingleCharacterStringConstant("$"));
650 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 95);
651 : compiler::TNode<Smi> tmp74;
652 : USE(tmp74);
653 112 : tmp74 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
654 : compiler::TNode<Smi> tmp75;
655 112 : tmp75 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kStringIndexOf, tmp63, tmp70, tmp73, tmp74));
656 : USE(tmp75);
657 : compiler::TNode<Smi> tmp76;
658 : USE(tmp76);
659 112 : tmp76 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(-1));
660 : compiler::TNode<BoolT> tmp77;
661 : USE(tmp77);
662 112 : tmp77 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiNotEqual(compiler::TNode<Smi>{tmp75}, compiler::TNode<Smi>{tmp76}));
663 56 : ca_.Branch(tmp77, &block13, &block14, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp69, tmp70, tmp72);
664 : }
665 :
666 56 : if (block13.is_used()) {
667 : compiler::TNode<Context> tmp78;
668 : compiler::TNode<JSRegExp> tmp79;
669 : compiler::TNode<String> tmp80;
670 : compiler::TNode<Object> tmp81;
671 : compiler::TNode<Object> tmp82;
672 : compiler::TNode<Object> tmp83;
673 : compiler::TNode<JSRegExp> tmp84;
674 : compiler::TNode<String> tmp85;
675 : compiler::TNode<JSRegExp> tmp86;
676 : ca_.Bind(&block13, &tmp78, &tmp79, &tmp80, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86);
677 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 97);
678 : ca_.Goto(&block10, tmp78, tmp79, tmp80, tmp81, tmp82, tmp83, tmp84, tmp85);
679 : }
680 :
681 56 : if (block14.is_used()) {
682 : compiler::TNode<Context> tmp87;
683 : compiler::TNode<JSRegExp> tmp88;
684 : compiler::TNode<String> tmp89;
685 : compiler::TNode<Object> tmp90;
686 : compiler::TNode<Object> tmp91;
687 : compiler::TNode<Object> tmp92;
688 : compiler::TNode<JSRegExp> tmp93;
689 : compiler::TNode<String> tmp94;
690 : compiler::TNode<JSRegExp> tmp95;
691 : ca_.Bind(&block14, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91, &tmp92, &tmp93, &tmp94, &tmp95);
692 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 100);
693 : compiler::TNode<String> tmp96;
694 : USE(tmp96);
695 112 : tmp96 = ca_.UncheckedCast<String>(RegexpReplaceBuiltinsFromDSLAssembler(state_).RegExpReplaceFastString(compiler::TNode<Context>{tmp87}, compiler::TNode<JSRegExp>{tmp95}, compiler::TNode<String>{tmp89}, compiler::TNode<String>{tmp94}));
696 112 : CodeStubAssembler(state_).Return(tmp96);
697 : }
698 :
699 56 : if (block10.is_used()) {
700 : compiler::TNode<Context> tmp97;
701 : compiler::TNode<JSRegExp> tmp98;
702 : compiler::TNode<String> tmp99;
703 : compiler::TNode<Object> tmp100;
704 : compiler::TNode<Object> tmp101;
705 : compiler::TNode<Object> tmp102;
706 : compiler::TNode<JSRegExp> tmp103;
707 : compiler::TNode<String> tmp104;
708 : ca_.Bind(&block10, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104);
709 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 103);
710 : compiler::TNode<String> tmp105;
711 112 : tmp105 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kRegExpReplaceRT, tmp97, tmp103, tmp99, tmp104));
712 : USE(tmp105);
713 112 : CodeStubAssembler(state_).Return(tmp105);
714 : }
715 56 : }
716 :
717 224 : TF_BUILTIN(RegExpPrototypeReplace, CodeStubAssembler) {
718 56 : compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state());
719 : TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
720 : USE(parameter0);
721 : Node* argc = Parameter(Descriptor::kJSActualArgumentsCount);
722 56 : TNode<IntPtrT> arguments_length(ChangeInt32ToIntPtr(argc));
723 56 : TNode<RawPtrT> arguments_frame = UncheckedCast<RawPtrT>(LoadFramePointer());
724 56 : BaseBuiltinsFromDSLAssembler::Arguments torque_arguments(GetFrameArguments(arguments_frame, arguments_length));
725 : CodeStubArguments arguments(this, torque_arguments);
726 56 : TNode<Object> parameter1 = arguments.GetReceiver();
727 : USE(parameter1);
728 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
729 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, Object> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
730 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, Object, JSReceiver> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
731 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
732 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
733 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String, JSReceiver> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
734 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String, JSReceiver, JSRegExp> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
735 : compiler::CodeAssemblerParameterizedLabel<Context, Object, RawPtrT, RawPtrT, IntPtrT, Object, Object, JSReceiver, String> block6(&ca_, compiler::CodeAssemblerLabel::kDeferred);
736 : ca_.Goto(&block0, parameter0, parameter1, torque_arguments.frame, torque_arguments.base, torque_arguments.length);
737 :
738 56 : if (block0.is_used()) {
739 : compiler::TNode<Context> tmp0;
740 : compiler::TNode<Object> tmp1;
741 : compiler::TNode<RawPtrT> tmp2;
742 : compiler::TNode<RawPtrT> tmp3;
743 : compiler::TNode<IntPtrT> tmp4;
744 : ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3, &tmp4);
745 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 131);
746 : compiler::TNode<IntPtrT> tmp5;
747 : USE(tmp5);
748 112 : tmp5 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(0));
749 : compiler::TNode<Object> tmp6;
750 : USE(tmp6);
751 112 : tmp6 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(BaseBuiltinsFromDSLAssembler::Arguments{compiler::TNode<RawPtrT>{tmp2}, compiler::TNode<RawPtrT>{tmp3}, compiler::TNode<IntPtrT>{tmp4}}, compiler::TNode<IntPtrT>{tmp5}));
752 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 132);
753 : compiler::TNode<IntPtrT> tmp7;
754 : USE(tmp7);
755 112 : tmp7 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
756 : compiler::TNode<Object> tmp8;
757 : USE(tmp8);
758 112 : tmp8 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(BaseBuiltinsFromDSLAssembler::Arguments{compiler::TNode<RawPtrT>{tmp2}, compiler::TNode<RawPtrT>{tmp3}, compiler::TNode<IntPtrT>{tmp4}}, compiler::TNode<IntPtrT>{tmp7}));
759 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 136);
760 : compiler::TNode<JSReceiver> tmp9;
761 : USE(tmp9);
762 56 : compiler::CodeAssemblerLabel label0(&ca_);
763 112 : tmp9 = BaseBuiltinsFromDSLAssembler(state_).Cast10JSReceiver(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}, &label0);
764 : ca_.Goto(&block3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp6, tmp8, tmp1, tmp9);
765 56 : if (label0.is_used()) {
766 56 : ca_.Bind(&label0);
767 : ca_.Goto(&block4, tmp0, tmp1, tmp2, tmp3, tmp4, tmp6, tmp8, tmp1);
768 : }
769 : }
770 :
771 56 : if (block4.is_used()) {
772 : compiler::TNode<Context> tmp10;
773 : compiler::TNode<Object> tmp11;
774 : compiler::TNode<RawPtrT> tmp12;
775 : compiler::TNode<RawPtrT> tmp13;
776 : compiler::TNode<IntPtrT> tmp14;
777 : compiler::TNode<Object> tmp15;
778 : compiler::TNode<Object> tmp16;
779 : compiler::TNode<Object> tmp17;
780 : ca_.Bind(&block4, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15, &tmp16, &tmp17);
781 : ca_.Goto(&block2, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16);
782 : }
783 :
784 56 : if (block3.is_used()) {
785 : compiler::TNode<Context> tmp18;
786 : compiler::TNode<Object> tmp19;
787 : compiler::TNode<RawPtrT> tmp20;
788 : compiler::TNode<RawPtrT> tmp21;
789 : compiler::TNode<IntPtrT> tmp22;
790 : compiler::TNode<Object> tmp23;
791 : compiler::TNode<Object> tmp24;
792 : compiler::TNode<Object> tmp25;
793 : compiler::TNode<JSReceiver> tmp26;
794 : ca_.Bind(&block3, &tmp18, &tmp19, &tmp20, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25, &tmp26);
795 : ca_.Goto(&block1, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp26);
796 : }
797 :
798 56 : if (block2.is_used()) {
799 : compiler::TNode<Context> tmp27;
800 : compiler::TNode<Object> tmp28;
801 : compiler::TNode<RawPtrT> tmp29;
802 : compiler::TNode<RawPtrT> tmp30;
803 : compiler::TNode<IntPtrT> tmp31;
804 : compiler::TNode<Object> tmp32;
805 : compiler::TNode<Object> tmp33;
806 : ca_.Bind(&block2, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31, &tmp32, &tmp33);
807 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 137);
808 112 : CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp27}, MessageTemplate::kIncompatibleMethodReceiver, "RegExp.prototype.@@replace");
809 : }
810 :
811 56 : if (block1.is_used()) {
812 : compiler::TNode<Context> tmp34;
813 : compiler::TNode<Object> tmp35;
814 : compiler::TNode<RawPtrT> tmp36;
815 : compiler::TNode<RawPtrT> tmp37;
816 : compiler::TNode<IntPtrT> tmp38;
817 : compiler::TNode<Object> tmp39;
818 : compiler::TNode<Object> tmp40;
819 : compiler::TNode<JSReceiver> tmp41;
820 : ca_.Bind(&block1, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39, &tmp40, &tmp41);
821 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 140);
822 : compiler::TNode<String> tmp42;
823 : USE(tmp42);
824 224 : tmp42 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp34}, compiler::TNode<Object>{tmp39}));
825 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 144);
826 : compiler::TNode<JSRegExp> tmp43;
827 : USE(tmp43);
828 56 : compiler::CodeAssemblerLabel label0(&ca_);
829 112 : tmp43 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATFastJSRegExp(compiler::TNode<Context>{tmp34}, compiler::TNode<HeapObject>{tmp41}, &label0);
830 : ca_.Goto(&block7, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp41, tmp43);
831 56 : if (label0.is_used()) {
832 56 : ca_.Bind(&label0);
833 : ca_.Goto(&block8, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp41);
834 : }
835 : }
836 :
837 56 : if (block8.is_used()) {
838 : compiler::TNode<Context> tmp44;
839 : compiler::TNode<Object> tmp45;
840 : compiler::TNode<RawPtrT> tmp46;
841 : compiler::TNode<RawPtrT> tmp47;
842 : compiler::TNode<IntPtrT> tmp48;
843 : compiler::TNode<Object> tmp49;
844 : compiler::TNode<Object> tmp50;
845 : compiler::TNode<JSReceiver> tmp51;
846 : compiler::TNode<String> tmp52;
847 : compiler::TNode<JSReceiver> tmp53;
848 : ca_.Bind(&block8, &tmp44, &tmp45, &tmp46, &tmp47, &tmp48, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53);
849 : ca_.Goto(&block6, tmp44, tmp45, tmp46, tmp47, tmp48, tmp49, tmp50, tmp51, tmp52);
850 : }
851 :
852 56 : if (block7.is_used()) {
853 : compiler::TNode<Context> tmp54;
854 : compiler::TNode<Object> tmp55;
855 : compiler::TNode<RawPtrT> tmp56;
856 : compiler::TNode<RawPtrT> tmp57;
857 : compiler::TNode<IntPtrT> tmp58;
858 : compiler::TNode<Object> tmp59;
859 : compiler::TNode<Object> tmp60;
860 : compiler::TNode<JSReceiver> tmp61;
861 : compiler::TNode<String> tmp62;
862 : compiler::TNode<JSReceiver> tmp63;
863 : compiler::TNode<JSRegExp> tmp64;
864 : ca_.Bind(&block7, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64);
865 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 145);
866 : compiler::TNode<String> tmp65;
867 112 : tmp65 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kRegExpReplace, tmp54, tmp64, tmp62, tmp60));
868 : USE(tmp65);
869 56 : arguments.PopAndReturn(tmp65);
870 : }
871 :
872 56 : if (block6.is_used()) {
873 : compiler::TNode<Context> tmp66;
874 : compiler::TNode<Object> tmp67;
875 : compiler::TNode<RawPtrT> tmp68;
876 : compiler::TNode<RawPtrT> tmp69;
877 : compiler::TNode<IntPtrT> tmp70;
878 : compiler::TNode<Object> tmp71;
879 : compiler::TNode<Object> tmp72;
880 : compiler::TNode<JSReceiver> tmp73;
881 : compiler::TNode<String> tmp74;
882 : ca_.Bind(&block6, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72, &tmp73, &tmp74);
883 56 : ca_.SetSourcePosition("../../src/builtins/regexp-replace.tq", 148);
884 : compiler::TNode<String> tmp75;
885 112 : tmp75 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kRegExpReplaceRT, tmp66, tmp73, tmp74, tmp72));
886 : USE(tmp75);
887 56 : arguments.PopAndReturn(tmp75);
888 : }
889 56 : }
890 :
891 : } // namespace internal
892 59456 : } // namespace v8
893 :
|