adlint 2.6.14 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. data/AUTHORS +1 -3
  2. data/ChangeLog +511 -0
  3. data/INSTALL +1 -1
  4. data/MANIFEST +57 -37
  5. data/NEWS +36 -7
  6. data/README +2 -2
  7. data/Rakefile +6 -6
  8. data/TODO +1 -1
  9. data/bin/adlint +25 -16
  10. data/bin/adlint_chk +22 -12
  11. data/bin/adlint_cma +17 -12
  12. data/bin/adlint_sma +22 -12
  13. data/bin/adlintize +98 -17
  14. data/etc/conf.d/fallback/cinit.erb +1 -1
  15. data/etc/conf.d/fallback/traits.erb +37 -37
  16. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
  17. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +41 -41
  18. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
  19. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +40 -40
  20. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
  21. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +40 -40
  22. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
  23. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +40 -40
  24. data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
  25. data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
  26. data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
  27. data/etc/conf.d/noarch/pinit.erb +1 -1
  28. data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
  29. data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +42 -42
  30. data/etc/mesg.d/c_builtin/en_US/messages.yml +33 -33
  31. data/etc/mesg.d/c_builtin/ja_JP/messages.yml +5 -5
  32. data/etc/mesg.d/core/en_US/messages.yml +2 -2
  33. data/etc/mesg.d/core/ja_JP/messages.yml +2 -2
  34. data/features/code_check/W0018.feature +197 -0
  35. data/features/code_check/W0019.feature +79 -0
  36. data/features/code_check/W0021.feature +81 -0
  37. data/features/code_check/W0023.feature +203 -0
  38. data/features/code_check/W0024.feature +226 -0
  39. data/features/code_check/W0025.feature +5 -0
  40. data/features/code_check/W0088.feature +2 -2
  41. data/features/code_check/W0109.feature +2 -2
  42. data/features/code_check/W0477.feature +0 -3
  43. data/features/code_check/W0478.feature +0 -1
  44. data/features/code_check/W0582.feature +3 -3
  45. data/features/code_check/W0583.feature +4 -7
  46. data/features/code_check/W0646.feature +0 -1
  47. data/features/code_check/W0695.feature +0 -1
  48. data/features/code_check/W0705.feature +8 -0
  49. data/features/code_check/W0723.feature +0 -1
  50. data/features/code_check/W0745.feature +1 -0
  51. data/features/code_check/W0781.feature +1 -0
  52. data/features/code_check/W1057.feature +141 -0
  53. data/features/code_check/W1058.feature +93 -0
  54. data/features/code_check/W1059.feature +86 -0
  55. data/features/code_check/W1060.feature +77 -0
  56. data/features/code_check/W1061.feature +143 -0
  57. data/features/code_check/W1062.feature +162 -0
  58. data/features/code_check/W1063.feature +123 -0
  59. data/features/code_check/W1064.feature +83 -0
  60. data/features/code_check/W1065.feature +82 -0
  61. data/features/code_check/W9003.feature +2 -0
  62. data/features/step_definitions/code_check_steps.rb +1 -0
  63. data/features/support/env.rb +16 -13
  64. data/lib/adlint.rb +7 -4
  65. data/lib/adlint/analyzer.rb +131 -157
  66. data/lib/adlint/annot.rb +149 -0
  67. data/lib/adlint/cc1.rb +57 -0
  68. data/lib/adlint/{c → cc1}/branch.rb +74 -62
  69. data/lib/adlint/{c → cc1}/builtin.rb +21 -21
  70. data/lib/adlint/{c → cc1}/const.rb +119 -117
  71. data/lib/adlint/{c → cc1}/conv.rb +76 -78
  72. data/lib/adlint/{c → cc1}/ctrlexpr.rb +69 -86
  73. data/lib/adlint/cc1/domain.rb +8103 -0
  74. data/lib/adlint/{c → cc1}/enum.rb +3 -3
  75. data/lib/adlint/{c → cc1}/environ.rb +21 -21
  76. data/lib/adlint/{c → cc1}/expr.rb +232 -218
  77. data/lib/adlint/{c → cc1}/format.rb +305 -342
  78. data/lib/adlint/{c → cc1}/interp.rb +269 -220
  79. data/lib/adlint/cc1/lexer.rb +246 -0
  80. data/lib/adlint/{c → cc1}/mediator.rb +78 -84
  81. data/lib/adlint/{c → cc1}/object.rb +261 -264
  82. data/lib/adlint/{c → cc1}/operator.rb +7 -7
  83. data/lib/adlint/{c → cc1}/option.rb +4 -3
  84. data/lib/adlint/{c → cc1}/parser.rb +274 -506
  85. data/lib/adlint/{c → cc1}/parser.y +69 -301
  86. data/lib/adlint/cc1/phase.rb +138 -0
  87. data/lib/adlint/{c → cc1}/resolver.rb +66 -78
  88. data/lib/adlint/{c → cc1}/scanner.rb +57 -49
  89. data/lib/adlint/{c → cc1}/scope.rb +3 -3
  90. data/lib/adlint/{c → cc1}/seqp.rb +13 -5
  91. data/lib/adlint/{c → cc1}/syntax.rb +819 -1122
  92. data/lib/adlint/{c → cc1}/type.rb +1498 -1479
  93. data/lib/adlint/{c → cc1}/util.rb +20 -12
  94. data/lib/adlint/{c → cc1}/value.rb +699 -642
  95. data/lib/adlint/code.rb +163 -164
  96. data/lib/adlint/cpp.rb +2 -2
  97. data/lib/adlint/cpp/asm.rb +13 -14
  98. data/lib/adlint/cpp/constexpr.rb +42 -38
  99. data/lib/adlint/cpp/constexpr.y +44 -40
  100. data/lib/adlint/cpp/eval.rb +435 -435
  101. data/lib/adlint/cpp/lexer.rb +343 -340
  102. data/lib/adlint/cpp/macro.rb +188 -190
  103. data/lib/adlint/cpp/phase.rb +66 -45
  104. data/lib/adlint/cpp/scanner.rb +14 -17
  105. data/lib/adlint/cpp/source.rb +49 -55
  106. data/lib/adlint/cpp/subst.rb +65 -65
  107. data/lib/adlint/cpp/syntax.rb +155 -275
  108. data/lib/adlint/cpp/util.rb +22 -19
  109. data/lib/adlint/driver.rb +86 -93
  110. data/lib/adlint/error.rb +33 -52
  111. data/lib/adlint/exam.rb +158 -24
  112. data/lib/adlint/exam/c_builtin.rb +7 -7
  113. data/lib/adlint/exam/c_builtin/cc1_check.rb +20522 -0
  114. data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +957 -0
  115. data/lib/adlint/exam/c_builtin/cc1_code.rb +459 -0
  116. data/lib/adlint/exam/c_builtin/cc1_metric.rb +794 -0
  117. data/lib/adlint/exam/c_builtin/cpp_check.rb +486 -441
  118. data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +36 -39
  119. data/lib/adlint/exam/c_builtin/cpp_code.rb +63 -65
  120. data/lib/adlint/exam/c_builtin/ld_check.rb +136 -129
  121. data/lib/adlint/exam/c_builtin/ld_metric.rb +11 -11
  122. data/lib/adlint/lang.rb +25 -25
  123. data/lib/adlint/ld.rb +2 -2
  124. data/lib/adlint/ld/object.rb +220 -188
  125. data/lib/adlint/ld/phase.rb +94 -63
  126. data/lib/adlint/ld/typedef.rb +22 -11
  127. data/lib/adlint/ld/util.rb +43 -35
  128. data/lib/adlint/lexer.rb +59 -56
  129. data/lib/adlint/location.rb +140 -0
  130. data/lib/adlint/memo.rb +157 -0
  131. data/lib/adlint/message.rb +207 -156
  132. data/lib/adlint/metric.rb +139 -217
  133. data/lib/adlint/monitor.rb +45 -43
  134. data/lib/adlint/phase.rb +56 -29
  135. data/lib/adlint/prelude.rb +66 -54
  136. data/lib/adlint/report.rb +253 -332
  137. data/lib/adlint/source.rb +26 -27
  138. data/lib/adlint/supp.rb +131 -0
  139. data/lib/adlint/symbol.rb +14 -16
  140. data/lib/adlint/token.rb +19 -91
  141. data/lib/adlint/traits.rb +242 -226
  142. data/lib/adlint/util.rb +116 -205
  143. data/lib/adlint/version.rb +8 -8
  144. data/share/HEADER +2 -2
  145. data/share/doc/developers_guide_ja.html +148 -19
  146. data/share/doc/developers_guide_ja.texi +141 -11
  147. data/share/doc/samples/GNUmakefile +1 -1
  148. data/share/doc/samples/adlint_traits.yml +45 -36
  149. data/share/doc/users_guide_en.html +1321 -1252
  150. data/share/doc/users_guide_en.texi +475 -408
  151. data/share/doc/users_guide_ja.html +1932 -1878
  152. data/share/doc/users_guide_ja.texi +324 -273
  153. data/share/sample/bison-2.5/adlint/GNUmakefile +5 -1
  154. data/share/sample/bison-2.5/adlint/adlint_traits.yml +38 -38
  155. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
  156. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
  157. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
  158. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +50 -42
  159. data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
  160. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
  161. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
  162. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +50 -42
  163. data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
  164. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
  165. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
  166. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +50 -42
  167. data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
  168. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
  169. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
  170. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +50 -42
  171. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
  172. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +46 -38
  173. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
  174. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
  175. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
  176. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +50 -42
  177. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
  178. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
  179. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
  180. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +50 -42
  181. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
  182. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
  183. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
  184. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +50 -42
  185. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
  186. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
  187. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
  188. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +50 -42
  189. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
  190. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
  191. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
  192. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +50 -42
  193. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
  194. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
  195. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
  196. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +50 -42
  197. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
  198. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
  199. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
  200. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +50 -42
  201. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
  202. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
  203. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
  204. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +50 -42
  205. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
  206. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
  207. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
  208. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +50 -42
  209. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
  210. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
  211. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
  212. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +50 -42
  213. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
  214. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
  215. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
  216. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +50 -42
  217. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
  218. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
  219. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
  220. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +50 -42
  221. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
  222. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
  223. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
  224. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +50 -42
  225. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
  226. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
  227. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
  228. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +50 -42
  229. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
  230. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
  231. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
  232. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +50 -42
  233. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
  234. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
  235. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
  236. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +50 -42
  237. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
  238. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
  239. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
  240. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +50 -42
  241. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
  242. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
  243. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
  244. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +50 -42
  245. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
  246. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
  247. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
  248. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +50 -42
  249. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
  250. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
  251. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
  252. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +50 -42
  253. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
  254. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
  255. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
  256. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +50 -42
  257. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
  258. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
  259. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
  260. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +50 -42
  261. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
  262. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
  263. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
  264. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +50 -42
  265. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +50 -42
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +50 -42
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +50 -42
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +50 -42
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +50 -42
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +50 -42
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +50 -42
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +50 -42
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +50 -42
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +50 -42
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +50 -42
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +50 -42
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +50 -42
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +50 -42
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +50 -42
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +50 -42
  329. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
  330. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
  331. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
  332. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +50 -42
  333. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
  334. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
  335. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
  336. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +50 -42
  337. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
  338. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
  339. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
  340. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +50 -42
  341. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
  342. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
  343. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
  344. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +50 -42
  345. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
  346. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
  347. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
  348. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +50 -42
  349. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
  350. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
  351. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
  352. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +50 -42
  353. data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
  354. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
  355. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
  356. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +50 -42
  357. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
  358. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
  359. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
  360. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +50 -42
  361. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
  362. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
  363. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
  364. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +49 -41
  365. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
  366. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +46 -38
  367. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
  368. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
  369. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
  370. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +50 -42
  371. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
  372. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
  373. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
  374. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +50 -42
  375. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
  376. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
  377. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
  378. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +50 -42
  379. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
  380. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
  381. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
  382. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +50 -42
  383. data/spec/adlint/{c → cc1}/ctrlexpr_spec.rb +51 -49
  384. data/spec/adlint/{c → cc1}/domain_spec.rb +210 -179
  385. data/spec/adlint/{c → cc1}/operator_spec.rb +3 -3
  386. data/spec/adlint/{c → cc1}/syntax_spec.rb +10 -12
  387. data/spec/adlint/{c → cc1}/type_spec.rb +61 -68
  388. data/{lib/adlint/c.rb → spec/adlint/location_spec.rb} +24 -29
  389. data/spec/conf.d/default_traits.yml +38 -37
  390. data/spec/conf.d/empty_cinit.h +1 -1
  391. data/spec/conf.d/empty_pinit.h +1 -1
  392. data/spec/conf.d/project/foo.c +0 -0
  393. data/spec/spec_helper.rb +2 -2
  394. metadata +60 -40
  395. data/lib/adlint/c/domain.rb +0 -7931
  396. data/lib/adlint/c/lexer.rb +0 -252
  397. data/lib/adlint/c/phase.rb +0 -135
  398. data/lib/adlint/exam/c_builtin/c_check.rb +0 -20745
  399. data/lib/adlint/exam/c_builtin/c_check_shima.rb +0 -983
  400. data/lib/adlint/exam/c_builtin/c_code.rb +0 -477
  401. data/lib/adlint/exam/c_builtin/c_metric.rb +0 -818
@@ -1,7 +1,7 @@
1
1
  # Code checkings (cpp-phase) of adlint-exam-c_builtin package.
2
2
  #
3
3
  # Author:: Rie Shima <mailto:rkakuuchi@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Rie Shima <mailto:rkakuuchi@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -43,18 +43,18 @@ module CBuiltin #:nodoc:
43
43
 
44
44
  # NOTE: W0687 may be duplicative when the same header which causes this
45
45
  # warning is included twice or more.
46
- ensure_uniqueness_of :W0687
46
+ mark_as_unique
47
47
 
48
- def initialize(context)
48
+ def initialize(phase_ctxt)
49
49
  super
50
- interp = context[:cpp_interpreter]
51
- interp.on_macro_undefined += method(:check)
50
+ interp = phase_ctxt[:cpp_interpreter]
51
+ interp.on_macro_undefined += T(:check)
52
52
  end
53
53
 
54
54
  private
55
- def check(undef_line, macro)
55
+ def check(undef_line, *)
56
56
  if undef_line.identifier.value == "defined"
57
- W(:W0687, undef_line.identifier.location)
57
+ W(undef_line.identifier.location)
58
58
  end
59
59
  end
60
60
  end
@@ -64,12 +64,12 @@ module CBuiltin #:nodoc:
64
64
 
