private static void AddVariableDeclaration(List<ScriptVariable> variables, ref FastString script, string thisWord, AutoCompleteParserState state)
{
if ((state.LastWord.Length > 0) && (state.WordBeforeLast.Length > 0))
{
if (!DoesCurrentLineHaveToken(script, AUTO_COMPLETE_IGNORE))
{
bool isArray = false, isPointer = false;
bool isStatic = false, isStaticOnly = false;
bool isNoInherit = false, isProtected = false;
string type = state.WordBeforeLast;
string varName = state.LastWord;
if (thisWord == "[")
{
while ((script.Length > 0) && (GetNextWord(ref script) != "]")) ;
isArray = true;
}
else if (state.DynamicArrayDefinition)
{
varName = state.WordBeforeLast;
type = state.WordBeforeWordBeforeLast;
isArray = true;
}
if (type == "*")
{
isPointer = true;
if (state.DynamicArrayDefinition)
{
type = state.PreviousWords[3];
}
else
{
type = state.WordBeforeWordBeforeLast;
}
}
if (state.IsWordInPreviousList("static"))
{
isStatic = true;
}
if (state.IsWordInPreviousList("protected"))
{
isProtected = true;
}
if (DoesCurrentLineHaveToken(script, AUTO_COMPLETE_STATIC_ONLY))
{
isStaticOnly = true;
}
if (DoesCurrentLineHaveToken(script, AUTO_COMPLETE_NO_INHERIT))
{
isNoInherit = true;
}
// ignore "struct GUI;" prototypes
if (type != "struct")
{
//if (varName == "{") System.Diagnostics.Debugger.Break();
ScriptVariable newVar = new ScriptVariable(varName, type, isArray, isPointer, state.InsideIfDefBlock, state.InsideIfNDefBlock, isStatic, isStaticOnly, isNoInherit, isProtected, state.CurrentScriptCharacterIndex);
if (!string.IsNullOrEmpty(state.PreviousComment))
{
newVar.Description = state.PreviousComment;
state.PreviousComment = null;
}
variables.Add(newVar);
}
}
state.DynamicArrayDefinition = false;
}
}