adlint 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/AUTHORS +3 -2
  2. data/ChangeLog +208 -63
  3. data/MANIFEST +4 -0
  4. data/NEWS +24 -5
  5. data/etc/conf.d/fallback/traits.erb +1 -1
  6. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +1 -1
  7. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +1 -1
  8. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +1 -1
  9. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +1 -1
  10. data/etc/mesg.d/en_US/messages.yml +3 -3
  11. data/etc/mesg.d/ja_JP/messages.yml +4 -4
  12. data/lib/adlint/c/builtin.rb +3 -3
  13. data/lib/adlint/c/ctrlexpr.rb +7 -11
  14. data/lib/adlint/c/expr.rb +548 -363
  15. data/lib/adlint/c/interp.rb +233 -525
  16. data/lib/adlint/c/mediator.rb +1 -0
  17. data/lib/adlint/c/message.rb +144 -1
  18. data/lib/adlint/c/object.rb +15 -6
  19. data/lib/adlint/c/parser.rb +170 -128
  20. data/lib/adlint/c/parser.y +36 -0
  21. data/lib/adlint/c/phase.rb +4 -0
  22. data/lib/adlint/c/seqp.rb +72 -0
  23. data/lib/adlint/c/syntax.rb +254 -3
  24. data/lib/adlint/c.rb +1 -0
  25. data/lib/adlint/cpp/code.rb +2 -2
  26. data/lib/adlint/cpp/eval.rb +29 -13
  27. data/lib/adlint/cpp/message.rb +71 -70
  28. data/lib/adlint/cpp/message_shima.rb +100 -0
  29. data/lib/adlint/cpp/phase.rb +4 -0
  30. data/lib/adlint/cpp/syntax.rb +5 -1
  31. data/lib/adlint/cpp.rb +1 -0
  32. data/lib/adlint/message.rb +6 -3
  33. data/lib/adlint/traits.rb +1 -1
  34. data/lib/adlint/version.rb +5 -5
  35. data/share/demo/Makefile +3 -1
  36. data/share/demo/bad_line/bad_line.c +27 -0
  37. data/share/demo/sequence_point/sequence_point.c +31 -0
  38. data/share/doc/adlint_on_vim_en.png +0 -0
  39. data/share/doc/adlint_on_vim_ja.png +0 -0
  40. data/share/doc/developers_guide_ja.html +3 -3
  41. data/share/doc/developers_guide_ja.texi +1 -1
  42. data/share/doc/users_guide_en.html +3118 -41
  43. data/share/doc/users_guide_en.texi +3090 -37
  44. data/share/doc/users_guide_ja.html +3120 -47
  45. data/share/doc/users_guide_ja.texi +3106 -65
  46. data/share/sample/ctags-5.8/adlint/GNUmakefile +13 -1
  47. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +14 -2
  48. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +14 -4
  49. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +14 -1
  50. data/share/sample/flex-2.5.35/adlint/GNUmakefile +13 -1
  51. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +14 -2
  52. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +14 -4
  53. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +14 -1
  54. metadata +6 -2
data/NEWS CHANGED
@@ -21,18 +21,37 @@
21
21
 
22
22
  ++
23
23
 
