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