internal virtual void ReadRegExp(int startToken)
{
int start = tokenBeg;
stringBufferTop = 0;
if (startToken == Token.ASSIGN_DIV)
{
// Miss-scanned /=
AddToString('=');
}
else
{
if (startToken != Token.DIV)
{
Kit.CodeBug();
}
}
bool inCharSet = false;
// true if inside a '['..']' pair
int c;
while ((c = GetChar()) != '/' || inCharSet)
{
if (c == '\n' || c == EOF_CHAR)
{
UngetChar(c);
tokenEnd = cursor - 1;
this.@string = new string(stringBuffer, 0, stringBufferTop);
parser.ReportError("msg.unterminated.re.lit");
return;
}
if (c == '\\')
{
AddToString(c);
c = GetChar();
}
else
{
if (c == '[')
{
inCharSet = true;
}
else
{
if (c == ']')
{
inCharSet = false;
}
}
}
AddToString(c);
}
int reEnd = stringBufferTop;
while (true)
{
if (MatchChar('g'))
{
AddToString('g');
}
else
{
if (MatchChar('i'))
{
AddToString('i');
}
else
{
if (MatchChar('m'))
{
AddToString('m');
}
else
{
if (MatchChar('y'))
{
// FireFox 3
AddToString('y');
}
else
{
break;
}
}
}
}
}
tokenEnd = start + stringBufferTop + 2;
// include slashes
if (IsAlpha(PeekChar()))
{
parser.ReportError("msg.invalid.re.flag");
}
this.@string = new string(stringBuffer, 0, reEnd);
this.regExpFlags = new string(stringBuffer, reEnd, stringBufferTop - reEnd);
}