Add unary plus

This commit is contained in:
Sofia 2026-04-28 01:05:02 +03:00
parent 5b776a1d66
commit 4a0257c771
3 changed files with 15 additions and 0 deletions

View File

@ -187,6 +187,12 @@ namespace types {
return builder.builder->CreateNeg(value, "neg"); return builder.builder->CreateNeg(value, "neg");
} }
}); });
definitions.push_back(UnopDefinition{
ty, types::Unary::Plus, ty,
[](codegen::Builder&, std::shared_ptr<Type>, llvm::Value* value) {
return value;
}
});
} }
return definitions; return definitions;

View File

@ -22,6 +22,7 @@ namespace types {
SubPrefix, SubPrefix,
Not, Not,
Negation, Negation,
Plus,
}; };
int operator_precedence(BinOp& op); int operator_precedence(BinOp& op);

View File

@ -349,6 +349,14 @@ namespace parsing {
new AST::UnaryExpression(before_meta + inner.metadata(), std::move(expr), types::Unary::Negation) new AST::UnaryExpression(before_meta + inner.metadata(), std::move(expr), types::Unary::Negation)
}; };
} }
else if (inner.peek().content == "+") {
inner.next();
auto expr = parse_primary_expression(inner, scope).unwrap();
stream.m_position = inner.m_position;
return std::unique_ptr<AST::Expression> {
new AST::UnaryExpression(before_meta + inner.metadata(), std::move(expr), types::Unary::Plus)
};
}
auto plain_expr = parse_plain_expression(inner, scope); auto plain_expr = parse_plain_expression(inner, scope);
while (inner.peek().content == "(" || inner.peek().content == "[" || inner.peek().content == ".") { while (inner.peek().content == "(" || inner.peek().content == "[" || inner.peek().content == ".") {