65
65
  # NOTE: W0688 may be duplicative when the same header which causes this
66
66
  # warning is included twice or more.
67
- ensure_uniqueness_of :W0688
67
+ mark_as_unique
68
68
 
69
- def initialize(context)
69
+ def initialize(phase_ctxt)
70
70
  super
71
- visitor = context[:cpp_visitor]
72
- visitor.enter_line_line += method(:check)
71
+ visitor = phase_ctxt[:cpp_visitor]
72
+ visitor.enter_line_line += T(:check)
73
73
  end
74
74
 
75
75
  private
@@ -77,7 +77,7 @@ module CBuiltin #:nodoc:
77
77
  if line_no_arg = line_no_argument(line_line)
78
78
  line_no = Integer(line_no_arg.value)
79
79
  unless line_no > 0 && line_no < 32768
80
- W(:W0688, line_no_arg.location)
80
+ W(line_no_arg.location)
81
81
  end
82
82
  end
83
83
  rescue
@@ -93,13 +93,13 @@ module CBuiltin #:nodoc:
93
93
 
94
94
  # NOTE: W0689 may be duplicative when the same header which causes this
95
95
  # warning is included twice or more.
96
- ensure_uniqueness_of :W0689
96
+ mark_as_unique
97
97
 
98
98
  private
99
99
  def check(line_line)
100
100
  if fname_arg = file_name_argument(line_line)
101
101
  unless fname_arg.value =~ /\A".*"\z/
102
- W(:W0689, fname_arg.location)
102
+ W(fname_arg.location)
103
103
  end
104
104
  end
105
105
  end
@@ -114,7 +114,7 @@ module CBuiltin #:nodoc:
114
114
 
115
115
  # NOTE: W0690 may be duplicative when the same header which causes this
116
116
  # warning is included twice or more.
117
- ensure_uniqueness_of :W0690
117
+ mark_as_unique
118
118
 
119
119
  private
120
120
  def check(line_line)
@@ -122,7 +122,7 @@ module CBuiltin #:nodoc:
122
122
  Integer(line_no_arg.value)
123
123
  end
124
124
  rescue
125
- W(:W0690, line_no_arg.location)
125
+ W(line_no_arg.location)
126
126
  end
127
127
  end
128
128
 
@@ -131,12 +131,12 @@ module CBuiltin #:nodoc:
131
131
 
132
132
  # NOTE: W0695 may be duplicative when the same header which causes this
133
133
  # warning is included twice or more.
134
- ensure_uniqueness_of :W0695
134
+ mark_as_unique
135
135
 
136
136
  private
137
- def check(undef_line, macro)
137
+ def check(undef_line, *)
138
138
  if undef_line.identifier.value == "assert"
139
- W(:W0695, undef_line.identifier.location)
139
+ W(undef_line.identifier.location)
140
140
  end
141
141
  end
142
142
  end
@@ -146,18 +146,18 @@ module CBuiltin #:nodoc:
146
146
 
147
147
  # NOTE: W0806 may be duplicative when the same header which causes this
148
148
  # warning is included twice or more.