24
+ === \AdLint 1.2.0 is released (2012-03-21)
25
+
26
+ ==== Changes since the 1.0.0 release
27
+
28
+ * Add W0597 detection
29
+ * Add W0598 detection
30
+ * Add W0599 detection
31
+ * Add W0600 detection
32
+ * Add W0688 detection
33
+ * Add W0689 detection
34
+ * Add W0690 detection
35
+ * Change schema version validation method of input YAML files
36
+ * Clarify message text of W0459 and W0460
37
+ * Revise specification of W0459 and W0460 detections not to warn when a pointer
38
+ argument points to an uninitialized object
39
+ * Fix bad FN_UNUV metric measurement
40
+ * Update the user's guide in Japanese
41
+ * Update the user's guide in English
42
+
43
+ See the file
44
+ {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
45
+ for more details.
46
+
24
47
  === \AdLint 1.0.0 is released (2012-02-28)
25
48
 
26
49
  This is the initial GA release of \AdLint.
27
50
 
28
- ==== Implemented Features
51
+ ==== Implemented features
29
52
 
30
53
  * Single module analysis
31
54
  * Cross module analysis
32
55
  * 597 kinds of warning detections
33
56
  * 14 kinds of code structure extractions
34
57
  * 15 kinds of quality metric measurements
35
-
36
- See the file
37
- {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
38
- for more details.
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Schema version of the traits file.
10
10
  # DO NOT EDIT MANUALLY!
11
- version: "<%= AdLint::SHORT_VERSION %>"
11
+ version: "<%= AdLint::TRAITS_SCHEMA_VERSION %>"
12
12
 
13
13
  #
14
14
  # Project specific traits section
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Schema version of the traits file.
10
10
  # DO NOT EDIT MANUALLY!
11
- version: "<%= AdLint::SHORT_VERSION %>"
11
+ version: "<%= AdLint::TRAITS_SCHEMA_VERSION %>"
12
12
 
13
13
  #
14
14
  # Project specific traits section
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Schema version of the traits file.
10
10
  # DO NOT EDIT MANUALLY!
11
- version: "<%= AdLint::SHORT_VERSION %>"
11
+ version: "<%= AdLint::TRAITS_SCHEMA_VERSION %>"
12
12
 
13
13
  #
14
14
  # Project specific traits section
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Schema version of the traits file.
10
10
  # DO NOT EDIT MANUALLY!
11
- version: "<%= AdLint::SHORT_VERSION %>"
11
+ version: "<%= AdLint::TRAITS_SCHEMA_VERSION %>"
12
12
 
13
13
  #
14
14
  # Project specific traits section
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Schema version of the traits file.
10
10
  # DO NOT EDIT MANUALLY!
11
- version: "<%= AdLint::SHORT_VERSION %>"
11
+ version: "<%= AdLint::TRAITS_SCHEMA_VERSION %>"
12
12
 
13
13
  #
14
14
  # Project specific traits section
@@ -36,7 +36,7 @@
36
36
  # X9999: "Your custom message for the fatal error of #9999."
37
37
  # E9999: "Your custom message for the error of #9999."
38
38
 
39
- version: "1.0.0"
39
+ version: "1.2.0"
40
40
 
41
41
  message_definition:
42
42
  X0001: "An unknown exception `%s' is found."
@@ -458,8 +458,8 @@ message_definition:
458
458
  W0456: "An object or a function `%s which has external coupling is defined in a header file."
459
459
  W0457: "The return value doesn't define explicitly in the function declaration or definition. It defined as 'int' implicitly."
460
460
  W0458: "The type doesn't define explicitly in the object declaration or definition. It defined as 'int' implicitly."
461
- W0459: "A value of variable `%s' doesn't set in this position. This program is danger."
462
- W0460: "A value of variable `%s' wouldn't set in this position."
461
+ W0459: "A value of variable `%s' doesn't set when this expression is evaluated. This program is danger."
462
+ W0460: "A value of variable `%s' wouldn't set when this expression is evaluated."
463
463
  W0461: "A pointer which points the undetermined variable is used for the actual argument of the function. This program is danger."
464
464
  W0462: "A pointer which the value will probably not set is used for the actual argument of the function."
465
465
  W0463: "UNUSABLE"
@@ -36,7 +36,7 @@
36
36
  # X9999: "Your custom message for the fatal error of #9999."
37
37
  # E9999: "Your custom message for the error of #9999."
38
38
 
39
- version: "1.0.0"
39
+ version: "1.2.0"
40
40
 
41
41
  message_definition:
42
42
  X0001: "不明な例外条件 `%s' を検出しました。"
@@ -458,8 +458,8 @@ message_definition:
458
458
  W0456: "外部結合を持つオブジェクトあるいは関数 `%s' が、ヘッダファイル内で定義されています。"
459
459
  W0457: "関数の宣言あるいは定義で、戻り値型が明示的に定義されていないので、暗黙的に int 型と定義されます。"
460
460
  W0458: "オブジェクトの宣言あるいは定義で、型が明示的に定義されていないので、暗黙的に int 型と定義されます。"
461
- W0459: "変数 `%s' の値は、この位置では設定されていません。このプログラムは危険です。"
462
- W0460: "変数 `%s' の値は、この位置では設定されていないことがあります。"
461
+ W0459: "変数 `%s' の値は、この式の評価時点では設定されていません。このプログラムは危険です。"
462
+ W0460: "変数 `%s' の値は、この式の評価時点では設定されていないことがあります。"
463
463
  W0461: "値が定まっていない変数を指すポインタを関数の実引数として使っています。このプログラムは危険です。"
464
464
  W0462: "値が設定されていないことがありうる変数を指すポインタを関数の実引数として使っています。"
465
465
  W0463: "使用不可"
@@ -615,7 +615,7 @@ message_definition:
615
615
  W0686: "走査セット(`[]' に囲まれた文字の並び)の中に同じ文字が二つ以上記述されています。"
616
616
  W0687: "defined 演算子を削除する目的で #undef を使っています。"
617
617
  W0688: "#line 指令の後に、1 から 32767 の範囲の行番号が記述されていません。"
618
- W0689: "#line 指令の構文が `#line 汎整数定数 \"文字列 \"' の形式と合っていません。"
618
+ W0689: "#line 指令の構文が `#line 汎整数定数 \"文字列\"' の形式と合っていません。"
619
619
  W0690: "#line 指令の後に行番号が記述されていません。"
620
620
  W0691: "`##' 演算子の結果が有効な前処理字句ではありません。"
621
621
  W0692: "関数形式マクロに実引数が与えられていません。"
@@ -48,7 +48,7 @@ module C #:nodoc:
48
48
  true
49
49
  end
50
50
 
51
- def call(interpreter, args)
51
+ def call(interpreter, funcall_expr, args)
52
52
  interpreter.temporary_variable(type.return_type)
53
53
  end
54
54
  end
@@ -58,7 +58,7 @@ module C #:nodoc:
58
58
  super(type_table, "__adlint__inspect")
59
59
  end
60
60
 
61
- def call(interpreter, args)
61
+ def call(interpreter, funcall_expr, args)
62
62
  puts "__adlint__inspect"
63
63
  args.each { |arg, expr| pp arg }
64
64
  puts "EOM"
@@ -71,7 +71,7 @@ module C #:nodoc:
71
71
  super(type_table, "__adlint__eval")
72
72
  end
73
73
 
74
- def call(interpreter, args)
74
+ def call(interpreter, funcall_expr, args)
75
75
  puts "__adlint__eval"
76
76
  char_array = interpreter.pointee_of(args.first.first)
77
77
  if char_array.type.array?
@@ -226,7 +226,7 @@ module C #:nodoc:
226
226
  object_narrowing, *arg_narrowings) do
227
227
  checkpoint(node.location)
228
228
 
229
- function_calling_context { object_narrowing.execute! }
229
+ object_narrowing.execute!
230
230
  args = arg_narrowings.map { |narrowing|
231
231
  narrowing.execute!; [narrowing.result, narrowing.node]
232
232
  }
@@ -276,8 +276,7 @@ module C #:nodoc:
276
276
  DelayedObjectDerivation.new(self, node, object_narrowing) do
277
277
  checkpoint(node.location)
278
278
 
279
- variable_reassigning_context { object_narrowing.execute! }
280
-
279
+ object_narrowing.execute!
281
280
  execute_postfix_increment_expression(node, object_narrowing.result)
282
281
  end
283
282
  end
@@ -290,8 +289,7 @@ module C #:nodoc:
290
289
  DelayedObjectDerivation.new(self, node, object_narrowing) do
291
290
  checkpoint(node.location)
292
291
 
293
- variable_reassigning_context { object_narrowing.execute! }
294
-
292
+ object_narrowing.execute!
295
293
  execute_postfix_decrement_expression(node, object_narrowing.result)
296
294
  end
297
295
  end
@@ -306,8 +304,7 @@ module C #:nodoc:
306
304
  DelayedObjectDerivation.new(self, node, object_narrowing) do
307
305
  checkpoint(node.location)
308
306
 
309
- variable_reassigning_context { object_narrowing.execute! }
310
-
307
+ object_narrowing.execute!
311
308
  execute_prefix_increment_expression(node, object_narrowing.result)
312
309
  end
313
310
  end
@@ -320,8 +317,7 @@ module C #:nodoc:
320
317
  DelayedObjectDerivation.new(self, node, object_narrowing) do
321
318
  checkpoint(node.location)
322
319
 
323
- variable_reassigning_context { object_narrowing.execute! }
324
-
320
+ object_narrowing.execute!
325
321
  execute_prefix_decrement_expression(node, object_narrowing.result)
326
322
  end
327
323
  end
@@ -524,7 +520,7 @@ module C #:nodoc:
524
520
  DelayedObjectDerivation.new(self, node, lhs_narrowing, rhs_narrowing) do
525
521
  checkpoint(node.location)
526
522
 
527
- variable_reassigning_context { lhs_narrowing.execute! }
523
+ lhs_narrowing.execute!
528
524
  rhs_narrowing.execute!
529
525
 
530
526
  execute_simple_assignment_expression(
@@ -541,7 +537,7 @@ module C #:nodoc:
541
537
  DelayedObjectDerivation.new(self, node, lhs_narrowing, rhs_narrowing) do
542
538
  checkpoint(node.location)
543
539
 
544
- variable_reassigning_context { lhs_narrowing.execute! }
540
+ lhs_narrowing.execute!
545
541
  rhs_narrowing.execute!
546
542
 
547
543
  execute_compound_assignment_expression(