diff --git a/src/parsing.cpp b/src/parsing.cpp index 865e744..e503768 100644 --- a/src/parsing.cpp +++ b/src/parsing.cpp @@ -101,6 +101,14 @@ namespace parsing { try { 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()) { auto expr = parse_expression(inner).unwrap(); 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 { + 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 { + new AST::DerefExpression(before_meta + inner.metadata(), std::move(expr)) + }; + } auto plain_expr = parse_plain_expression(inner); while (inner.peek().content == "(") { diff --git a/test.c b/test.c index 07dac4b..ace45a0 100644 --- a/test.c +++ b/test.c @@ -10,6 +10,6 @@ int main() { printf("10th fibonacci number is %d!", fibonacci(10)); char res = 0; char* test = &res; - *test = 15; + (*test) = 15; return res; } \ No newline at end of file