149
- ensure_uniqueness_of :W0806
149
+ mark_as_unique
150
150
 
151
- def initialize(context)
151
+ def initialize(phase_ctxt)
152
152
  super
153
- interp = context[:cpp_interpreter]
154
- interp.on_object_like_macro_defined += method(:check)
153
+ interp = phase_ctxt[:cpp_interpreter]
154
+ interp.on_object_like_macro_defined += T(:check)
155
155
  end
156
156
 
157
157
  private
158
- def check(define_line, macro)
158
+ def check(define_line, *)
159
159
  if define_line.identifier.value == "defined"
160
- W(:W0806, define_line.identifier.location)
160
+ W(define_line.identifier.location)
161
161
  end
162
162
  end
163
163
  end
@@ -167,13 +167,13 @@ module CBuiltin #:nodoc:
167
167
 
168
168
  # NOTE: W0807 may be duplicative when the same header which causes this
169
169
  # warning is included twice or more.
170
- ensure_uniqueness_of :W0807
170
+ mark_as_unique
171
171
 
172
172
  private
173
173
  def check(undef_line, macro)
174
174
  if macro.kind_of?(Cpp::SpecialMacro)
175
175
  identifier = undef_line.identifier
176
- W(:W0807, identifier.location, identifier.value)
176
+ W(identifier.location, identifier.value)
177
177
  end
178
178
  end
179
179
  end
@@ -183,22 +183,19 @@ module CBuiltin #:nodoc:
183
183
 
184
184
  # NOTE: W0808 may be duplicative when the same header which causes this
185
185
  # warning is included twice or more.
186
- ensure_uniqueness_of :W0808
186
+ mark_as_unique
187
187
 
188
- def initialize(context)
188
+ def initialize(phase_ctxt)
189
189
  super
190
- interp = context[:cpp_interpreter]
191
- interp.on_object_like_macro_defined += method(:check)
192
- @macro_table = context[:cpp_macro_table]
190
+ interp = phase_ctxt[:cpp_interpreter]
191
+ interp.on_object_like_macro_defined += T(:check)
192
+ @macro_tbl = phase_ctxt[:cpp_macro_table]
193
193
  end
194
194
 
195
195
  private
196
- def check(define_line, macro)
197
- identifier = define_line.identifier
198
-
199
- if @macro_table.lookup(identifier.value)
200
- W(:W0808, identifier.location, identifier.value)
201
- end
196
+ def check(define_line, *)
197
+ id = define_line.identifier
198
+ W(id.location, id.value) if @macro_tbl.lookup(id.value)
202
199
  end
203
200
  end
204
201
 
@@ -1,7 +1,7 @@
1
1
  # Code structure extractions (cpp-phase) of adlint-exam-c_builtin package.
2
2
  #
3
3
  # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -40,15 +40,15 @@ module CBuiltin #:nodoc:
40
40
  class ObjectLikeMacroExtraction < CodeExtraction
41
41
  def_registrant_phase Cpp::Prepare2Phase
42
42
 
43
- def initialize(context)
43
+ def initialize(phase_ctxt)
44
44
  super
45
- interp = context[:cpp_interpreter]
46
- interp.on_object_like_macro_defined += method(:extract)
45
+ interp = phase_ctxt[:cpp_interpreter]
46
+ interp.on_object_like_macro_defined += T(:extract)
47
47
  end
48
48
 
49
49
  private
50
- def do_prepare(context) end
51
- def do_execute(context) end
50
+ def do_prepare(*) end
51
+ def do_execute(*) end
52
52
 
53
53
  def extract(define_line, macro)
54
54
  MACRODEF(define_line.location, macro.name.value, "O")
@@ -58,16 +58,16 @@ module CBuiltin #:nodoc:
58
58
  class FuncLikeMacroExtraction < CodeExtraction
59
59
  def_registrant_phase Cpp::Prepare2Phase
60
60
 
61
- def initialize(context)
61
+ def initialize(phase_ctxt)
62
62
  super
63
- interp = context[:cpp_interpreter]
64
- interp.on_function_like_macro_defined += method(:extract)
65
- interp.on_va_function_like_macro_defined += method(:extract)
63
+ interp = phase_ctxt[:cpp_interpreter]
64
+ interp.on_function_like_macro_defined += T(:extract)
65
+ interp.on_va_function_like_macro_defined += T(:extract)
66
66
  end
67
67
 
68
68
  private
69
- def do_prepare(context) end
70
- def do_execute(context) end
69
+ def do_prepare(*) end
70
+ def do_execute(*) end
71
71
 
72
72
  def extract(define_line, macro)
73
73
  MACRODEF(define_line.location, macro.name.value, "F")
@@ -77,91 +77,90 @@ module CBuiltin #:nodoc:
77
77
  class IncludeDirectiveExtraction < CodeExtraction
78
78
  def_registrant_phase Cpp::Prepare2Phase
79
79
 
80
- def initialize(context)
80
+ def initialize(phase_ctxt)
81
81
  super
82
- interp = context[:cpp_interpreter]
83
- interp.on_system_header_included += method(:extract_system_include)
84
- interp.on_user_header_included += method(:extract_user_include)
82
+ interp = phase_ctxt[:cpp_interpreter]
83
+ interp.on_system_header_included += T(:extract_system_include)
84
+ interp.on_user_header_included += T(:extract_user_include)
85
85
  end
86
86
 
87
87
  private
88
- def do_prepare(context) end
89
- def do_execute(context) end
88
+ def do_prepare(*) end
89
+ def do_execute(*) end
90
90
 
91
- def extract_system_include(system_include_line, system_header)
92
- INCLUDE(system_include_line.location, "<#{system_header.fpath}>")
91
+ def extract_system_include(sys_include_line, sys_header)
92
+ INCLUDE(sys_include_line.location, "<#{sys_header.fpath}>")
93
93
  end
94
94
 
