This commit is contained in:
Hackerpilot 2015-09-18 05:22:03 -07:00
parent c09abbdab6
commit 27a423e3fa
6 changed files with 25 additions and 11 deletions

@ -1 +1 @@
Subproject commit a059356c94e949625417ea98c9c1c59186fa285f
Subproject commit b5791923695c755aae9cf313555fd20c5b0993d9

View File

@ -24,7 +24,7 @@ class CommaExpressionCheck : BaseAnalyzer
override void visit(const Expression ex)
{
if (ex.items.length > 1)
if (ex.items.length > 1 && interest > 0)
{
addErrorMessage(ex.line, ex.column, KEY,
"Avoid using the comma expression.");
@ -32,5 +32,19 @@ class CommaExpressionCheck : BaseAnalyzer
ex.accept(this);
}
override void visit(const AssignExpression ex)
{
++interest;
ex.accept(this);
--interest;
}
invariant
{
assert(interest >= 0);
}
int interest;
private enum KEY = "dscanner.suspicious.comma_expression";
}

View File

@ -40,7 +40,7 @@ class IfElseSameCheck : BaseAnalyzer
override void visit(const AssignExpression assignExpression)
{
const AssignExpression e = cast(const AssignExpression) assignExpression.assignExpression;
auto e = cast(const AssignExpression) (cast(const Expression) assignExpression.expression).items[$ - 1];
if (e !is null && assignExpression.operator == tok!"="
&& e.ternaryExpression == assignExpression.ternaryExpression)
{

View File

@ -93,7 +93,7 @@ class UnmodifiedFinder:BaseAnalyzer
assignExpression.ternaryExpression.accept(this);
guaranteeUse--;
interest--;
assignExpression.assignExpression.accept(this);
assignExpression.expression.accept(this);
}
else
assignExpression.accept(this);

View File

@ -154,17 +154,17 @@ class UnusedVariableCheck : BaseAnalyzer
override void visit(const AssignExpression assignExp)
{
assignExp.ternaryExpression.accept(this);
if (assignExp.assignExpression !is null)
if (assignExp.expression !is null)
{
interestDepth++;
assignExp.assignExpression.accept(this);
assignExp.expression.accept(this);
interestDepth--;
}
}
override void visit(const TemplateDeclaration templateDeclaration)
{
auto inAgg = inAggregateScope;
immutable inAgg = inAggregateScope;
inAggregateScope = true;
templateDeclaration.accept(this);
inAggregateScope = inAgg;

View File

@ -113,13 +113,13 @@ class XMLPrinter : ASTVisitor
override void visit(const AssignExpression assignExpression)
{
if (assignExpression.assignExpression is null)
output.writeln("<assignExpression>");
if (assignExpression.expression is null)
output.writeln("<expression>");
else
output.writeln("<assignExpression operator=\"",
output.writeln("<expression operator=\"",
xmlAttributeEscape(str(assignExpression.operator)), "\">");
assignExpression.accept(this);
output.writeln("</assignExpression>");
output.writeln("</expression>");
}
override void visit(const AtAttribute atAttribute)