Remove the paren expression
Signed-off-by: CHatingPython <chatingpython@gmail.com>
This commit is contained in:
@@ -94,26 +94,6 @@ private:
|
|||||||
|
|
||||||
using binop_expression_node_h = node_handle<binop_expression_node>;
|
using binop_expression_node_h = node_handle<binop_expression_node>;
|
||||||
|
|
||||||
class paren_expression_node : public expression_node {
|
|
||||||
public:
|
|
||||||
paren_expression_node(expression_node_h&& node)
|
|
||||||
: m_node(std::move(node)) {}
|
|
||||||
|
|
||||||
const expression_node_h& get_node() const { return m_node; }
|
|
||||||
expression_node_h& get_node() { return m_node; }
|
|
||||||
expression_node_h&& move_node() { return std::move(m_node); }
|
|
||||||
public:
|
|
||||||
expression_node_t expression_type() const override { return expression_node_t::Paren; }
|
|
||||||
|
|
||||||
std::ostream& print(std::ostream& os) const override;
|
|
||||||
protected:
|
|
||||||
bool equal(const node& rhs) const override;
|
|
||||||
private:
|
|
||||||
expression_node_h m_node;
|
|
||||||
};
|
|
||||||
|
|
||||||
using paren_expression_node_h = node_handle<paren_expression_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -82,15 +82,6 @@ bool binop_expression_node::equal(const node& rhsNode) const {
|
|||||||
return expression_node::equal(rhsNode) && m_type == rhs.m_type && m_lhs == rhs.m_lhs && m_rhs == rhs.m_rhs;
|
return expression_node::equal(rhsNode) && m_type == rhs.m_type && m_lhs == rhs.m_lhs && m_rhs == rhs.m_rhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& paren_expression_node::print(std::ostream& os) const {
|
|
||||||
return os << *m_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool paren_expression_node::equal(const node& rhsNode) const {
|
|
||||||
const auto& rhs = reinterpret_cast<const paren_expression_node&>(rhsNode);
|
|
||||||
return expression_node::equal(rhsNode) && m_node == rhs.m_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool declaration_node::equal(const node& rhs) const {
|
bool declaration_node::equal(const node& rhs) const {
|
||||||
return declaration_type() == reinterpret_cast<const declaration_node&>(rhs).declaration_type();
|
return declaration_type() == reinterpret_cast<const declaration_node&>(rhs).declaration_type();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ ast::expression_node_h parser::parse_expression_primary() {
|
|||||||
auto node = parse_expression();
|
auto node = parse_expression();
|
||||||
auto err = eat_token(token_t::Rparen);
|
auto err = eat_token(token_t::Rparen);
|
||||||
if (err.has_error()) return err;
|
if (err.has_error()) return err;
|
||||||
return ast::paren_expression_node_h{ tok.location(), m_arena, std::move(node) };
|
return node;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
auto literal = parse_literal();
|
auto literal = parse_literal();
|
||||||
|
|||||||
@@ -200,11 +200,8 @@ TEST(Parser, Paren) {
|
|||||||
unaryop_expression_node_h dec = retVal;
|
unaryop_expression_node_h dec = retVal;
|
||||||
EXPECT_EQ(dec->type(), unaryop_expression_node_t::PrefixDecrement);
|
EXPECT_EQ(dec->type(), unaryop_expression_node_t::PrefixDecrement);
|
||||||
|
|
||||||
EXPECT_EQ(dec->get_node()->expression_type(), expression_node_t::Paren);
|
EXPECT_EQ(dec->get_node()->expression_type(), expression_node_t::Unaryop);
|
||||||
paren_expression_node_h paren = dec->get_node();
|
unaryop_expression_node_h inc = dec->get_node();
|
||||||
|
|
||||||
EXPECT_EQ(paren->get_node()->expression_type(), expression_node_t::Unaryop);
|
|
||||||
unaryop_expression_node_h inc = paren->get_node();
|
|
||||||
EXPECT_EQ(inc->type(), unaryop_expression_node_t::PostfixIncrement);
|
EXPECT_EQ(inc->type(), unaryop_expression_node_t::PostfixIncrement);
|
||||||
EXPECT_INTLIT(inc->get_node(), 5);
|
EXPECT_INTLIT(inc->get_node(), 5);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user