Add unary plus
This commit is contained in:
parent
5b776a1d66
commit
4a0257c771
@ -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;
|
||||||
|
|||||||
@ -22,6 +22,7 @@ namespace types {
|
|||||||
SubPrefix,
|
SubPrefix,
|
||||||
Not,
|
Not,
|
||||||
Negation,
|
Negation,
|
||||||
|
Plus,
|
||||||
};
|
};
|
||||||
|
|
||||||
int operator_precedence(BinOp& op);
|
int operator_precedence(BinOp& op);
|
||||||
|
|||||||
@ -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 == ".") {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user