95
- def extract_user_include(user_include_line, user_header)
96
- INCLUDE(user_include_line.location, "\"#{user_header.fpath}\"")
95
+ def extract_user_include(usr_include_line, usr_header)
96
+ INCLUDE(usr_include_line.location, "\"#{usr_header.fpath}\"")
97
97
  end
98
98
  end
99
99
 
100
100
  class DirectiveExtraction < CodeExtraction
101
101
  def_registrant_phase Cpp::Prepare2Phase
102
102
 
103
- def initialize(context)
103
+ def initialize(phase_ctxt)
104
104
  super
105
- visitor = context[:cpp_visitor]
106
- visitor.enter_if_statement += method(:extract_if)
107
- visitor.enter_ifdef_statement += method(:extract_ifdef)
108
- visitor.enter_ifndef_statement += method(:extract_ifndef)
109
- visitor.enter_elif_statement += method(:extract_elif)
110
- visitor.enter_else_statement += method(:extract_else)
111
- visitor.enter_endif_line += method(:extract_endif)
112
- visitor.enter_user_include_line += method(:extract_user_include)
113
- visitor.enter_system_include_line += method(:extract_system_include)
114
- visitor.enter_object_like_define_line += method(:extract_define)
115
- visitor.enter_function_like_define_line += method(:extract_define)
116
- visitor.enter_va_function_like_define_line += method(:extract_define)
117
- visitor.enter_undef_line += method(:extract_undef)
118
- visitor.enter_line_line += method(:extract_line)
119
- visitor.enter_error_line += method(:extract_error)
120
- visitor.enter_pragma_line += method(:extract_pragma)
121
- visitor.enter_null_directive += method(:extract_null)
105
+ visitor = phase_ctxt[:cpp_visitor]
106
+ visitor.enter_if_statement += T(:extract_if)
107
+ visitor.enter_ifdef_statement += T(:extract_ifdef)
108
+ visitor.enter_ifndef_statement += T(:extract_ifndef)
109
+ visitor.enter_elif_statement += T(:extract_elif)
110
+ visitor.enter_else_statement += T(:extract_else)
111
+ visitor.enter_endif_line += T(:extract_endif)
112
+ visitor.enter_user_include_line += T(:extract_user_include)
113
+ visitor.enter_system_include_line += T(:extract_system_include)
114
+ visitor.enter_object_like_define_line += T(:extract_define)
115
+ visitor.enter_function_like_define_line += T(:extract_define)
116
+ visitor.enter_va_function_like_define_line += T(:extract_define)
117
+ visitor.enter_undef_line += T(:extract_undef)
118
+ visitor.enter_line_line += T(:extract_line)
119
+ visitor.enter_error_line += T(:extract_error)
120
+ visitor.enter_pragma_line += T(:extract_pragma)
121
+ visitor.enter_null_directive += T(:extract_null)
122
122
  end
123
123
 
124
124
  private
125
- def do_prepare(context) end
126
- def do_execute(context) end
125
+ def do_prepare(*) end
126
+ def do_execute(*) end
127
127
 
128
- def extract_if(if_statement)
129
- PP_DIRECTIVE(if_statement.location, if_statement.keyword.value,
130
- if_statement.expression.to_s)
128
+ def extract_if(if_stmt)
129
+ PP_DIRECTIVE(if_stmt.location, if_stmt.keyword.value,
130
+ if_stmt.expression.to_s)
131
131
  end
132
132
 
133
- def extract_ifdef(ifdef_statement)
134
- PP_DIRECTIVE(ifdef_statement.location, ifdef_statement.keyword.value,
135
- ifdef_statement.identifier.value)
133
+ def extract_ifdef(ifdef_stmt)
134
+ PP_DIRECTIVE(ifdef_stmt.location, ifdef_stmt.keyword.value,
135
+ ifdef_stmt.identifier.value)
136
136
  end
137
137
 
138
- def extract_ifndef(ifndef_statement)
139
- PP_DIRECTIVE(ifndef_statement.location, ifndef_statement.keyword.value,
140
- ifndef_statement.identifier.value)
138
+ def extract_ifndef(ifndef_stmt)
139
+ PP_DIRECTIVE(ifndef_stmt.location, ifndef_stmt.keyword.value,
140
+ ifndef_stmt.identifier.value)
141
141
  end
142
142
 
143
- def extract_elif(elif_statement)
144
- PP_DIRECTIVE(elif_statement.location, elif_statement.keyword.value,
145
- elif_statement.expression.to_s)
143
+ def extract_elif(elif_stmt)
144
+ PP_DIRECTIVE(elif_stmt.location, elif_stmt.keyword.value,
145
+ elif_stmt.expression.to_s)
146
146
  end
147
147
 
148
- def extract_else(else_statement)
149
- PP_DIRECTIVE(else_statement.location, else_statement.keyword.value, nil)
148
+ def extract_else(else_stmt)
149
+ PP_DIRECTIVE(else_stmt.location, else_stmt.keyword.value, nil)
150
150
  end
151
151
 
152
152
  def extract_endif(endif_line)
153
153
  PP_DIRECTIVE(endif_line.location, endif_line.keyword.value, nil)
154
154
  end
155
155
 
156
- def extract_user_include(user_include_line)
157
- PP_DIRECTIVE(user_include_line.location, user_include_line.keyword.value,
158
- user_include_line.header_name.value)
156
+ def extract_user_include(usr_include_line)
157
+ PP_DIRECTIVE(usr_include_line.location, usr_include_line.keyword.value,
158
+ usr_include_line.header_name.value)
159
159
  end
160
160
 
161
- def extract_system_include(system_include_line)
162
- PP_DIRECTIVE(system_include_line.location,
163
- system_include_line.keyword.value,
164
- system_include_line.header_name.value)
161
+ def extract_system_include(sys_include_line)
162
+ PP_DIRECTIVE(sys_include_line.location, sys_include_line.keyword.value,
163
+ sys_include_line.header_name.value)
165
164
  end
166
165
 
167
166
  def extract_define(define_line)
@@ -194,7 +193,6 @@ module CBuiltin #:nodoc:
194
193
  end
