AGS.CScript.Compiler.CodeBlockCompiler.ProcessKeyword C# (CSharp) Method

ProcessKeyword() private method

private ProcessKeyword ( AGS.CScript.Compiler.KeywordToken keywordToken ) : void
keywordToken AGS.CScript.Compiler.KeywordToken
return void
        private void ProcessKeyword(KeywordToken keywordToken)
        {
            PredefinedSymbol keyword = keywordToken.SymbolType;

            if (keyword == PredefinedSymbol.If)
            {
                _source.ExpectKeyword(PredefinedSymbol.OpenParenthesis);

                Expression condition = ReadExpression(true, PredefinedSymbol.CloseParenthesis);

                GenerateCodeForExpression(condition);

                ProcessCodeBlock();

                if (_source.NextIsKeyword(PredefinedSymbol.Else))
                {
                    ProcessCodeBlock();
                }
            }
            else if (keyword == PredefinedSymbol.While)
            {
                _source.ExpectKeyword(PredefinedSymbol.OpenParenthesis);

                Expression condition = ReadExpression(true, PredefinedSymbol.CloseParenthesis);

                GenerateCodeForExpression(condition);

                ProcessCodeBlock();
            }
            else if (keyword == PredefinedSymbol.For)
            {
                // TODO: Handle for loops
            }
            else if (keyword == PredefinedSymbol.Break)
            {
                // TODO: Handle break
            }
            else if (keyword == PredefinedSymbol.Continue)
            {
                // TODO: Handle continue
            }
            else if (keyword == PredefinedSymbol.Return)
            {
                Expression resultToReturn = ReadExpression(true, PredefinedSymbol.Semicolon);

                GenerateCodeForExpression(resultToReturn);

                // TODO: Generate code to return and release local vars
                FreeAllLocalVariablesButLeaveValid();
            }
            else
            {
                throw new CompilerMessage(ErrorCode.InvalidUseOfKeyword, "Keyword '" + keywordToken.Name + "' is not valid here");
            }
        }