From 114f8880fb4252c3539933513fee768cfc33040f Mon Sep 17 00:00:00 2001 From: sinkuu Date: Wed, 9 Jul 2014 16:30:28 +0900 Subject: [PATCH 1/5] Fix dub.json, and remove library configuration excludedSouceFiles is for preventing conflict --- dub.json | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/dub.json b/dub.json index c67d6fb..ff26bbd 100644 --- a/dub.json +++ b/dub.json @@ -1,20 +1,10 @@ { - "name": "dscanner", - "description": "Swiss-army knife for D source code", - "copyright": "© Brian Schott", - "authors": ["Brian Schott"], - "importPaths": ["."], + "name": "dscanner", + "description": "Swiss-army knife for D source code", + "copyright": "© Brian Schott", + "authors": ["Brian Schott"], "license" : "Boost Software License - Version 1.0", - "configurations": [ - { - "name": "library", - "targetType": "library", - "sourcePaths": ["std"], - }, - { - "name": "dscanner", - "targetType": "executable", - "sourcePaths": ["."], - }, - ], + "targetType": "executable", + "sourcePaths": ["."], + "excludedSourceFiles": ["inifiled/inifiled.d", "inifiled/test.d"], } From 0acd33f48ba58dad5a24254b437ad1eab382ad36 Mon Sep 17 00:00:00 2001 From: sinkuu Date: Wed, 9 Jul 2014 18:10:50 +0900 Subject: [PATCH 2/5] Fix PokemonExceptionCheck causes segfault on nested attributes --- analysis/pokemon.d | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/analysis/pokemon.d b/analysis/pokemon.d index 640f0cb..3868c28 100644 --- a/analysis/pokemon.d +++ b/analysis/pokemon.d @@ -40,17 +40,35 @@ class PokemonExceptionCheck : BaseAnalyzer lc.accept(this); } + bool ignoreType = true; + override void visit(const Catch c) { - if (c.type.type2.symbol.identifierOrTemplateChain.identifiersOrTemplateInstances.length != 1) + ignoreType = false; + c.type.accept(this); + ignoreType = true; + + c.accept(this); + } + + + override void visit(const Type2 type2) + { + if (ignoreType) return; + + if (type2.type !is null) { - c.accept(this); + type2.type.accept(this); return; } - auto identOrTemplate = c.type.type2.symbol.identifierOrTemplateChain.identifiersOrTemplateInstances[0]; + + if (type2.symbol.identifierOrTemplateChain.identifiersOrTemplateInstances.length != 1) + { + return; + } + auto identOrTemplate = type2.symbol.identifierOrTemplateChain.identifiersOrTemplateInstances[0]; if (identOrTemplate.templateInstance !is null) { - c.accept(this); return; } if (identOrTemplate.identifier.text == "Throwable" @@ -60,7 +78,6 @@ class PokemonExceptionCheck : BaseAnalyzer immutable line = identOrTemplate.identifier.line; addErrorMessage(line, column, message); } - c.accept(this); } } @@ -83,6 +100,10 @@ unittest catch (Exception err) // ok { + } + catch (shared(Exception) err) // ok + { + } catch (Error err) // [warn]: Catching Error or Throwable is almost always a bad idea. { @@ -91,9 +112,14 @@ unittest catch (Throwable err) // [warn]: Catching Error or Throwable is almost always a bad idea. { + } + catch (shared(Error) err) // [warn]: Catching Error or Throwable is almost always a bad idea. + { + } catch // [warn]: Catching Error or Throwable is almost always a bad idea. { + } } }c, sac); From 8623c27498b696e5acfff0ec7d20f03b29035c76 Mon Sep 17 00:00:00 2001 From: sinkuu Date: Wed, 9 Jul 2014 18:27:19 +0900 Subject: [PATCH 3/5] Fix BackwardsRangeCheck fails on noninteger slice --- analysis/range.d | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/analysis/range.d b/analysis/range.d index 3f37fae..0722329 100644 --- a/analysis/range.d +++ b/analysis/range.d @@ -74,18 +74,23 @@ class BackwardsRangeCheck : BaseAnalyzer override void visit(const PrimaryExpression primary) { + import std.conv; + if (state == State.ignore || !isNumberLiteral(primary.primary.type)) return; if (state == State.left) { line = primary.primary.line; this.column = primary.primary.column; - left = parseNumber(primary.primary.text); + + try left = parseNumber(primary.primary.text); + catch (ConvException e) return; hasLeft = true; } else { - right = parseNumber(primary.primary.text); + try right = parseNumber(primary.primary.text); + catch (ConvException e) return; hasRight = true; } } From c8704d7bcc61b899e53fc1852d6d98f4c706ab1c Mon Sep 17 00:00:00 2001 From: sinkuu Date: Sat, 12 Jul 2014 14:00:22 +0900 Subject: [PATCH 4/5] Fix prefix/suffix of unaryExpression in AST xml --- astprinter.d | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/astprinter.d b/astprinter.d index 1db3d3f..8dd825e 100644 --- a/astprinter.d +++ b/astprinter.d @@ -1422,14 +1422,15 @@ class XMLPrinter : ASTVisitor output.writeln(""); if (unaryExpression.prefix != tok!"") { - output.writeln("", xmlEscape(unaryExpression.prefix.text), + output.writeln("", xmlEscape(str(unaryExpression.prefix.type)), ""); unaryExpression.unaryExpression.accept(this); } if (unaryExpression.suffix != tok!"") { + assert(unaryExpression.suffix.text == ""); unaryExpression.unaryExpression.accept(this); - output.writeln("", unaryExpression.suffix.text, + output.writeln("", str(unaryExpression.suffix.type), ""); } else From 7fbc7d0ea5dbb12afa252c12682a81b3bbc82281 Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Thu, 17 Jul 2014 03:28:21 -0700 Subject: [PATCH 5/5] Fix Windows build --- build.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.bat b/build.bat index 2f8caf4..c618228 100644 --- a/build.bat +++ b/build.bat @@ -9,8 +9,8 @@ set ANALYSIS= set INIFILED= for %%x in (*.d) do set CORE=!CORE! %%x -for %%x in (std/*.d) do set STD=!STD! std/%%x -for %%x in (std/d/*.d) do set STDD=!STDD! std/d/%%x +for %%x in (libdparse/src/std/*.d) do set STD=!STD! libdparse/src/std/%%x +for %%x in (libdparse/src/std/d/*.d) do set STDD=!STDD! libdparse/src/std/d/%%x for %%x in (analysis/*.d) do set ANALYSIS=!ANALYSIS! analysis/%%x for %%x in (inifiled/source/*.d) do set INIFILED=!INIFILED! inifiled/source/%%x