adlint 2.6.14 → 3.0.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 (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