195
194
  end
196
195
 
197
-
198
196
  end
199
197
  end
200
198
  end
@@ -1,7 +1,7 @@
1
1
  # Code checkings (ld-phase) of adlint-exam-c_builtin package.
2
2
  #
3
3
  # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -39,16 +39,16 @@ module CBuiltin #:nodoc:
39
39
  class W0555 < PassiveCodeCheck
40
40
  def_registrant_phase Ld::PreparePhase
41
41
 
42
- def initialize(context)
42
+ def initialize(phase_ctxt)
43
43
  super
44
- context[:ld_function_traversal].on_definition += method(:check)
44
+ phase_ctxt[:ld_function_traversal].on_definition += T(:check)
45
45
  end
46
46
 
47
47
  private
48
- def check(function)
49
- call_graph = @context[:ld_function_call_graph]
50
- if call_graph.indirect_callers_of(function).include?(function)
51
- W(:W0555, function.location)
48
+ def check(fun)
49
+ call_graph = @phase_ctxt[:ld_function_call_graph]
50
+ if call_graph.indirect_callers_of(fun).include?(fun)
51
+ W(fun.location)
52
52
  end
53
53
  end
54
54
  end
@@ -56,16 +56,16 @@ module CBuiltin #:nodoc:
56
56
  class W0586 < PassiveCodeCheck
57
57
  def_registrant_phase Ld::PreparePhase
58
58
 
59
- def initialize(context)
59
+ def initialize(phase_ctxt)
60
60
  super
61
- context[:ld_typedef_traversal].listeners += method(:check)
61
+ phase_ctxt[:ld_typedef_traversal].on_declaration += T(:check)
62
62
  end
63
63
 
64
64
  private
65
65
  def check(typedef)
66
- mapping = @context[:ld_typedef_mapping]
66
+ mapping = @phase_ctxt[:ld_typedef_mapping]
67
67
  if mapping.lookup(typedef.name).any? { |td| td != typedef }
68
- W(:W0586, typedef.location, typedef.name)
68
+ W(typedef.location, typedef.name)
69
69
  end
70
70
  end
71
71
  end
@@ -73,32 +73,30 @@ module CBuiltin #:nodoc:
73
73
  class W0589 < PassiveCodeCheck
74
74
  def_registrant_phase Ld::PreparePhase
75
75
 
76
- def initialize(context)
76
+ def initialize(phase_ctxt)
77
77
  super
78
- context[:ld_function_traversal].on_definition += method(:check_function)
79
- context[:ld_variable_traversal].on_definition += method(:check_variable)
78
+ phase_ctxt[:ld_function_traversal].on_definition += T(:check_function)
79
+ phase_ctxt[:ld_variable_traversal].on_definition += T(:check_variable)
80
80
  end
81
81
 
82
82
  private
83
- def check_function(function)
84
- return unless function.extern?
85
- call_graph = @context[:ld_function_call_graph]
86
- direct_callers = call_graph.direct_callers_of(function)
83
+ def check_function(fun)
84
+ return unless fun.extern?
85
+ call_graph = @phase_ctxt[:ld_function_call_graph]
86
+ direct_callers = call_graph.direct_callers_of(fun)
87
87
  if direct_callers.size == 1 &&
88
- direct_callers.first.location.fpath == function.location.fpath
89
- W(:W0589, function.location,
90
- function.signature, direct_callers.first.signature)
88
+ direct_callers.first.location.fpath == fun.location.fpath
89
+ W(fun.location, fun.signature, direct_callers.first.signature)
91
90
  end
92
91
  end
93
92
 
94
- def check_variable(variable)
95
- return unless variable.extern?
96
- reference_graph = @context[:ld_variable_reference_graph]
97
- direct_referrers = reference_graph.direct_referrers_of(variable)
93
+ def check_variable(var)
94
+ return unless var.extern?
95
+ ref_graph = @phase_ctxt[:ld_variable_reference_graph]
96
+ direct_referrers = ref_graph.direct_referrers_of(var)
98
97
  if direct_referrers.size == 1 &&
99
- direct_referrers.first.location.fpath == variable.location.fpath
100
- W(:W0589, variable.location,
101
- variable.name, direct_referrers.first.signature)
98
+ direct_referrers.first.location.fpath == var.location.fpath
99
+ W(var.location, var.name, direct_referrers.first.signature)
102
100
  end
103
101
  end
104
102
  end
@@ -106,20 +104,19 @@ module CBuiltin #:nodoc:
106
104
  class W0591 < PassiveCodeCheck
107
105
  def_registrant_phase Ld::PreparePhase
108
106
 
109
- def initialize(context)
107
+ def initialize(phase_ctxt)
110
108
  super
111
- context[:ld_function_traversal].on_definition += method(:check)
109
+ phase_ctxt[:ld_function_traversal].on_definition += T(:check)
112
110
  end
113
111
 
114
112
  private
115
- def check(function)
116
- return unless function.extern?
117
- call_graph = @context[:ld_function_call_graph]
118
- direct_callers = call_graph.direct_callers_of(function)
113
+ def check(fun)
114
+ return unless fun.extern?
115
+ call_graph = @phase_ctxt[:ld_function_call_graph]
116
+ direct_callers = call_graph.direct_callers_of(fun)
119
117
  if !direct_callers.empty? &&
120
- direct_callers.all? { |f|
121
- f.location.fpath == function.location.fpath }
122
- W(:W0591, function.location, function.signature)
118
+ direct_callers.all? { |f| f.location.fpath == fun.location.fpath }
119
+ W(fun.location, fun.signature)
123
120
  end
124
121
  end
125
122
  end
@@ -127,20 +124,19 @@ module CBuiltin #:nodoc:
127
124
  class W0593 < PassiveCodeCheck
128
125
  def_registrant_phase Ld::PreparePhase
129
126
 
130
- def initialize(context)
127
+ def initialize(phase_ctxt)
131
128
  super
