OperationAnnotation::userDefinedFunction can be set only once

This commit is contained in:
wechman
2022-09-28 13:09:13 +02:00
parent 59c8ec0e65
commit c507d24a78
8 changed files with 40 additions and 24 deletions
+1 -1
View File
@@ -314,7 +314,7 @@ struct MemberAccessAnnotation: ExpressionAnnotation
struct OperationAnnotation: ExpressionAnnotation
{
FunctionDefinition const* userDefinedFunction = nullptr;
util::SetOnce<FunctionDefinition const*> userDefinedFunction;
};
struct BinaryOperationAnnotation: OperationAnnotation
+4 -4
View File
@@ -833,8 +833,8 @@ bool ASTJsonExporter::visit(UnaryOperation const& _node)
make_pair("operator", TokenTraits::toString(_node.getOperator())),
make_pair("subExpression", toJson(_node.subExpression()))
};
if (FunctionDefinition const* referencedDeclaration = _node.annotation().userDefinedFunction)
attributes.emplace_back("function", nodeId(*referencedDeclaration));
if (_node.annotation().userDefinedFunction.set())
attributes.emplace_back("function", nodeId(**_node.annotation().userDefinedFunction));
appendExpressionAttributes(attributes, _node.annotation());
setJsonNode(_node, "UnaryOperation", std::move(attributes));
return false;
@@ -848,8 +848,8 @@ bool ASTJsonExporter::visit(BinaryOperation const& _node)
make_pair("rightExpression", toJson(_node.rightExpression())),
make_pair("commonType", typePointerToJson(_node.annotation().commonType)),
};
if (FunctionDefinition const* function = _node.annotation().userDefinedFunction)
attributes.emplace_back("function", nodeId(*function));
if (_node.annotation().userDefinedFunction.set())
attributes.emplace_back("function", nodeId(**_node.annotation().userDefinedFunction));
appendExpressionAttributes(attributes, _node.annotation());
setJsonNode(_node, "BinaryOperation", std::move(attributes));
return false;