This commit is contained in:
niko
2026-06-04 11:42:34 +02:00
parent f39ba70a9f
commit e720b98cd1
7488 changed files with 2493818 additions and 0 deletions
@@ -0,0 +1,3207 @@
using System;
using System.Globalization;
namespace System.Text.RegularExpressions
{
// Token: 0x020002B6 RID: 694
internal sealed class RxInterpreter : BaseMachine
{
// Token: 0x06001971 RID: 6513 RVA: 0x00056B9C File Offset: 0x00054D9C
public RxInterpreter(byte[] program, EvalDelegate eval_del)
{
this.program = program;
this.eval_del = eval_del;
this.group_count = 1 + ((int)program[1] | ((int)program[2] << 8));
this.groups = new int[this.group_count];
this.stack = default(RxInterpreter.IntStack);
this.ResetGroups();
}
// Token: 0x06001973 RID: 6515 RVA: 0x00056BF8 File Offset: 0x00054DF8
private static int ReadInt(byte[] code, int pc)
{
int num = (int)code[pc];
num |= (int)code[pc + 1] << 8;
num |= (int)code[pc + 2] << 16;
return num | ((int)code[pc + 3] << 24);
}
// Token: 0x06001974 RID: 6516 RVA: 0x00056C2C File Offset: 0x00054E2C
public override Match Scan(Regex regex, string text, int start, int end)
{
this.str = text;
this.string_start = start;
this.string_end = end;
int num = 0;
bool flag;
if (this.eval_del != null)
{
flag = this.eval_del(this, start, ref num);
}
else
{
flag = this.EvalByteCode(11, start, ref num);
}
this.marks[this.groups[0]].End = num;
if (flag)
{
return this.GenerateMatch(regex);
}
return Match.Empty;
}
// Token: 0x06001975 RID: 6517 RVA: 0x00056CAC File Offset: 0x00054EAC
private void Open(int gid, int ptr)
{
int num = this.groups[gid];
if (num < this.mark_start || this.marks[num].IsDefined)
{
num = this.CreateMark(num);
this.groups[gid] = num;
}
this.marks[num].Start = ptr;
}
// Token: 0x06001976 RID: 6518 RVA: 0x00056D08 File Offset: 0x00054F08
private void Close(int gid, int ptr)
{
this.marks[this.groups[gid]].End = ptr;
}
// Token: 0x06001977 RID: 6519 RVA: 0x00056D24 File Offset: 0x00054F24
private bool Balance(int gid, int balance_gid, bool capture, int ptr)
{
int num = this.groups[balance_gid];
if (num == -1 || this.marks[num].Index < 0)
{
return false;
}
if (gid > 0 && capture)
{
this.Open(gid, this.marks[num].Index + this.marks[num].Length);
this.Close(gid, ptr);
}
this.groups[balance_gid] = this.marks[num].Previous;
return true;
}
// Token: 0x06001978 RID: 6520 RVA: 0x00056DB4 File Offset: 0x00054FB4
private int Checkpoint()
{
this.mark_start = this.mark_end;
return this.mark_start;
}
// Token: 0x06001979 RID: 6521 RVA: 0x00056DC8 File Offset: 0x00054FC8
private void Backtrack(int cp)
{
for (int i = 0; i < this.groups.Length; i++)
{
int num = this.groups[i];
while (cp <= num)
{
num = this.marks[num].Previous;
}
this.groups[i] = num;
}
}
// Token: 0x0600197A RID: 6522 RVA: 0x00056E20 File Offset: 0x00055020
private void ResetGroups()
{
int num = this.groups.Length;
if (this.marks == null)
{
this.marks = new Mark[num];
}
for (int i = 0; i < num; i++)
{
this.groups[i] = i;
this.marks[i].Start = -1;
this.marks[i].End = -1;
this.marks[i].Previous = -1;
}
this.mark_start = 0;
this.mark_end = num;
}
// Token: 0x0600197B RID: 6523 RVA: 0x00056EAC File Offset: 0x000550AC
private int GetLastDefined(int gid)
{
int num = this.groups[gid];
while (num >= 0 && !this.marks[num].IsDefined)
{
num = this.marks[num].Previous;
}
return num;
}
// Token: 0x0600197C RID: 6524 RVA: 0x00056EF8 File Offset: 0x000550F8
private int CreateMark(int previous)
{
if (this.mark_end == this.marks.Length)
{
Mark[] array = new Mark[this.marks.Length * 2];
this.marks.CopyTo(array, 0);
this.marks = array;
}
int num = this.mark_end++;
this.marks[num].Start = (this.marks[num].End = -1);
this.marks[num].Previous = previous;
return num;
}
// Token: 0x0600197D RID: 6525 RVA: 0x00056F88 File Offset: 0x00055188
private void GetGroupInfo(int gid, out int first_mark_index, out int n_caps)
{
first_mark_index = -1;
n_caps = 0;
for (int i = this.groups[gid]; i >= 0; i = this.marks[i].Previous)
{
if (this.marks[i].IsDefined)
{
if (first_mark_index < 0)
{
first_mark_index = i;
}
n_caps++;
}
}
}
// Token: 0x0600197E RID: 6526 RVA: 0x00056FF0 File Offset: 0x000551F0
private void PopulateGroup(Group g, int first_mark_index, int n_caps)
{
int num = 1;
for (int i = this.marks[first_mark_index].Previous; i >= 0; i = this.marks[i].Previous)
{
if (this.marks[i].IsDefined)
{
Capture capture = new Capture(this.str, this.marks[i].Index, this.marks[i].Length);
g.Captures.SetValue(capture, n_caps - 1 - num);
num++;
}
}
}
// Token: 0x0600197F RID: 6527 RVA: 0x00057090 File Offset: 0x00055290
private Match GenerateMatch(Regex regex)
{
int num;
int num2;
this.GetGroupInfo(0, out num, out num2);
if (!this.needs_groups_or_captures)
{
return new Match(regex, this, this.str, this.string_end, 0, this.marks[num].Index, this.marks[num].Length);
}
Match match = new Match(regex, this, this.str, this.string_end, this.groups.Length, this.marks[num].Index, this.marks[num].Length, num2);
this.PopulateGroup(match, num, num2);
for (int i = 1; i < this.groups.Length; i++)
{
this.GetGroupInfo(i, out num, out num2);
Group group;
if (num < 0)
{
group = Group.Fail;
}
else
{
group = new Group(this.str, this.marks[num].Index, this.marks[num].Length, num2);
this.PopulateGroup(group, num, num2);
}
match.Groups.SetValue(group, i);
}
return match;
}
// Token: 0x06001980 RID: 6528 RVA: 0x000571B4 File Offset: 0x000553B4
internal void SetStartOfMatch(int pos)
{
this.marks[this.groups[0]].Start = pos;
}
// Token: 0x06001981 RID: 6529 RVA: 0x000571D0 File Offset: 0x000553D0
private static bool IsWordChar(char c)
{
return char.IsLetterOrDigit(c) || char.GetUnicodeCategory(c) == UnicodeCategory.ConnectorPunctuation;
}
// Token: 0x06001982 RID: 6530 RVA: 0x000571EC File Offset: 0x000553EC
private bool EvalByteCode(int pc, int strpos, ref int strpos_result)
{
int num = 0;
int i;
int j;
int num2;
int num33;
for (;;)
{
if (RxInterpreter.trace_rx)
{
Console.WriteLine("evaluating: {0} at pc: {1}, strpos: {2}, cge: {3}", new object[]
{
(RxOp)this.program[pc],
pc,
strpos,
num
});
}
switch (this.program[pc])
{
case 1:
return false;
case 2:
if (num != 0)
{
pc = num;
num = 0;
continue;
}
goto IL_2DF;
case 3:
pc++;
continue;
case 4:
if (strpos != 0)
{
return false;
}
pc++;
continue;
case 5:
if (strpos == 0 || this.str[strpos - 1] == '\n')
{
pc++;
continue;
}
return false;
case 6:
if (strpos != this.string_start)
{
return false;
}
pc++;
continue;
case 7:
if (strpos != this.string_end)
{
return false;
}
pc++;
continue;
case 8:
if (strpos == this.string_end || this.str[strpos] == '\n')
{
pc++;
continue;
}
return false;
case 9:
if (strpos == this.string_end || (strpos == this.string_end - 1 && this.str[strpos] == '\n'))
{
pc++;
continue;
}
return false;
case 10:
if (this.string_end == 0)
{
return false;
}
if (strpos == 0)
{
if (RxInterpreter.IsWordChar(this.str[strpos]))
{
pc++;
continue;
}
return false;
}
else if (strpos == this.string_end)
{
if (RxInterpreter.IsWordChar(this.str[strpos - 1]))
{
pc++;
continue;
}
return false;
}
else
{
if (RxInterpreter.IsWordChar(this.str[strpos]) != RxInterpreter.IsWordChar(this.str[strpos - 1]))
{
pc++;
continue;
}
return false;
}
break;
case 11:
if (this.string_end == 0)
{
return false;
}
if (strpos == 0)
{
if (!RxInterpreter.IsWordChar(this.str[strpos]))
{
pc++;
continue;
}
return false;
}
else if (strpos == this.string_end)
{
if (!RxInterpreter.IsWordChar(this.str[strpos - 1]))
{
pc++;
continue;
}
return false;
}
else
{
if (RxInterpreter.IsWordChar(this.str[strpos]) == RxInterpreter.IsWordChar(this.str[strpos - 1]))
{
pc++;
continue;
}
return false;
}
break;
case 12:
i = pc + 2;
j = (int)this.program[pc + 1];
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j;
while (i < num2)
{
if (this.str[strpos] != (char)this.program[i])
{
return false;
}
strpos++;
i++;
}
pc = num2;
continue;
case 13:
i = pc + 2;
j = (int)this.program[pc + 1];
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j;
while (i < num2)
{
if (this.str[strpos] != (char)this.program[i] && char.ToLower(this.str[strpos]) != (char)this.program[i])
{
return false;
}
strpos++;
i++;
}
pc = num2;
continue;
case 14:
{
i = pc + 2;
j = (int)this.program[pc + 1];
if (strpos < j)
{
return false;
}
int num3 = strpos - j;
num2 = i + j;
while (i < num2)
{
if (this.str[num3] != (char)this.program[i])
{
return false;
}
i++;
num3++;
}
strpos -= j;
pc = num2;
continue;
}
case 15:
{
i = pc + 2;
j = (int)this.program[pc + 1];
if (strpos < j)
{
return false;
}
int num4 = strpos - j;
num2 = i + j;
while (i < num2)
{
if (this.str[num4] != (char)this.program[i] && char.ToLower(this.str[num4]) != (char)this.program[i])
{
return false;
}
i++;
num4++;
}
strpos -= j;
pc = num2;
continue;
}
case 16:
i = pc + 3;
j = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j * 2;
while (i < num2)
{
int num5 = (int)this.program[i] | ((int)this.program[i + 1] << 8);
if ((int)this.str[strpos] != num5)
{
return false;
}
strpos++;
i += 2;
}
pc = num2;
continue;
case 17:
i = pc + 3;
j = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j * 2;
while (i < num2)
{
int num6 = (int)this.program[i] | ((int)this.program[i + 1] << 8);
if ((int)this.str[strpos] != num6 && (int)char.ToLower(this.str[strpos]) != num6)
{
return false;
}
strpos++;
i += 2;
}
pc = num2;
continue;
case 18:
{
i = pc + 3;
j = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
if (strpos < j)
{
return false;
}
int num7 = strpos - j;
num2 = i + j * 2;
while (i < num2)
{
int num8 = (int)this.program[i] | ((int)this.program[i + 1] << 8);
if ((int)this.str[num7] != num8)
{
return false;
}
i += 2;
num7 += 2;
}
strpos -= j;
pc = num2;
continue;
}
case 19:
{
i = pc + 3;
j = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
if (strpos < j)
{
return false;
}
int num9 = strpos - j;
num2 = i + j * 2;
while (i < num2)
{
int num10 = (int)this.program[i] | ((int)this.program[i + 1] << 8);
if ((int)this.str[num9] != num10 && (int)char.ToLower(this.str[num9]) != num10)
{
return false;
}
i += 2;
num9 += 2;
}
strpos -= j;
pc = num2;
continue;
}
case 20:
if (strpos < this.string_end)
{
char c = this.str[strpos];
if (c == (char)this.program[pc + 1])
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 21:
{
if (strpos >= this.string_end)
{
return false;
}
char c2 = this.str[strpos];
if (c2 != (char)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 22:
if (strpos < this.string_end)
{
char c3 = char.ToLower(this.str[strpos]);
if (c3 == (char)this.program[pc + 1])
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 23:
{
if (strpos >= this.string_end)
{
return false;
}
char c4 = char.ToLower(this.str[strpos]);
if (c4 != (char)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 24:
if (strpos > 0)
{
char c5 = this.str[strpos - 1];
if (c5 == (char)this.program[pc + 1])
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 25:
{
if (strpos <= 0)
{
return false;
}
char c6 = this.str[strpos - 1];
if (c6 != (char)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 26:
if (strpos > 0)
{
char c7 = char.ToLower(this.str[strpos - 1]);
if (c7 == (char)this.program[pc + 1])
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 27:
{
if (strpos <= 0)
{
return false;
}
char c8 = char.ToLower(this.str[strpos - 1]);
if (c8 != (char)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 28:
if (strpos < this.string_end)
{
char c9 = this.str[strpos];
if (c9 >= (char)this.program[pc + 1] && c9 <= (char)this.program[pc + 2])
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 29:
{
if (strpos >= this.string_end)
{
return false;
}
char c10 = this.str[strpos];
if (c10 < (char)this.program[pc + 1] || c10 > (char)this.program[pc + 2])
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 30:
if (strpos < this.string_end)
{
char c11 = char.ToLower(this.str[strpos]);
if (c11 >= (char)this.program[pc + 1] && c11 <= (char)this.program[pc + 2])
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 31:
{
if (strpos >= this.string_end)
{
return false;
}
char c12 = char.ToLower(this.str[strpos]);
if (c12 < (char)this.program[pc + 1] || c12 > (char)this.program[pc + 2])
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 32:
if (strpos > 0)
{
char c13 = this.str[strpos - 1];
if (c13 >= (char)this.program[pc + 1] && c13 <= (char)this.program[pc + 2])
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 33:
{
if (strpos <= 0)
{
return false;
}
char c14 = this.str[strpos - 1];
if (c14 < (char)this.program[pc + 1] || c14 > (char)this.program[pc + 2])
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 34:
if (strpos > 0)
{
char c15 = char.ToLower(this.str[strpos - 1]);
if (c15 >= (char)this.program[pc + 1] && c15 <= (char)this.program[pc + 2])
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 35:
{
if (strpos <= 0)
{
return false;
}
char c16 = char.ToLower(this.str[strpos - 1]);
if (c16 < (char)this.program[pc + 1] || c16 > (char)this.program[pc + 2])
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 36:
if (strpos < this.string_end)
{
char c17 = this.str[strpos];
int num11 = (int)c17;
num11 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num11 >= 0 && num11 < j << 3 && ((int)this.program[pc + 3 + (num11 >> 3)] & (1 << (num11 & 7))) != 0)
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
}
}
if (num == 0)
{
return false;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
case 37:
{
if (strpos >= this.string_end)
{
return false;
}
char c18 = this.str[strpos];
int num12 = (int)c18;
num12 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num12 < 0 || num12 >= j << 3 || ((int)this.program[pc + 3 + (num12 >> 3)] & (1 << (num12 & 7))) == 0)
{
pc += (int)(3 + this.program[pc + 2]);
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 38:
if (strpos < this.string_end)
{
char c19 = char.ToLower(this.str[strpos]);
int num13 = (int)c19;
num13 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num13 >= 0 && num13 < j << 3 && ((int)this.program[pc + 3 + (num13 >> 3)] & (1 << (num13 & 7))) != 0)
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
}
}
if (num == 0)
{
return false;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
case 39:
{
if (strpos >= this.string_end)
{
return false;
}
char c20 = char.ToLower(this.str[strpos]);
int num14 = (int)c20;
num14 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num14 < 0 || num14 >= j << 3 || ((int)this.program[pc + 3 + (num14 >> 3)] & (1 << (num14 & 7))) == 0)
{
pc += (int)(3 + this.program[pc + 2]);
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 40:
if (strpos > 0)
{
char c21 = this.str[strpos - 1];
int num15 = (int)c21;
num15 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num15 >= 0 && num15 < j << 3 && ((int)this.program[pc + 3 + (num15 >> 3)] & (1 << (num15 & 7))) != 0)
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
}
}
if (num == 0)
{
return false;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
case 41:
{
if (strpos <= 0)
{
return false;
}
char c22 = this.str[strpos - 1];
int num16 = (int)c22;
num16 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num16 < 0 || num16 >= j << 3 || ((int)this.program[pc + 3 + (num16 >> 3)] & (1 << (num16 & 7))) == 0)
{
pc += (int)(3 + this.program[pc + 2]);
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 42:
if (strpos > 0)
{
char c23 = char.ToLower(this.str[strpos - 1]);
int num17 = (int)c23;
num17 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num17 >= 0 && num17 < j << 3 && ((int)this.program[pc + 3 + (num17 >> 3)] & (1 << (num17 & 7))) != 0)
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
}
}
if (num == 0)
{
return false;
}
pc += (int)(3 + this.program[pc + 2]);
continue;
case 43:
{
if (strpos <= 0)
{
return false;
}
char c24 = char.ToLower(this.str[strpos - 1]);
int num18 = (int)c24;
num18 -= (int)this.program[pc + 1];
j = (int)this.program[pc + 2];
if (num18 < 0 || num18 >= j << 3 || ((int)this.program[pc + 3 + (num18 >> 3)] & (1 << (num18 & 7))) == 0)
{
pc += (int)(3 + this.program[pc + 2]);
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 44:
if (strpos < this.string_end)
{
char c25 = this.str[strpos];
if ((int)c25 == ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 45:
{
if (strpos >= this.string_end)
{
return false;
}
char c26 = this.str[strpos];
if ((int)c26 != ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 46:
if (strpos < this.string_end)
{
char c27 = char.ToLower(this.str[strpos]);
if ((int)c27 == ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 47:
{
if (strpos >= this.string_end)
{
return false;
}
char c28 = char.ToLower(this.str[strpos]);
if ((int)c28 != ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 48:
if (strpos > 0)
{
char c29 = this.str[strpos - 1];
if ((int)c29 == ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 49:
{
if (strpos <= 0)
{
return false;
}
char c30 = this.str[strpos - 1];
if ((int)c30 != ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 50:
if (strpos > 0)
{
char c31 = char.ToLower(this.str[strpos - 1]);
if ((int)c31 == ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 3;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 3;
continue;
case 51:
{
if (strpos <= 0)
{
return false;
}
char c32 = char.ToLower(this.str[strpos - 1]);
if ((int)c32 != ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)))
{
pc += 3;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 52:
if (strpos < this.string_end)
{
char c33 = this.str[strpos];
if ((int)c33 >= ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) && (int)c33 <= ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5;
continue;
case 53:
{
if (strpos >= this.string_end)
{
return false;
}
char c34 = this.str[strpos];
if ((int)c34 < ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) || (int)c34 > ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
pc += 5;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 54:
if (strpos < this.string_end)
{
char c35 = char.ToLower(this.str[strpos]);
if ((int)c35 >= ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) && (int)c35 <= ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5;
continue;
case 55:
{
if (strpos >= this.string_end)
{
return false;
}
char c36 = char.ToLower(this.str[strpos]);
if ((int)c36 < ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) || (int)c36 > ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
pc += 5;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 56:
if (strpos > 0)
{
char c37 = this.str[strpos - 1];
if ((int)c37 >= ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) && (int)c37 <= ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5;
continue;
case 57:
{
if (strpos <= 0)
{
return false;
}
char c38 = this.str[strpos - 1];
if ((int)c38 < ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) || (int)c38 > ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
pc += 5;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 58:
if (strpos > 0)
{
char c39 = char.ToLower(this.str[strpos - 1]);
if ((int)c39 >= ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) && (int)c39 <= ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5;
continue;
case 59:
{
if (strpos <= 0)
{
return false;
}
char c40 = char.ToLower(this.str[strpos - 1]);
if ((int)c40 < ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8)) || (int)c40 > ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)))
{
pc += 5;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 60:
if (strpos < this.string_end)
{
char c41 = this.str[strpos];
int num19 = (int)c41;
num19 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num19 >= 0 && num19 < j << 3 && ((int)this.program[pc + 5 + (num19 >> 3)] & (1 << (num19 & 7))) != 0)
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
case 61:
{
if (strpos >= this.string_end)
{
return false;
}
char c42 = this.str[strpos];
int num20 = (int)c42;
num20 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num20 < 0 || num20 >= j << 3 || ((int)this.program[pc + 5 + (num20 >> 3)] & (1 << (num20 & 7))) == 0)
{
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 62:
if (strpos < this.string_end)
{
char c43 = char.ToLower(this.str[strpos]);
int num21 = (int)c43;
num21 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num21 >= 0 && num21 < j << 3 && ((int)this.program[pc + 5 + (num21 >> 3)] & (1 << (num21 & 7))) != 0)
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
case 63:
{
if (strpos >= this.string_end)
{
return false;
}
char c44 = char.ToLower(this.str[strpos]);
int num22 = (int)c44;
num22 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num22 < 0 || num22 >= j << 3 || ((int)this.program[pc + 5 + (num22 >> 3)] & (1 << (num22 & 7))) == 0)
{
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 64:
if (strpos > 0)
{
char c45 = this.str[strpos - 1];
int num23 = (int)c45;
num23 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num23 >= 0 && num23 < j << 3 && ((int)this.program[pc + 5 + (num23 >> 3)] & (1 << (num23 & 7))) != 0)
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
case 65:
{
if (strpos <= 0)
{
return false;
}
char c46 = this.str[strpos - 1];
int num24 = (int)c46;
num24 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num24 < 0 || num24 >= j << 3 || ((int)this.program[pc + 5 + (num24 >> 3)] & (1 << (num24 & 7))) == 0)
{
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 66:
if (strpos > 0)
{
char c47 = char.ToLower(this.str[strpos - 1]);
int num25 = (int)c47;
num25 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num25 >= 0 && num25 < j << 3 && ((int)this.program[pc + 5 + (num25 >> 3)] & (1 << (num25 & 7))) != 0)
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
}
}
if (num == 0)
{
return false;
}
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
continue;
case 67:
{
if (strpos <= 0)
{
return false;
}
char c48 = char.ToLower(this.str[strpos - 1]);
int num26 = (int)c48;
num26 -= (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
if (num26 < 0 || num26 >= j << 3 || ((int)this.program[pc + 5 + (num26 >> 3)] & (1 << (num26 & 7))) == 0)
{
pc += 5 + ((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8));
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 68:
if (strpos < this.string_end)
{
char c49 = this.str[strpos];
if (c49 != '\n')
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 69:
{
if (strpos >= this.string_end)
{
return false;
}
char c50 = this.str[strpos];
if (c50 == '\n')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 70:
if (strpos > 0)
{
char c51 = this.str[strpos - 1];
if (c51 != '\n')
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 71:
{
if (strpos <= 0)
{
return false;
}
char c52 = this.str[strpos - 1];
if (c52 == '\n')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 72:
if (strpos < this.string_end)
{
char c53 = this.str[strpos];
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
else
{
if (num == 0)
{
return false;
}
pc++;
continue;
}
break;
case 73:
goto IL_1C0E;
case 74:
if (strpos > 0)
{
char c54 = this.str[strpos - 1];
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
else
{
if (num == 0)
{
return false;
}
pc++;
continue;
}
break;
case 75:
goto IL_2FF7;
case 76:
if (strpos < this.string_end)
{
char c55 = this.str[strpos];
if (char.IsDigit(c55))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 77:
{
if (strpos >= this.string_end)
{
return false;
}
char c56 = this.str[strpos];
if (!char.IsDigit(c56))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 78:
if (strpos > 0)
{
char c57 = this.str[strpos - 1];
if (char.IsDigit(c57))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 79:
{
if (strpos <= 0)
{
return false;
}
char c58 = this.str[strpos - 1];
if (!char.IsDigit(c58))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 80:
if (strpos < this.string_end)
{
char c59 = this.str[strpos];
if (char.IsLetterOrDigit(c59) || char.GetUnicodeCategory(c59) == UnicodeCategory.ConnectorPunctuation)
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 81:
{
if (strpos >= this.string_end)
{
return false;
}
char c60 = this.str[strpos];
if (!char.IsLetterOrDigit(c60) && char.GetUnicodeCategory(c60) != UnicodeCategory.ConnectorPunctuation)
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 82:
if (strpos > 0)
{
char c61 = this.str[strpos - 1];
if (char.IsLetterOrDigit(c61) || char.GetUnicodeCategory(c61) == UnicodeCategory.ConnectorPunctuation)
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 83:
{
if (strpos <= 0)
{
return false;
}
char c62 = this.str[strpos - 1];
if (!char.IsLetterOrDigit(c62) && char.GetUnicodeCategory(c62) != UnicodeCategory.ConnectorPunctuation)
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 84:
if (strpos < this.string_end)
{
char c63 = this.str[strpos];
if (char.IsWhiteSpace(c63))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 85:
{
if (strpos >= this.string_end)
{
return false;
}
char c64 = this.str[strpos];
if (!char.IsWhiteSpace(c64))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 86:
if (strpos > 0)
{
char c65 = this.str[strpos - 1];
if (char.IsWhiteSpace(c65))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 87:
{
if (strpos <= 0)
{
return false;
}
char c66 = this.str[strpos - 1];
if (!char.IsWhiteSpace(c66))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 88:
if (strpos < this.string_end)
{
char c67 = this.str[strpos];
if (('a' <= c67 && c67 <= 'z') || ('A' <= c67 && c67 <= 'Z') || ('0' <= c67 && c67 <= '9') || c67 == '_')
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 89:
{
if (strpos >= this.string_end)
{
return false;
}
char c68 = this.str[strpos];
if (('a' > c68 || c68 > 'z') && ('A' > c68 || c68 > 'Z') && ('0' > c68 || c68 > '9') && c68 != '_')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 90:
if (strpos > 0)
{
char c69 = this.str[strpos - 1];
if (('a' <= c69 && c69 <= 'z') || ('A' <= c69 && c69 <= 'Z') || ('0' <= c69 && c69 <= '9') || c69 == '_')
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 91:
{
if (strpos <= 0)
{
return false;
}
char c70 = this.str[strpos - 1];
if (('a' > c70 || c70 > 'z') && ('A' > c70 || c70 > 'Z') && ('0' > c70 || c70 > '9') && c70 != '_')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 92:
if (strpos < this.string_end)
{
char c71 = this.str[strpos];
if (c71 == ' ' || c71 == '\t' || c71 == '\n' || c71 == '\r' || c71 == '\f' || c71 == '\v')
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 93:
{
if (strpos >= this.string_end)
{
return false;
}
char c72 = this.str[strpos];
if (c72 != ' ' && c72 != '\t' && c72 != '\n' && c72 != '\r' && c72 != '\f' && c72 != '\v')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 94:
if (strpos > 0)
{
char c73 = this.str[strpos - 1];
if (c73 == ' ' || c73 == '\t' || c73 == '\n' || c73 == '\r' || c73 == '\f' || c73 == '\v')
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 95:
{
if (strpos <= 0)
{
return false;
}
char c74 = this.str[strpos - 1];
if (c74 != ' ' && c74 != '\t' && c74 != '\n' && c74 != '\r' && c74 != '\f' && c74 != '\v')
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 96:
if (strpos < this.string_end)
{
char c75 = this.str[strpos];
if (char.GetUnicodeCategory(c75) == (UnicodeCategory)this.program[pc + 1])
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 97:
{
if (strpos >= this.string_end)
{
return false;
}
char c76 = this.str[strpos];
if (char.GetUnicodeCategory(c76) != (UnicodeCategory)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 98:
if (strpos > 0)
{
char c77 = this.str[strpos - 1];
if (char.GetUnicodeCategory(c77) == (UnicodeCategory)this.program[pc + 1])
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 99:
{
if (strpos <= 0)
{
return false;
}
char c78 = this.str[strpos - 1];
if (char.GetUnicodeCategory(c78) != (UnicodeCategory)this.program[pc + 1])
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 124:
if (strpos < this.string_end)
{
char c79 = this.str[strpos];
if (('\ufeff' <= c79 && c79 <= '\ufeff') || ('\ufff0' <= c79 && c79 <= '\ufffd'))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 125:
{
if (strpos >= this.string_end)
{
return false;
}
char c80 = this.str[strpos];
if (('\ufeff' > c80 || c80 > '\ufeff') && ('\ufff0' > c80 || c80 > '\ufffd'))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 126:
if (strpos > 0)
{
char c81 = this.str[strpos - 1];
if (('\ufeff' <= c81 && c81 <= '\ufeff') || ('\ufff0' <= c81 && c81 <= '\ufffd'))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc++;
continue;
}
}
if (num == 0)
{
return false;
}
pc++;
continue;
case 127:
{
if (strpos <= 0)
{
return false;
}
char c82 = this.str[strpos - 1];
if (('\ufeff' > c82 || c82 > '\ufeff') && ('\ufff0' > c82 || c82 > '\ufffd'))
{
pc++;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 132:
if (strpos < this.string_end)
{
char c83 = this.str[strpos];
if (CategoryUtils.IsCategory((Category)this.program[pc + 1], c83))
{
strpos++;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 133:
{
if (strpos >= this.string_end)
{
return false;
}
char c84 = this.str[strpos];
if (!CategoryUtils.IsCategory((Category)this.program[pc + 1], c84))
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos++;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 134:
if (strpos > 0)
{
char c85 = this.str[strpos - 1];
if (CategoryUtils.IsCategory((Category)this.program[pc + 1], c85))
{
strpos--;
if (num != 0)
{
goto IL_3E1B;
}
pc += 2;
continue;
}
}
if (num == 0)
{
return false;
}
pc += 2;
continue;
case 135:
{
if (strpos <= 0)
{
return false;
}
char c86 = this.str[strpos - 1];
if (!CategoryUtils.IsCategory((Category)this.program[pc + 1], c86))
{
pc += 2;
if (num == 0 || pc + 1 == num)
{
strpos--;
if (pc + 1 == num)
{
goto IL_3E1B;
}
}
continue;
}
return false;
}
case 136:
j = this.GetLastDefined((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
if (j < 0)
{
return false;
}
i = this.marks[j].Index;
j = this.marks[j].Length;
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j;
while (i < num2)
{
if (this.str[strpos] != this.str[i])
{
return false;
}
strpos++;
i++;
}
pc += 3;
continue;
case 137:
j = this.GetLastDefined((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
if (j < 0)
{
return false;
}
i = this.marks[j].Index;
j = this.marks[j].Length;
if (strpos + j > this.string_end)
{
return false;
}
num2 = i + j;
while (i < num2)
{
if (this.str[strpos] != this.str[i] && char.ToLower(this.str[strpos]) != char.ToLower(this.str[i]))
{
return false;
}
strpos++;
i++;
}
pc += 3;
continue;
case 138:
{
j = this.GetLastDefined((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
if (j < 0)
{
return false;
}
i = this.marks[j].Index;
j = this.marks[j].Length;
if (strpos - j < 0)
{
return false;
}
int num27 = strpos - j;
num2 = i + j;
while (i < num2)
{
if (this.str[num27] != this.str[i])
{
return false;
}
i++;
num27++;
}
strpos -= j;
pc += 3;
continue;
}
case 140:
this.Open((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8), strpos);
pc += 3;
continue;
case 141:
this.Close((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8), strpos);
pc += 3;
continue;
case 142:
{
int num28 = 0;
if (!this.EvalByteCode(pc + 8, strpos, ref num28))
{
goto Block_58;
}
int num29 = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
int num30 = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
bool flag = this.program[pc + 5] > 0;
if (!this.Balance(num29, num30, flag, strpos))
{
goto Block_59;
}
strpos = num28;
pc += (int)this.program[pc + 6] | ((int)this.program[pc + 7] << 8);
continue;
}
case 143:
goto IL_BAD;
case 144:
if (this.GetLastDefined((int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8)) >= 0)
{
pc += 5;
}
else
{
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
}
continue;
case 145:
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
continue;
case 146:
{
int num31 = 0;
if (this.EvalByteCode(pc + 3, strpos, ref num31))
{
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
strpos = num31;
continue;
}
return false;
}
case 147:
{
int num32 = 0;
if (this.EvalByteCode(pc + 5, strpos, ref num32))
{
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
}
else
{
pc += (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
}
continue;
}
case 148:
num33 = 0;
if (this.EvalByteCode(pc + 3, strpos, ref num33))
{
goto Block_498;
}
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
continue;
case 149:
num = pc + ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
pc += 3;
continue;
case 150:
goto IL_4FD;
case 151:
goto IL_71A;
case 152:
case 153:
goto IL_37FA;
case 154:
goto IL_3884;
case 155:
case 156:
goto IL_3C23;
}
break;
IL_3E1B:
pc = num;
num = 0;
}
goto IL_3DE6;
IL_2DF:
strpos_result = strpos;
return true;
IL_4FD:
int num34 = (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
int num35 = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
int num36 = pc + 5;
RxOp rxOp = (RxOp)(this.program[num36] & byte.MaxValue);
bool flag2 = false;
if ((rxOp == RxOp.String || rxOp == RxOp.StringIgnoreCase) && pc + num34 == num36 + 2 + (int)this.program[num36 + 1] + 1)
{
flag2 = true;
if (RxInterpreter.trace_rx)
{
Console.WriteLine(" string anchor at {0}, offset {1}", num36, num35);
}
}
pc += num34;
if (this.program[pc] == 4)
{
if (strpos == 0)
{
int num37 = strpos;
if (this.groups.Length > 1)
{
this.ResetGroups();
this.marks[this.groups[0]].Start = strpos;
}
if (this.EvalByteCode(pc + 1, strpos, ref num37))
{
this.marks[this.groups[0]].Start = strpos;
if (this.groups.Length > 1)
{
this.marks[this.groups[0]].End = num37;
}
strpos_result = num37;
return true;
}
}
return false;
}
num2 = this.string_end + 1;
while (strpos < num2)
{
if (flag2 && (rxOp == RxOp.String || rxOp == RxOp.StringIgnoreCase))
{
int num38 = strpos;
if (!this.EvalByteCode(num36, strpos + num35, ref num38))
{
strpos++;
continue;
}
}
int num39 = strpos;
if (this.groups.Length > 1)
{
this.ResetGroups();
this.marks[this.groups[0]].Start = strpos;
}
if (this.EvalByteCode(pc, strpos, ref num39))
{
this.marks[this.groups[0]].Start = strpos;
if (this.groups.Length > 1)
{
this.marks[this.groups[0]].End = num39;
}
strpos_result = num39;
return true;
}
strpos++;
}
return false;
IL_71A:
j = (int)this.program[pc + 3] | ((int)this.program[pc + 4] << 8);
pc += (int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8);
while (strpos >= 0)
{
int num40 = strpos;
if (this.groups.Length > 1)
{
this.ResetGroups();
this.marks[this.groups[0]].Start = strpos;
}
if (this.EvalByteCode(pc, strpos, ref num40))
{
this.marks[this.groups[0]].Start = strpos;
if (this.groups.Length > 1)
{
this.marks[this.groups[0]].End = num40;
}
strpos_result = num40;
return true;
}
strpos--;
}
return false;
Block_58:
Block_59:
return false;
IL_BAD:
goto IL_3E14;
IL_1C0E:
if (strpos < this.string_end)
{
char c87 = this.str[strpos];
}
return false;
IL_2FF7:
if (strpos > 0)
{
char c88 = this.str[strpos - 1];
}
return false;
Block_498:
strpos_result = num33;
return true;
IL_37FA:
int num41 = 0;
this.repeat = new RxInterpreter.RepeatContext(this.repeat, RxInterpreter.ReadInt(this.program, pc + 3), RxInterpreter.ReadInt(this.program, pc + 7), this.program[pc] == 153, pc + 11);
int num42 = pc + ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
if (!this.EvalByteCode(num42, strpos, ref num41))
{
this.repeat = this.repeat.Previous;
return false;
}
strpos = num41;
strpos_result = strpos;
return true;
IL_3884:
RxInterpreter.RepeatContext repeatContext = this.repeat;
int num43 = 0;
if (this.deep == repeatContext)
{
goto IL_3E14;
}
i = repeatContext.Start;
int count = repeatContext.Count;
while (!repeatContext.IsMinimum)
{
repeatContext.Count++;
repeatContext.Start = strpos;
this.deep = repeatContext;
if (!this.EvalByteCode(repeatContext.Expression, strpos, ref num43))
{
repeatContext.Start = i;
repeatContext.Count = count;
return false;
}
strpos = num43;
if (this.deep != repeatContext)
{
goto IL_3E14;
}
}
if (strpos == repeatContext.Start)
{
this.repeat = repeatContext.Previous;
this.deep = null;
if (this.EvalByteCode(pc + 1, strpos, ref num43))
{
strpos = num43;
goto IL_3E14;
}
this.repeat = repeatContext;
return false;
}
else
{
if (repeatContext.IsLazy)
{
for (;;)
{
this.repeat = repeatContext.Previous;
this.deep = null;
int num44 = this.Checkpoint();
if (this.EvalByteCode(pc + 1, strpos, ref num43))
{
break;
}
this.Backtrack(num44);
this.repeat = repeatContext;
if (repeatContext.IsMaximum)
{
goto Block_508;
}
repeatContext.Count++;
repeatContext.Start = strpos;
this.deep = repeatContext;
if (!this.EvalByteCode(repeatContext.Expression, strpos, ref num43))
{
goto Block_509;
}
strpos = num43;
if (this.deep != repeatContext)
{
goto Block_510;
}
if (strpos == repeatContext.Start)
{
goto Block_511;
}
}
strpos = num43;
goto IL_3E14;
Block_508:
return false;
Block_509:
repeatContext.Start = i;
repeatContext.Count = count;
return false;
Block_510:
goto IL_3E14;
Block_511:
return false;
}
int count2 = this.stack.Count;
while (!repeatContext.IsMaximum)
{
int num45 = this.Checkpoint();
int num46 = strpos;
int start = repeatContext.Start;
repeatContext.Count++;
if (RxInterpreter.trace_rx)
{
Console.WriteLine("recurse with count {0}.", repeatContext.Count);
}
repeatContext.Start = strpos;
this.deep = repeatContext;
if (!this.EvalByteCode(repeatContext.Expression, strpos, ref num43))
{
repeatContext.Count--;
repeatContext.Start = start;
this.Backtrack(num45);
break;
}
strpos = num43;
if (this.deep != repeatContext)
{
this.stack.Count = count2;
goto IL_3E14;
}
this.stack.Push(num45);
this.stack.Push(num46);
if (strpos == repeatContext.Start)
{
break;
}
}
if (RxInterpreter.trace_rx)
{
Console.WriteLine("matching tail: {0} pc={1}", strpos, pc + 1);
}
this.repeat = repeatContext.Previous;
for (;;)
{
this.deep = null;
if (this.EvalByteCode(pc + 1, strpos, ref num43))
{
break;
}
if (this.stack.Count == count2)
{
goto Block_518;
}
repeatContext.Count--;
strpos = this.stack.Pop();
this.Backtrack(this.stack.Pop());
if (RxInterpreter.trace_rx)
{
Console.WriteLine("backtracking to {0} expr={1} pc={2}", strpos, repeatContext.Expression, pc);
}
}
strpos = num43;
this.stack.Count = count2;
goto IL_3E14;
Block_518:
this.repeat = repeatContext;
return false;
}
IL_3C23:
bool flag3 = this.program[pc] == 156;
int num47 = 0;
int num48 = pc + ((int)this.program[pc + 1] | ((int)this.program[pc + 2] << 8));
i = RxInterpreter.ReadInt(this.program, pc + 3);
num2 = RxInterpreter.ReadInt(this.program, pc + 7);
j = 0;
this.deep = null;
while (j < i)
{
if (!this.EvalByteCode(pc + 11, strpos, ref num47))
{
return false;
}
strpos = num47;
j++;
}
if (flag3)
{
for (;;)
{
int num49 = this.Checkpoint();
if (this.EvalByteCode(num48, strpos, ref num47))
{
break;
}
this.Backtrack(num49);
if (j >= num2)
{
return false;
}
if (!this.EvalByteCode(pc + 11, strpos, ref num47))
{
return false;
}
strpos = num47;
j++;
}
strpos = num47;
}
else
{
int count3 = this.stack.Count;
while (j < num2)
{
int num50 = this.Checkpoint();
if (!this.EvalByteCode(pc + 11, strpos, ref num47))
{
this.Backtrack(num50);
break;
}
this.stack.Push(num50);
this.stack.Push(strpos);
strpos = num47;
j++;
}
if (num48 <= pc)
{
throw new Exception();
}
while (!this.EvalByteCode(num48, strpos, ref num47))
{
if (this.stack.Count == count3)
{
return false;
}
strpos = this.stack.Pop();
this.Backtrack(this.stack.Pop());
if (RxInterpreter.trace_rx)
{
Console.WriteLine("backtracking to: {0}", strpos);
}
}
strpos = num47;
this.stack.Count = count3;
}
goto IL_3E14;
IL_3DE6:
Console.WriteLine("evaluating: {0} at pc: {1}, strpos: {2}", (RxOp)this.program[pc], pc, strpos);
throw new NotSupportedException();
IL_3E14:
strpos_result = strpos;
return true;
}
// Token: 0x040013F2 RID: 5106
private byte[] program;
// Token: 0x040013F3 RID: 5107
private string str;
// Token: 0x040013F4 RID: 5108
private int string_start;
// Token: 0x040013F5 RID: 5109
private int string_end;
// Token: 0x040013F6 RID: 5110
private int group_count;
// Token: 0x040013F7 RID: 5111
private int[] groups;
// Token: 0x040013F8 RID: 5112
private EvalDelegate eval_del;
// Token: 0x040013F9 RID: 5113
private Mark[] marks;
// Token: 0x040013FA RID: 5114
private int mark_start;
// Token: 0x040013FB RID: 5115
private int mark_end;
// Token: 0x040013FC RID: 5116
private RxInterpreter.IntStack stack;
// Token: 0x040013FD RID: 5117
private RxInterpreter.RepeatContext repeat;
// Token: 0x040013FE RID: 5118
private RxInterpreter.RepeatContext deep;
// Token: 0x040013FF RID: 5119
public static readonly bool trace_rx;
// Token: 0x020002B7 RID: 695
internal struct IntStack
{
// Token: 0x06001983 RID: 6531 RVA: 0x0005B024 File Offset: 0x00059224
public int Pop()
{
return this.values[--this.count];
}
// Token: 0x06001984 RID: 6532 RVA: 0x0005B04C File Offset: 0x0005924C
public void Push(int value)
{
if (this.values == null)
{
this.values = new int[8];
}
else if (this.count == this.values.Length)
{
int num = this.values.Length;
num += num >> 1;
int[] array = new int[num];
for (int i = 0; i < this.count; i++)
{
array[i] = this.values[i];
}
this.values = array;
}
this.values[this.count++] = value;
}
// Token: 0x170007F3 RID: 2035
// (get) Token: 0x06001985 RID: 6533 RVA: 0x0005B0E0 File Offset: 0x000592E0
public int Top
{
get
{
return this.values[this.count - 1];
}
}
// Token: 0x170007F4 RID: 2036
// (get) Token: 0x06001986 RID: 6534 RVA: 0x0005B0F4 File Offset: 0x000592F4
// (set) Token: 0x06001987 RID: 6535 RVA: 0x0005B0FC File Offset: 0x000592FC
public int Count
{
get
{
return this.count;
}
set
{
if (value > this.count)
{
throw new SystemException("can only truncate the stack");
}
this.count = value;
}
}
// Token: 0x04001400 RID: 5120
private int[] values;
// Token: 0x04001401 RID: 5121
private int count;
}
// Token: 0x020002B8 RID: 696
private class RepeatContext
{
// Token: 0x06001988 RID: 6536 RVA: 0x0005B11C File Offset: 0x0005931C
public RepeatContext(RxInterpreter.RepeatContext previous, int min, int max, bool lazy, int expr_pc)
{
this.previous = previous;
this.min = min;
this.max = max;
this.lazy = lazy;
this.expr_pc = expr_pc;
this.start = -1;
this.count = 0;
}
// Token: 0x170007F5 RID: 2037
// (get) Token: 0x06001989 RID: 6537 RVA: 0x0005B158 File Offset: 0x00059358
// (set) Token: 0x0600198A RID: 6538 RVA: 0x0005B160 File Offset: 0x00059360
public int Count
{
get
{
return this.count;
}
set
{
this.count = value;
}
}
// Token: 0x170007F6 RID: 2038
// (get) Token: 0x0600198B RID: 6539 RVA: 0x0005B16C File Offset: 0x0005936C
// (set) Token: 0x0600198C RID: 6540 RVA: 0x0005B174 File Offset: 0x00059374
public int Start
{
get
{
return this.start;
}
set
{
this.start = value;
}
}
// Token: 0x170007F7 RID: 2039
// (get) Token: 0x0600198D RID: 6541 RVA: 0x0005B180 File Offset: 0x00059380
public bool IsMinimum
{
get
{
return this.min <= this.count;
}
}
// Token: 0x170007F8 RID: 2040
// (get) Token: 0x0600198E RID: 6542 RVA: 0x0005B194 File Offset: 0x00059394
public bool IsMaximum
{
get
{
return this.max <= this.count;
}
}
// Token: 0x170007F9 RID: 2041
// (get) Token: 0x0600198F RID: 6543 RVA: 0x0005B1A8 File Offset: 0x000593A8
public bool IsLazy
{
get
{
return this.lazy;
}
}
// Token: 0x170007FA RID: 2042
// (get) Token: 0x06001990 RID: 6544 RVA: 0x0005B1B0 File Offset: 0x000593B0
public int Expression
{
get
{
return this.expr_pc;
}
}
// Token: 0x170007FB RID: 2043
// (get) Token: 0x06001991 RID: 6545 RVA: 0x0005B1B8 File Offset: 0x000593B8
public RxInterpreter.RepeatContext Previous
{
get
{
return this.previous;
}
}
// Token: 0x04001402 RID: 5122
private int start;
// Token: 0x04001403 RID: 5123
private int min;
// Token: 0x04001404 RID: 5124
private int max;
// Token: 0x04001405 RID: 5125
private bool lazy;
// Token: 0x04001406 RID: 5126
private int expr_pc;
// Token: 0x04001407 RID: 5127
private RxInterpreter.RepeatContext previous;
// Token: 0x04001408 RID: 5128
private int count;
}
}
}