in src/Lucene.Net.Analysis.Common/Tartarus/Snowball/Ext/PorterStemmer.cs [680:1044]
public override bool Stem()
{
int v_1;
int v_2;
int v_3;
int v_4;
int v_5;
int v_10;
int v_11;
int v_12;
int v_13;
int v_14;
int v_15;
int v_16;
int v_17;
int v_18;
int v_19;
int v_20;
// (, line 113
// unset Y_found, line 115
B_Y_found = false;
// do, line 116
v_1 = m_cursor;
do
{
// (, line 116
// [, line 116
m_bra = m_cursor;
// literal, line 116
if (!(Eq_S(1, "y")))
{
goto lab0;
}
// ], line 116
m_ket = m_cursor;
// <-, line 116
SliceFrom("Y");
// set Y_found, line 116
B_Y_found = true;
} while (false);
lab0:
m_cursor = v_1;
// do, line 117
v_2 = m_cursor;
do
{
// repeat, line 117
while (true)
{
v_3 = m_cursor;
do
{
// (, line 117
// goto, line 117
while (true)
{
v_4 = m_cursor;
do
{
// (, line 117
if (!(InGrouping(g_v, 97, 121)))
{
goto lab5;
}
// [, line 117
m_bra = m_cursor;
// literal, line 117
if (!(Eq_S(1, "y")))
{
goto lab5;
}
// ], line 117
m_ket = m_cursor;
m_cursor = v_4;
goto golab4;
} while (false);
lab5:
m_cursor = v_4;
if (m_cursor >= m_limit)
{
goto lab3;
}
m_cursor++;
}
golab4:
// <-, line 117
SliceFrom("Y");
// set Y_found, line 117
B_Y_found = true;
// LUCENENET NOTE: continue label is not supported directly in .NET,
// so we just need to add another goto to get to the end of the outer loop.
// See: http://stackoverflow.com/a/359449/181087
// Original code:
//continue replab2;
goto end_of_outer_loop;
} while (false);
lab3:
m_cursor = v_3;
goto replab2;
end_of_outer_loop: { /* LUCENENET: intentionally empty */ }
}
replab2: {/* LUCENENET: intentionally blank */}
} while (false);
//lab1: // not referenced
m_cursor = v_2;
I_p1 = m_limit;
I_p2 = m_limit;
// do, line 121
v_5 = m_cursor;
do
{
// (, line 121
// gopast, line 122
while (true)
{
do
{
if (!(InGrouping(g_v, 97, 121)))
{
goto lab8;
}
goto golab7;
} while (false);
lab8:
if (m_cursor >= m_limit)
{
goto lab6;
}
m_cursor++;
}
golab7:
// gopast, line 122
while (true)
{
do
{
if (!(OutGrouping(g_v, 97, 121)))
{
goto lab10;
}
goto golab9;
} while (false);
lab10:
if (m_cursor >= m_limit)
{
goto lab6;
}
m_cursor++;
}
golab9:
// setmark p1, line 122
I_p1 = m_cursor;
// gopast, line 123
while (true)
{
do
{
if (!(InGrouping(g_v, 97, 121)))
{
goto lab12;
}
goto golab11;
} while (false);
lab12:
if (m_cursor >= m_limit)
{
goto lab6;
}
m_cursor++;
}
golab11:
// gopast, line 123
while (true)
{
do
{
if (!(OutGrouping(g_v, 97, 121)))
{
goto lab14;
}
goto golab13;
} while (false);
lab14:
if (m_cursor >= m_limit)
{
goto lab6;
}
m_cursor++;
}
golab13:
// setmark p2, line 123
I_p2 = m_cursor;
} while (false);
lab6:
m_cursor = v_5;
// backwards, line 126
m_limit_backward = m_cursor; m_cursor = m_limit;
// (, line 126
// do, line 127
v_10 = m_limit - m_cursor;
do
{
// call Step_1a, line 127
if (!r_Step_1a())
{
goto lab15;
}
} while (false);
lab15:
m_cursor = m_limit - v_10;
// do, line 128
v_11 = m_limit - m_cursor;
do
{
// call Step_1b, line 128
if (!r_Step_1b())
{
goto lab16;
}
} while (false);
lab16:
m_cursor = m_limit - v_11;
// do, line 129
v_12 = m_limit - m_cursor;
do
{
// call Step_1c, line 129
if (!r_Step_1c())
{
goto lab17;
}
} while (false);
lab17:
m_cursor = m_limit - v_12;
// do, line 130
v_13 = m_limit - m_cursor;
do
{
// call Step_2, line 130
if (!r_Step_2())
{
goto lab18;
}
} while (false);
lab18:
m_cursor = m_limit - v_13;
// do, line 131
v_14 = m_limit - m_cursor;
do
{
// call Step_3, line 131
if (!r_Step_3())
{
goto lab19;
}
} while (false);
lab19:
m_cursor = m_limit - v_14;
// do, line 132
v_15 = m_limit - m_cursor;
do
{
// call Step_4, line 132
if (!r_Step_4())
{
goto lab20;
}
} while (false);
lab20:
m_cursor = m_limit - v_15;
// do, line 133
v_16 = m_limit - m_cursor;
do
{
// call Step_5a, line 133
if (!r_Step_5a())
{
goto lab21;
}
} while (false);
lab21:
m_cursor = m_limit - v_16;
// do, line 134
v_17 = m_limit - m_cursor;
do
{
// call Step_5b, line 134
if (!r_Step_5b())
{
goto lab22;
}
} while (false);
lab22:
m_cursor = m_limit - v_17;
m_cursor = m_limit_backward; // do, line 137
v_18 = m_cursor;
do
{
// (, line 137
// Boolean test Y_found, line 137
if (!(B_Y_found))
{
goto lab23;
}
// repeat, line 137
while (true)
{
v_19 = m_cursor;
do
{
// (, line 137
// goto, line 137
while (true)
{
v_20 = m_cursor;
do
{
// (, line 137
// [, line 137
m_bra = m_cursor;
// literal, line 137
if (!(Eq_S(1, "Y")))
{
goto lab27;
}
// ], line 137
m_ket = m_cursor;
m_cursor = v_20;
goto golab26;
} while (false);
lab27:
m_cursor = v_20;
if (m_cursor >= m_limit)
{
goto lab25;
}
m_cursor++;
}
golab26:
// <-, line 137
SliceFrom("y");
// LUCENENET NOTE: continue label is not supported directly in .NET,
// so we just need to add another goto to get to the end of the outer loop.
// See: http://stackoverflow.com/a/359449/181087
// Original code:
//continue replab24;
goto end_of_outer_loop_2;
} while (false);
lab25:
m_cursor = v_19;
goto replab24;
end_of_outer_loop_2: { /* LUCENENET: intentionally empty */ }
}
replab24: {/* LUCENENET: intentionally blank */}
} while (false);
lab23:
m_cursor = v_18;
return true;
}