Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ EmitFragment()

void System.Text.RegularExpressions.RegexWriter.EmitFragment ( int nodetype,
RegexNode node,
int curIndex )
inlineprivate

Definition at line 180 of file RegexWriter.cs.

181 {
182 int num = 0;
183 if (node.UseOptionR())
184 {
185 num |= 0x40;
186 }
187 if ((node.Options & RegexOptions.IgnoreCase) != 0)
188 {
189 num |= 0x200;
190 }
191 switch (nodetype)
192 {
193 case 88:
194 if (curIndex < node.ChildCount() - 1)
195 {
196 _intStack.Append(_emitted.Length);
197 Emit(23, 0);
198 }
199 break;
200 case 152:
201 if (curIndex < node.ChildCount() - 1)
202 {
203 int offset = _intStack.Pop();
204 _intStack.Append(_emitted.Length);
205 Emit(38, 0);
206 PatchJump(offset, _emitted.Length);
207 }
208 else
209 {
210 for (int i = 0; i < curIndex; i++)
211 {
212 PatchJump(_intStack.Pop(), _emitted.Length);
213 }
214 }
215 break;
216 case 97:
217 if (curIndex == 0)
218 {
219 Emit(34);
220 _intStack.Append(_emitted.Length);
221 Emit(23, 0);
222 Emit(37, MapCapnum(node.M));
223 Emit(36);
224 }
225 break;
226 case 161:
227 switch (curIndex)
228 {
229 case 0:
230 {
231 int offset3 = _intStack.Pop();
232 _intStack.Append(_emitted.Length);
233 Emit(38, 0);
234 PatchJump(offset3, _emitted.Length);
235 Emit(36);
236 if (node.ChildCount() > 1)
237 {
238 break;
239 }
240 goto case 1;
241 }
242 case 1:
243 PatchJump(_intStack.Pop(), _emitted.Length);
244 break;
245 }
246 break;
247 case 98:
248 if (curIndex == 0)
249 {
250 Emit(34);
251 Emit(31);
252 _intStack.Append(_emitted.Length);
253 Emit(23, 0);
254 }
255 break;
256 case 162:
257 switch (curIndex)
258 {
259 case 0:
260 Emit(33);
261 Emit(36);
262 break;
263 case 1:
264 {
265 int offset2 = _intStack.Pop();
266 _intStack.Append(_emitted.Length);
267 Emit(38, 0);
268 PatchJump(offset2, _emitted.Length);
269 Emit(33);
270 Emit(36);
271 if (node.ChildCount() > 2)
272 {
273 break;
274 }
275 goto case 2;
276 }
277 case 2:
278 PatchJump(_intStack.Pop(), _emitted.Length);
279 break;
280 }
281 break;
282 case 90:
283 case 91:
284 if (node.N < int.MaxValue || node.M > 1)
285 {
286 Emit((node.M == 0) ? 26 : 27, (node.M != 0) ? (1 - node.M) : 0);
287 }
288 else
289 {
290 Emit((node.M == 0) ? 30 : 31);
291 }
292 if (node.M == 0)
293 {
294 _intStack.Append(_emitted.Length);
295 Emit(38, 0);
296 }
297 _intStack.Append(_emitted.Length);
298 break;
299 case 154:
300 case 155:
301 {
302 int length = _emitted.Length;
303 int num2 = nodetype - 154;
304 if (node.N < int.MaxValue || node.M > 1)
305 {
306 Emit(28 + num2, _intStack.Pop(), (node.N == int.MaxValue) ? int.MaxValue : (node.N - node.M));
307 }
308 else
309 {
310 Emit(24 + num2, _intStack.Pop());
311 }
312 if (node.M == 0)
313 {
314 PatchJump(_intStack.Pop(), length);
315 }
316 break;
317 }
318 case 92:
319 Emit(31);
320 break;
321 case 156:
322 Emit(32, MapCapnum(node.M), MapCapnum(node.N));
323 break;
324 case 94:
325 Emit(34);
326 Emit(31);
327 break;
328 case 158:
329 Emit(33);
330 Emit(36);
331 break;
332 case 95:
333 Emit(34);
334 _intStack.Append(_emitted.Length);
335 Emit(23, 0);
336 break;
337 case 159:
338 Emit(35);
339 PatchJump(_intStack.Pop(), _emitted.Length);
340 Emit(36);
341 break;
342 case 96:
343 Emit(34);
344 break;
345 case 160:
346 Emit(36);
347 break;
348 case 9:
349 case 10:
350 Emit(node.Type | num, node.Ch);
351 break;
352 case 3:
353 case 4:
354 case 6:
355 case 7:
356 case 43:
357 case 44:
358 if (node.M > 0)
359 {
360 Emit(((node.Type != 3 && node.Type != 43 && node.Type != 6) ? 1 : 0) | num, node.Ch, node.M);
361 }
362 if (node.N > node.M)
363 {
364 Emit(node.Type | num, node.Ch, (node.N == int.MaxValue) ? int.MaxValue : (node.N - node.M));
365 }
366 break;
367 case 5:
368 case 8:
369 case 45:
370 {
371 int opd = StringCode(node.Str);
372 if (node.M > 0)
373 {
374 Emit(2 | num, opd, node.M);
375 }
376 if (node.N > node.M)
377 {
378 Emit(node.Type | num, opd, (node.N == int.MaxValue) ? int.MaxValue : (node.N - node.M));
379 }
380 break;
381 }
382 case 12:
383 Emit(node.Type | num, StringCode(node.Str));
384 break;
385 case 11:
386 Emit(node.Type | num, StringCode(node.Str));
387 break;
388 case 13:
389 Emit(node.Type | num, MapCapnum(node.M));
390 break;
391 case 14:
392 case 15:
393 case 16:
394 case 17:
395 case 18:
396 case 19:
397 case 20:
398 case 21:
399 case 22:
400 case 41:
401 case 42:
402 case 46:
403 Emit(node.Type);
404 break;
405 default:
407 case 23:
408 case 89:
409 case 93:
410 case 153:
411 case 157:
412 break;
413 }
414 }
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string UnexpectedOpcode
Definition SR.cs:94
Definition SR.cs:7
System.Collections.Generic.ValueListBuilder< int > _intStack
System.Collections.Generic.ValueListBuilder< int > _emitted
void PatchJump(int offset, int jumpDest)

References System.Text.RegularExpressions.RegexWriter._emitted, System.Text.RegularExpressions.RegexWriter._intStack, System.Text.RegularExpressions.RegexWriter.Emit(), System.SR.Format(), System.Text.RegularExpressions.i, System.Text.RegularExpressions.length, System.Text.RegularExpressions.RegexWriter.MapCapnum(), System.offset, System.Text.RegularExpressions.RegexWriter.PatchJump(), System.Text.RegularExpressions.RegexWriter.StringCode(), and System.SR.UnexpectedOpcode.

Referenced by System.Text.RegularExpressions.RegexWriter.RegexCodeFromRegexTree().