Userdata equality should always be valid to check, even when no explicit operator is given for it
This commit is contained in:
parent
bd343c1b7e
commit
ff4af34478
|
@ -421,21 +421,26 @@ namespace Porygon::Binder {
|
||||||
|
|
||||||
auto boundLeftType = boundLeft->GetType();
|
auto boundLeftType = boundLeft->GetType();
|
||||||
auto boundRightType = boundRight->GetType();
|
auto boundRightType = boundRight->GetType();
|
||||||
|
auto kind = expression->GetOperatorKind();
|
||||||
|
|
||||||
if (boundLeftType->GetClass() == TypeClass::UserData){
|
if (boundLeftType->GetClass() == TypeClass::UserData){
|
||||||
auto ud = dynamic_pointer_cast<const UserData::UserDataScriptType>(boundLeftType);
|
auto ud = dynamic_pointer_cast<const UserData::UserDataScriptType>(boundLeftType);
|
||||||
auto op = ud->GetUserData()->Get()->GetBinaryOperation(expression->GetOperatorKind(), boundRightType);
|
auto op = ud->GetUserData()->Get()->GetBinaryOperation(kind, boundRightType);
|
||||||
if (op == nullptr){
|
if (op == nullptr){
|
||||||
this->_scriptData->Diagnostics->LogError(Diagnostics::DiagnosticCode::NoBinaryOperationFound,
|
if (kind != BinaryOperatorKind::Equality && kind != BinaryOperatorKind::Inequality){
|
||||||
expression->GetStartPosition(),
|
this->_scriptData->Diagnostics->LogError(Diagnostics::DiagnosticCode::NoBinaryOperationFound,
|
||||||
expression->GetLength());
|
expression->GetStartPosition(),
|
||||||
return new BoundBadExpression(expression->GetStartPosition(), expression->GetLength());
|
expression->GetLength());
|
||||||
|
return new BoundBadExpression(expression->GetStartPosition(), expression->GetLength());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return new BoundUserdataBinaryExpression(boundLeft, boundRight, op, op->GetReturnType(),
|
||||||
|
expression->GetStartPosition(), expression->GetLength());
|
||||||
}
|
}
|
||||||
return new BoundUserdataBinaryExpression(boundLeft, boundRight, op, op->GetReturnType(),
|
|
||||||
expression->GetStartPosition(), expression->GetLength());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (expression->GetOperatorKind()) {
|
switch (kind) {
|
||||||
case BinaryOperatorKind::Addition:
|
case BinaryOperatorKind::Addition:
|
||||||
if (boundLeftType->GetClass() == TypeClass::Number && boundRightType->GetClass() == TypeClass::Number) {
|
if (boundLeftType->GetClass() == TypeClass::Number && boundRightType->GetClass() == TypeClass::Number) {
|
||||||
auto leftNumeric = std::static_pointer_cast<const NumericScriptType>(boundLeftType);
|
auto leftNumeric = std::static_pointer_cast<const NumericScriptType>(boundLeftType);
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace Porygon::UserData {
|
||||||
delete _userData;
|
delete _userData;
|
||||||
}
|
}
|
||||||
|
|
||||||
RetrievedUserData* GetUserData() const{
|
[[nodiscard]] RetrievedUserData* GetUserData() const{
|
||||||
return _userData;
|
return _userData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace Porygon::UserData {
|
||||||
_obj = obj;
|
_obj = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
~UserDataValue(){
|
~UserDataValue() final{
|
||||||
delete _userData;
|
delete _userData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ namespace Porygon::UserData {
|
||||||
delete value;
|
delete value;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* GetObjectPointer() const{
|
[[nodiscard]] inline void* GetObjectPointer() const{
|
||||||
return _obj;
|
return _obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue