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; } }
private bool TryEmitCall(CallStatement callStatement, CompilerContext context, Scope scope, MethodImpl method) { TypeDefinition typeDef = null; return this.TryEmitExpression(callStatement.Expression, context, scope, method, out typeDef); }