Example #1
0
        private bool ParseStatement(TokenReader reader, out Statement result)
        {
            result = null;
            Token tok = reader.Peek();
            Token start = tok;

            if (tok.Is(Keyword.SemiColon))
            {
                return true; // empty statement.
            }

            if (tok.Is(Keyword.If))
            {
                return this.ParseIfStatement(reader, out result);
            }

            if (tok.Is(Keyword.While))
            {
                return this.ParseWhileStatement(reader, out result);
            }

            if (tok.Is(Keyword.Delete))
            {
                return this.ParseDeleteStatement(reader, out result);
            }

            if (tok.Is(Keyword.Begin))
            {
                BlockStatement block = null;
                bool success = this.ParseBlockStatement(reader, out block);
                result = block;
                return success;
            }

            ReferenceExpression lhs = null;
            if (!this.ParseReferenceExpression(reader, out lhs))
            {
                return false;
            }

            tok = reader.Peek();
            if (tok.Is(Keyword.Assign))
            {
                reader.Read();
                Expression rhs = null;
                if (!this.ParseExpression(reader, out rhs))
                {
                    return false;
                }

                result = new AssignmentStatement(start, lhs, rhs);
                return true;
            }
            else
            {
                result = new CallStatement(start, lhs);
                return true;
            }
        }
Example #2
0
 private bool TryEmitCall(CallStatement callStatement, CompilerContext context, Scope scope, MethodImpl method)
 {
     TypeDefinition typeDef = null;
     return this.TryEmitExpression(callStatement.Expression, context, scope, method, out typeDef);
 }