internal SyntaxToken ScanXmlComment()
{
SyntaxList<SyntaxNode> precedingTrivia = null;
var Here = 0;
while (CanGetCharAtOffset(Here))
{
char c = PeekAheadChar(Here);
switch (c)
{
case UCH_CR:
case UCH_LF:
return XmlMakeCommentToken(precedingTrivia, Here + LengthOfLineBreak(c, Here));
case '-':
if (CanGetCharAtOffset(Here + 1) && PeekAheadChar(Here + 1) == '-')
{
// // --> terminates an Xml comment but otherwise -- is an illegal character sequence.
// // The scanner will always returns "--" as a separate comment data string and the
// // the semantics will error if '--' is ever found.
// // Return valid characters up to the --
if (Here > 0)
{
return XmlMakeCommentToken(precedingTrivia, Here);
}
if (CanGetCharAtOffset(Here + 2))
{
c = PeekAheadChar(Here + 2);
Here += 2;
// // if > is not found then this is an error. Return the -- string
if (c != '>')
{
return XmlMakeCommentToken(precedingTrivia, 2);
}
else
{
return XmlMakeEndCommentToken(precedingTrivia);
}
}
}
goto ScanChars;
default:
ScanChars:
var xmlCh = ScanXmlChar(Here);
if (xmlCh.Length != 0)
{
Here += xmlCh.Length;
continue;
}
// bad char
if (Here > 0)
{
return XmlMakeCommentToken(precedingTrivia, Here);
}
else
{
return XmlMakeBadToken(precedingTrivia, 1, ERRID.ERR_IllegalChar);
}
}
}
// no more chars
if (Here > 0)
{
return XmlMakeCommentToken(precedingTrivia, Here);
}
else
{
return MakeEofToken(precedingTrivia);
}
}