| 1786 | } |
| 1787 | |
| 1788 | RefPtr<ExpressionSyntaxNode> Parser::ParseLeafExpression() |
| 1789 | { |
| 1790 | RefPtr<ExpressionSyntaxNode> rs; |
| 1791 | if (LookAheadToken("project")) |
| 1792 | { |
| 1793 | RefPtr<ProjectExpressionSyntaxNode> project = new ProjectExpressionSyntaxNode(); |
| 1794 | FillPosition(project.Ptr()); |
| 1795 | ReadToken("project"); |
| 1796 | ReadToken(TokenType::LParent); |
| 1797 | project->BaseExpression = ParseExpression(); |
| 1798 | ReadToken(TokenType::RParent); |
| 1799 | return project; |
| 1800 | } |
| 1801 | if (LookAheadToken(TokenType::OpInc) || |
| 1802 | LookAheadToken(TokenType::OpDec) || |
| 1803 | LookAheadToken(TokenType::OpNot) || |
| 1804 | LookAheadToken(TokenType::OpBitNot) || |
| 1805 | LookAheadToken(TokenType::OpSub)) |
| 1806 | { |
| 1807 | RefPtr<UnaryExpressionSyntaxNode> unaryExpr = new UnaryExpressionSyntaxNode(); |
| 1808 | Token token = tokenReader.AdvanceToken(); |
| 1809 | FillPosition(unaryExpr.Ptr()); |
| 1810 | unaryExpr->Operator = GetOpFromToken(token); |
| 1811 | if (unaryExpr->Operator == Operator::PostInc) |
| 1812 | unaryExpr->Operator = Operator::PreInc; |
| 1813 | else if (unaryExpr->Operator == Operator::PostDec) |
| 1814 | unaryExpr->Operator = Operator::PreDec; |
| 1815 | else if (unaryExpr->Operator == Operator::Sub) |
| 1816 | unaryExpr->Operator = Operator::Neg; |
| 1817 | |
| 1818 | unaryExpr->Expression = ParseLeafExpression(); |
| 1819 | rs = unaryExpr; |
| 1820 | return rs; |
| 1821 | } |
| 1822 | |
| 1823 | if (LookAheadToken(TokenType::LParent)) |
| 1824 | { |
| 1825 | ReadToken(TokenType::LParent); |
| 1826 | RefPtr<ExpressionSyntaxNode> expr; |
| 1827 | if (IsTypeKeyword() && LookAheadToken(TokenType::RParent, 1)) |
| 1828 | { |
| 1829 | RefPtr<TypeCastExpressionSyntaxNode> tcexpr = new TypeCastExpressionSyntaxNode(); |
| 1830 | FillPosition(tcexpr.Ptr()); |
| 1831 | tcexpr->TargetType = ParseType(); |
| 1832 | ReadToken(TokenType::RParent); |
| 1833 | tcexpr->Expression = ParseExpression(); |
| 1834 | expr = tcexpr; |
| 1835 | } |
| 1836 | else |
| 1837 | { |
| 1838 | expr = ParseExpression(); |
| 1839 | ReadToken(TokenType::RParent); |
| 1840 | } |
| 1841 | rs = expr; |
| 1842 | } |
| 1843 | else if (LookAheadToken(TokenType::IntLiterial) || |
| 1844 | LookAheadToken(TokenType::DoubleLiterial)) |
| 1845 | { |
nothing calls this directly
no test coverage detected