Parse ref/deref/parenthesis
This commit is contained in:
parent
78c5ab4c25
commit
d4016e3ab7
@ -101,6 +101,14 @@ namespace parsing {
|
|||||||
try {
|
try {
|
||||||
auto before_meta = inner.metadata();
|
auto before_meta = inner.metadata();
|
||||||
|
|
||||||
|
if (inner.peek().content == "(") {
|
||||||
|
inner.next();
|
||||||
|
auto expr = parse_expression(inner).unwrap();
|
||||||
|
inner.expect(token::Type::Symbol, ")");
|
||||||
|
stream.m_position = inner.m_position;
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
|
||||||
if (auto cast = parse_cast(inner); cast.ok()) {
|
if (auto cast = parse_cast(inner); cast.ok()) {
|
||||||
auto expr = parse_expression(inner).unwrap();
|
auto expr = parse_expression(inner).unwrap();
|
||||||
stream.m_position = inner.m_position;
|
stream.m_position = inner.m_position;
|
||||||
@ -112,6 +120,22 @@ namespace parsing {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if (inner.peek().content == "&") {
|
||||||
|
inner.next();
|
||||||
|
auto expr = parse_expression(inner).unwrap();
|
||||||
|
stream.m_position = inner.m_position;
|
||||||
|
return std::unique_ptr<AST::Expression> {
|
||||||
|
new AST::RefExpression(before_meta + inner.metadata(), std::move(expr))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if (inner.peek().content == "*") {
|
||||||
|
inner.next();
|
||||||
|
auto expr = parse_expression(inner).unwrap();
|
||||||
|
stream.m_position = inner.m_position;
|
||||||
|
return std::unique_ptr<AST::Expression> {
|
||||||
|
new AST::DerefExpression(before_meta + inner.metadata(), std::move(expr))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
auto plain_expr = parse_plain_expression(inner);
|
auto plain_expr = parse_plain_expression(inner);
|
||||||
while (inner.peek().content == "(") {
|
while (inner.peek().content == "(") {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user