132
- context[:ld_variable_traversal].on_definition += method(:check)
129
+ phase_ctxt[:ld_variable_traversal].on_definition += T(:check)
133
130
  end
134
131
 
135
132
  private
136
- def check(variable)
137
- return unless variable.extern?
138
- reference_graph = @context[:ld_variable_reference_graph]
139
- direct_referrers = reference_graph.direct_referrers_of(variable)
133
+ def check(var)
134
+ return unless var.extern?
135
+ ref_graph = @phase_ctxt[:ld_variable_reference_graph]
136
+ direct_referrers = ref_graph.direct_referrers_of(var)
140
137
  if !direct_referrers.empty? &&
141
- direct_referrers.all? { |f|
142
- f.location.fpath == variable.location.fpath }
143
- W(:W0593, variable.location, variable.name)
138
+ direct_referrers.all? { |f| f.location.fpath == var.location.fpath }
139
+ W(var.location, var.name)
144
140
  end
145
141
  end
146
142
  end
@@ -148,17 +144,17 @@ module CBuiltin #:nodoc:
148
144
  class W0628 < PassiveCodeCheck
149
145
  def_registrant_phase Ld::PreparePhase
150
146
 
151
- def initialize(context)
147
+ def initialize(phase_ctxt)
152
148
  super
153
- context[:ld_function_traversal].on_definition += method(:check)
149
+ phase_ctxt[:ld_function_traversal].on_definition += T(:check)
154
150
  end
155
151
 
156
152
  private
157
- def check(function)
158
- call_graph = @context[:ld_function_call_graph]
159
- unless function.name == "main"
160
- if call_graph.direct_callers_of(function).empty?
161
- W(:W0628, function.location, function.signature)
153
+ def check(fun)
154
+ call_graph = @phase_ctxt[:ld_function_call_graph]
155
+ unless fun.name == "main"
156
+ if call_graph.direct_callers_of(fun).empty?
157
+ W(fun.location, fun.signature)
162
158
  end
163
159
  end
164
160
  end
@@ -169,48 +165,57 @@ module CBuiltin #:nodoc:
169
165
 
170
166
  # NOTE: W0770 may be duplicative when function declarations of the same
171
167
  # name appears twice or more in the project.
172
- ensure_uniqueness_of :W0770
168
+ mark_as_unique
173
169
 
174
- def initialize(context)
170
+ def initialize(phase_ctxt)
175
171
  super
176
- func_traversal = context[:ld_function_traversal]
177
- func_traversal.on_declaration += method(:check_function)
178
- func_traversal.on_definition += method(:check_function)
179
- var_traversal = context[:ld_variable_traversal]
180
- var_traversal.on_declaration += method(:check_variable)
181
- var_traversal.on_definition += method(:check_variable)
172
+ fun_traversal = phase_ctxt[:ld_function_traversal]
173
+ var_traversal = phase_ctxt[:ld_variable_traversal]
174
+ fun_traversal.on_declaration += T(:check_function_declaration)
175
+ fun_traversal.on_definition += T(:check_function_definition)
176
+ var_traversal.on_declaration += T(:check_variable)
177
+ var_traversal.on_definition += T(:check_variable)
182
178
  end
183
179
 
184
180
  private
185
- def check_function(func)
186
- return unless func.extern?
181
+ def check_function_declaration(fun_dcl)
182
+ if fun_dcl.extern? && fun_dcl.explicit?
183
+ check_function(fun_dcl)
184
+ end
185
+ end
187
186
 
188
- mapping = @context[:ld_function_mapping]
189
- similar_dcls = mapping.lookup_function_declarations(func.name)
187
+ def check_function_definition(fun_def)
188
+ if fun_def.extern?
189
+ check_function(fun_def)
190
+ end
191
+ end
192
+
193
+ def check_function(fun)
194
+ mapping = @phase_ctxt[:ld_function_mapping]
195
+ similar_dcls =
196
+ mapping.lookup_function_declarations(fun.name).select { |fun_dcl|
197
+ fun_dcl.explicit?
198
+ }
190
199
 
191
200
  if similar_dcls.size > 1
192
- W(:W0770, func.location, func.signature)
193
- similar_dcls.each do |pair_dcl|
194
- unless pair_dcl == func
195
- C(:C0001, pair_dcl.location, pair_dcl.signature)
196
- end
197
- end
201
+ W(fun.location, fun.signature, *similar_dcls.map { |pair_dcl|
202
+ next if pair_dcl == fun
203
+ C(:C0001, pair_dcl.location, pair_dcl.signature)
204
+ }.compact)
198
205
  end
199
206
  end
200
207
 
201
208
  def check_variable(var)
202
209
  return unless var.extern?
203
210
 
204
- mapping = @context[:ld_variable_mapping]
211
+ mapping = @phase_ctxt[:ld_variable_mapping]
205
212
  similar_dcls = mapping.lookup_variable_declarations(var.name)
206
213
 
207
214
  if similar_dcls.size > 1
208
- W(:W0770, var.location, var.name)
209
- similar_dcls.each do |pair_dcl|
210
- unless pair_dcl == var
211
- C(:C0001, pair_dcl.location, pair_dcl.name)
212
- end
213
- end
215
+ W(var.location, var.name, *similar_dcls.map { |pair_dcl|
216
+ next if pair_dcl == var
217
+ C(:C0001, pair_dcl.location, pair_dcl.name)
218
+ }.compact)
214
219
  end
215
220
  end
216
221
  end
@@ -220,44 +225,40 @@ module CBuiltin #:nodoc:
220
225
 
221
226
  # NOTE: W0791 may be duplicative when definitions of the same name appears
222
227
  # twice or more in the project.
223
- ensure_uniqueness_of :W0791
228
+ mark_as_unique
224
229
 
225
- def initialize(context)
230
+ def initialize(phase_ctxt)
226
231
  super
