mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
Improve error messages for opUnary
(#20801)
This commit is contained in:
parent
06e0096aca
commit
06d0cfe2ba
5 changed files with 192 additions and 173 deletions
|
@ -8857,9 +8857,8 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
|
|||
result = exp.incompatibleTypes();
|
||||
return;
|
||||
}
|
||||
if (exp.e1.checkNoBool())
|
||||
return setError();
|
||||
if (exp.e1.checkArithmetic(exp.op) ||
|
||||
if (exp.e1.checkNoBool() ||
|
||||
exp.e1.checkArithmetic(exp.op) ||
|
||||
exp.e1.checkSharedAccess(sc))
|
||||
return setError();
|
||||
|
||||
|
@ -8885,11 +8884,10 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
|
|||
result = exp.incompatibleTypes();
|
||||
return;
|
||||
}
|
||||
if (exp.e1.checkNoBool())
|
||||
return setError();
|
||||
if (exp.e1.checkArithmetic(exp.op))
|
||||
return setError();
|
||||
if (exp.e1.checkSharedAccess(sc))
|
||||
|
||||
if (exp.e1.checkNoBool() ||
|
||||
exp.e1.checkArithmetic(exp.op) ||
|
||||
exp.e1.checkSharedAccess(sc))
|
||||
return setError();
|
||||
|
||||
result = exp.e1;
|
||||
|
@ -8922,9 +8920,8 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
|
|||
result = exp.incompatibleTypes();
|
||||
return;
|
||||
}
|
||||
if (exp.e1.checkNoBool())
|
||||
return setError();
|
||||
if (exp.e1.checkIntegral() ||
|
||||
if (exp.e1.checkNoBool() ||
|
||||
exp.e1.checkIntegral() ||
|
||||
exp.e1.checkSharedAccess(sc))
|
||||
return setError();
|
||||
|
||||
|
|
|
@ -293,6 +293,16 @@ Expression opOverloadUnary(UnaExp e, Scope* sc)
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// For ++ and --, rewrites to += and -= are also tried, so don't error yet
|
||||
if (!e.isPreExp())
|
||||
{
|
||||
error(e.loc, "operator `%s` is not defined for `%s`", EXPtoString(e.op).ptr, ad.toChars());
|
||||
errorSupplemental(ad.loc, "perhaps overload the operator with `auto opUnary(string op : \"%s\")() {}`",
|
||||
EXPtoString(e.op).ptr);
|
||||
return ErrorExp.get();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue