private static void ProcessPreProcessorDirective(List<ScriptDefine> defines, ref FastString script, AutoCompleteParserState state)
{
script = script.Substring(1);
string preProcessorDirective = GetNextWord(ref script);
if (preProcessorDirective == "define")
{
string macroName = GetNextWord(ref script);
if (!string.IsNullOrEmpty(macroName) && (Char.IsLetter(macroName[0])) &&
(!DoesCurrentLineHaveToken(script, AUTO_COMPLETE_IGNORE)))
{
defines.Add(new ScriptDefine(macroName, state.InsideIfDefBlock, state.InsideIfNDefBlock));
}
}
else if (preProcessorDirective == "undef")
{
string macroName = GetNextWord(ref script);
if (Char.IsLetter(macroName[0]))
{
foreach (ScriptDefine define in defines)
{
if (define.Name == macroName)
{
defines.Remove(define);
break;
}
}
}
}
else if (preProcessorDirective == "ifndef")
{
string macroName = GetNextWord(ref script);
if (Char.IsLetter(macroName[0]))
{
state.InsideIfNDefBlock = macroName;
}
}
else if (preProcessorDirective == "ifdef")
{
string macroName = GetNextWord(ref script);
if (Char.IsLetter(macroName[0]))
{
state.InsideIfDefBlock = macroName;
}
}
else if (preProcessorDirective == "endif")
{
state.InsideIfNDefBlock = null;
state.InsideIfDefBlock = null;
}
GoToNextLine(ref script);
state.ClearPreviousWords();
}