227
- context[:ld_function_traversal].on_definition += method(:check_function)
228
- context[:ld_variable_traversal].on_definition += method(:check_variable)
232
+ phase_ctxt[:ld_function_traversal].on_definition += T(:check_function)
233
+ phase_ctxt[:ld_variable_traversal].on_definition += T(:check_variable)
229
234
  end
230
235
 
231
236
  private
232
- def check_function(func)
233
- return unless func.extern?
234
-
235
- mapping = @context[:ld_function_mapping]
236
- similar_funcs = mapping.lookup_functions(func.name)
237
-
238
- if similar_funcs.size > 1
239
- W(:W0791, func.location, func.signature)
240
- similar_funcs.each do |pair_func|
241
- unless pair_func == func
242
- C(:C0001, pair_func.location, pair_func.signature)
243
- end
244
- end
237
+ def check_function(fun)
238
+ return unless fun.extern?
239
+
240
+ mapping = @phase_ctxt[:ld_function_mapping]
241
+ similar_funs = mapping.lookup_functions(fun.name)
242
+
243
+ if similar_funs.size > 1
244
+ W(fun.location, fun.signature, *similar_funs.map { |pair_fun|
245
+ next if pair_fun == fun
246
+ C(:C0001, pair_fun.location, pair_fun.signature)
247
+ }.compact)
245
248
  end
246
249
  end
247
250
 
248
251
  def check_variable(var)
249
252
  return unless var.extern?
250
253
 
251
- mapping = @context[:ld_variable_mapping]
254
+ mapping = @phase_ctxt[:ld_variable_mapping]
252
255
  similar_vars = mapping.lookup_variables(var.name)
253
256
 
254
257
  if similar_vars.size > 1
255
- W(:W0791, var.location, var.name)
256
- similar_vars.each do |pair_var|
257
- unless pair_var == var
258
- C(:C0001, pair_var.location, pair_var.name)
259
- end
260
- end
258
+ W(var.location, var.name, *similar_vars.map { |pair_var|
259
+ next if pair_var == var
260
+ C(:C0001, pair_var.location, pair_var.name)
261
+ }.compact)
261
262
  end
262
263
  end
263
264
  end
@@ -267,41 +268,48 @@ module CBuiltin #:nodoc:
267
268
 
268
269
  # NOTE: W1037 may be duplicative when declarations or definitions of the
269
270
  # same name appears twice or more in the project.
270
- ensure_uniqueness_of :W1037
271
+ mark_as_unique
271
272
 
272
- def initialize(context)
273
+ def initialize(phase_ctxt)
273
274
  super
274
- func_traversal = context[:ld_function_traversal]
275
- func_traversal.on_declaration += method(:check_function)
276
- func_traversal.on_definition += method(:check_function)
277
- var_traversal = context[:ld_variable_traversal]
278
- var_traversal.on_declaration += method(:check_variable)
279
- var_traversal.on_definition += method(:check_variable)
275
+ fun_traversal = phase_ctxt[:ld_function_traversal]
276
+ var_traversal = phase_ctxt[:ld_variable_traversal]
277
+ fun_traversal.on_declaration += T(:check_function_declaration)
278
+ fun_traversal.on_definition += T(:check_function_definition)
279
+ var_traversal.on_declaration += T(:check_variable)
280
+ var_traversal.on_definition += T(:check_variable)
280
281
  end
281
282
 
282
283
  private
283
- def check_function(func)
284
- return unless func.extern?
285
-
286
- mapping = @context[:ld_function_mapping]
287
- similar_dcls_or_funcs =
288
- (mapping.lookup_function_declarations(func.name) +
289
- mapping.lookup_functions(func.name)).select { |dcl_or_func|
290
- dcl_or_func.extern? && dcl_or_func.signature != func.signature
291
- }
284
+ def check_function_declaration(fun)
285
+ check_function(fun) if fun.extern? && fun.explicit?
286
+ end
292
287
 
293
- unless similar_dcls_or_funcs.empty?
294
- W(:W1037, func.location, func.signature)
295
- similar_dcls_or_funcs.each do |pair_dcl_or_func|
296
- C(:C0001, pair_dcl_or_func.location, pair_dcl_or_func.signature)
297
- end
288
+ def check_function_definition(fun)
289
+ check_function(fun) if fun.extern?
290
+ end
291
+
292
+ def check_function(fun)
293
+ mapping = @phase_ctxt[:ld_function_mapping]
294
+ similar_dcls_or_funs =
295
+ mapping.lookup_function_declarations(fun.name).select { |dcl|
296
+ dcl.explicit? && dcl.extern? && dcl.signature != fun.signature
297
+ } + mapping.lookup_functions(fun.name).select { |mapped_fun|
298
+ mapped_fun.extern? && mapped_fun.signature != fun.signature
299
+ }
300
+
301
+ unless similar_dcls_or_funs.empty?
302
+ W(fun.location, fun.signature,
303
+ *similar_dcls_or_funs.map { |pair_dcl_or_fun|
304
+ C(:C0001, pair_dcl_or_fun.location, pair_dcl_or_fun.signature)
305
+ })
298
306
  end
299
307
  end
300
308
 
301
309
  def check_variable(var)
302
310
  return unless var.extern?
303
311
 
304
- mapping = @context[:ld_variable_mapping]
312
+ mapping = @phase_ctxt[:ld_variable_mapping]
305
313
  similar_dcls_or_vars =
306
314
  (mapping.lookup_variable_declarations(var.name) +
307
315
  mapping.lookup_variables(var.name)).select { |dcl_or_var|
@@ -309,10 +317,9 @@ module CBuiltin #:nodoc:
309
317
  }
310
318
 
311
319
  unless similar_dcls_or_vars.empty?
312
- W(:W1037, var.location, var.name)
313
- similar_dcls_or_vars.each do |pair_dcl_or_var|
320
+ W(var.location, var.name, *similar_dcls_or_vars.map { |pair_dcl_or_var|
314
321
  C(:C0001, pair_dcl_or_var.location, pair_dcl_or_var.name)
315
- end
322
+ })
316
323
  end
317
324
  end
318
325
  end