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
@@ -0,0 +1,138 @@
1
+ # Analysis phases for C language.
2
+ #
3
+ # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
+ # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
5
+ # License:: GPLv3+: GNU General Public License version 3 or later
6
+ #
7
+ # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
8
+
9
+ #--
10
+ # ___ ____ __ ___ _________
11
+ # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
+ # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
+ # / __ |/ /_/ / /___/ / /| / / /
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
15
+ #
16
+ # This file is part of AdLint.
17
+ #
18
+ # AdLint is free software: you can redistribute it and/or modify it under the
19
+ # terms of the GNU General Public License as published by the Free Software
20
+ # Foundation, either version 3 of the License, or (at your option) any later
21
+ # version.
22
+ #
23
+ # AdLint is distributed in the hope that it will be useful, but WITHOUT ANY
24
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
25
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
26
+ #
27
+ # You should have received a copy of the GNU General Public License along with
28
+ # AdLint. If not, see <http://www.gnu.org/licenses/>.
29
+ #
30
+ #++
31
+
32
+ require "adlint/phase"
33
+ require "adlint/error"
34
+ require "adlint/cc1/lexer"
35
+ require "adlint/cc1/parser"
36
+ require "adlint/cc1/syntax"
37
+ require "adlint/cc1/interp"
38
+ require "adlint/cc1/util"
39
+
40
+ module AdLint #:nodoc:
41
+ module Cc1 #:nodoc:
42
+
43
+ class CPhase < Phase
44
+ def initialize(phase_ctxt, phase_name)
45
+ super(phase_ctxt, "cc1", phase_name)
46
+ end
47
+ end
48
+
49
+ class Prepare1Phase < CPhase
50
+ def initialize(phase_ctxt)
51
+ super(phase_ctxt, "pr3")
52
+ end
53
+
54
+ private
55
+ def do_execute(phase_ctxt, *)
56
+ phase_ctxt[:cc1_visitor] = SyntaxTreeMulticastVisitor.new
57
+ phase_ctxt[:cc1_parser] = Parser.new(phase_ctxt)
58
+ end
59
+ end
60
+
61
+ class ParsePhase < CPhase
62
+ def initialize(phase_ctxt)
63
+ super(phase_ctxt, "prs")
64
+ end
65
+
66
+ private
67
+ def do_execute(phase_ctxt, *)
68
+ phase_ctxt[:cc1_syntax_tree] = phase_ctxt[:cc1_parser].execute
69
+ ensure
70
+ phase_ctxt[:cc1_token_array] = phase_ctxt[:cc1_parser].token_array
71
+ DebugUtil.dump_token_array(phase_ctxt)
72
+ end
73
+ end
74
+
75
+ class ResolvePhase < CPhase
76
+ def initialize(phase_ctxt)
77
+ super(phase_ctxt, "typ")
78
+ end
79
+
80
+ private
81
+ def do_execute(phase_ctxt, *)
82
+ resolver = StaticTypeResolver.new(TypeTable.new(traits, monitor, logger))
83
+ phase_ctxt[:cc1_type_table] =
84
+ resolver.resolve(phase_ctxt[:cc1_syntax_tree])
85
+ end
86
+ end
87
+
88
+ class Prepare2Phase < CPhase
89
+ def initialize(phase_ctxt)
90
+ super(phase_ctxt, "pr4")
91
+ end
92
+
93
+ private
94
+ def do_execute(phase_ctxt, *)
95
+ phase_ctxt[:cc1_interpreter] =
96
+ Interpreter.new(phase_ctxt[:cc1_type_table])
97
+ end
98
+ end
99
+
100
+ class InterpPhase < CPhase
101
+ def initialize(phase_ctxt)
102
+ super(phase_ctxt, "int")
103
+ end
104
+
105
+ private
106
+ def do_execute(phase_ctxt, *)
107
+ Program.new(phase_ctxt[:cc1_interpreter],
108
+ phase_ctxt[:cc1_syntax_tree]).execute
109
+ ValueDomain.clear_memos
110
+ ensure
111
+ DebugUtil.dump_syntax_tree(phase_ctxt)
112
+ end
113
+ end
114
+
115
+ class ReviewPhase < CPhase
116
+ def initialize(phase_ctxt)
117
+ super(phase_ctxt, "rv2")
118
+ end
119
+
120
+ private
121
+ def do_execute(phase_ctxt, *)
122
+ phase_ctxt[:cc1_syntax_tree].accept(phase_ctxt[:cc1_visitor])
123
+ end
124
+ end
125
+
126
+ class ExaminationPhase < CPhase
127
+ def initialize(phase_ctxt)
128
+ super(phase_ctxt, "ex2")
129
+ end
130
+
131
+ private
132
+ def do_execute(phase_ctxt, *)
133
+ examinations.each { |exam| exam.execute }
134
+ end
135
+ end
136
+
137
+ end
138
+ end
@@ -1,7 +1,7 @@
1
1
  # C type resolver.
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
  #
@@ -30,37 +30,35 @@
30
30
  #++
31
31
 
32
32
  require "adlint/monitor"
33
- require "adlint/c/type"
34
- require "adlint/c/syntax"
33
+ require "adlint/cc1/type"
34
+ require "adlint/cc1/syntax"
35
35
 
36
36
  module AdLint #:nodoc:
37
- module C #:nodoc:
37
+ module Cc1 #:nodoc:
38
38
 
39
39
  class TypeResolver < SyntaxTreeVisitor
40
40
  include MonitorUtil
41
41
 
42
- def initialize(type_table)
43
- @type_table = type_table
42
+ def initialize(type_tbl)
43
+ @type_table = type_tbl
44
44
  end
45
45
 
46
46
  attr_reader :type_table
47
47
 
48
- def resolve(syntax_tree)
49
- syntax_tree.accept(self)
48
+ def resolve(ast)
49
+ ast.accept(self)
50
50
  @type_table
51
51
  end
52
52
 
53
53
  def visit_struct_type_declaration(node)
54
54
  checkpoint(node.location)
55
- node.struct_declarations.each { |decl| decl.accept(self) }
56
-
55
+ node.struct_declarations.each { |dcl| dcl.accept(self) }
57
56
  node.type = @type_table.install_struct_type(node)
58
57
  end
59
58
 
60
59
  def visit_union_type_declaration(node)
61
60
  checkpoint(node.location)
62
- node.struct_declarations.each { |decl| decl.accept(self) }
63
-
61
+ node.struct_declarations.each { |dcl| dcl.accept(self) }
64
62
  node.type = @type_table.install_union_type(node)
65
63
  end
66
64
 
@@ -73,9 +71,9 @@ module C #:nodoc:
73
71
  node.specifier_qualifier_list.accept(self)
74
72
  node.struct_declarator.accept(self)
75
73
 
76
- type_qualifiers = node.specifier_qualifier_list.type_qualifiers
77
- type_specifiers = node.specifier_qualifier_list.type_specifiers
78
- type = lookup_variable_type(type_qualifiers, type_specifiers,
74
+ type_quals = node.specifier_qualifier_list.type_qualifiers
75
+ type_specs = node.specifier_qualifier_list.type_specifiers
76
+ type = lookup_variable_type(type_quals, type_specs,
79
77
  node.struct_declarator.declarator)
80
78
  type = @type_table.pointer_type(type) if type.function?
81
79
 
@@ -92,18 +90,15 @@ module C #:nodoc:
92
90
 
93
91
  def visit_enum_type_declaration(node)
94
92
  checkpoint(node.location)
95
- type = @type_table.install_enum_type(node)
96
- node.type = type
97
- node.enumerators.each { |enum| enum.type = type }
93
+ node.type = @type_table.install_enum_type(node)
94
+ node.enumerators.each { |enum| enum.type = node.type }
98
95
  end
99
96
 
100
97
  def visit_typedef_declaration(node)
101
98
  checkpoint(node.location)
102
99
  node.declaration_specifiers.accept(self)
103
100
  node.init_declarator.accept(self)
104
-
105
- type = @type_table.install_user_type(node)
106
- node.type = type
101
+ node.type = @type_table.install_user_type(node)
107
102
  end
108
103
 
109
104
  def visit_function_declaration(node)
@@ -111,15 +106,15 @@ module C #:nodoc:
111
106
  node.declaration_specifiers.accept(self) if node.declaration_specifiers
112
107
  node.init_declarator.accept(self)
113
108
 
114
- if declaration_specifiers = node.declaration_specifiers
115
- type_qualifiers = declaration_specifiers.type_qualifiers
116
- type_specifiers = declaration_specifiers.type_specifiers
109
+ if dcl_specs = node.declaration_specifiers
110
+ type_quals = dcl_specs.type_qualifiers
111
+ type_specs = dcl_specs.type_specifiers
117
112
  else
118
- type_qualifiers = []
119
- type_specifiers = []
113
+ type_quals = []
114
+ type_specs = []
120
115
  end
121
116
 
122
- node.type = lookup_variable_type(type_qualifiers, type_specifiers,
117
+ node.type = lookup_variable_type(type_quals, type_specs,
123
118
  node.init_declarator.declarator)
124
119
  end
125
120
 
@@ -128,16 +123,15 @@ module C #:nodoc:
128
123
  node.declaration_specifiers.accept(self) if node.declaration_specifiers
129
124
  node.declarator.accept(self) if node.declarator
130
125
 
131
- if declaration_specifiers = node.declaration_specifiers
132
- type_qualifiers = declaration_specifiers.type_qualifiers
133
- type_specifiers = declaration_specifiers.type_specifiers
126
+ if dcl_specs = node.declaration_specifiers
127
+ type_quals = dcl_specs.type_qualifiers
128
+ type_specs = dcl_specs.type_specifiers
134
129
  else
135
- type_qualifiers = []
136
- type_specifiers = []
130
+ type_quals = []
131
+ type_specs = []
137
132
  end
138
133
 
139
- type = lookup_variable_type(type_qualifiers, type_specifiers,
140
- node.declarator)
134
+ type = lookup_variable_type(type_quals, type_specs, node.declarator)
141
135
 
142
136
  if type.function?
143
137
  node.type = @type_table.pointer_type(type)
@@ -151,16 +145,15 @@ module C #:nodoc:
151
145
  node.declaration_specifiers.accept(self) if node.declaration_specifiers
152
146
  node.declarator.accept(self)
153
147
 
154
- if declaration_specifiers = node.declaration_specifiers
155
- type_qualifiers = declaration_specifiers.type_qualifiers
156
- type_specifiers = declaration_specifiers.type_specifiers
148
+ if dcl_specs = node.declaration_specifiers
149
+ type_quals = dcl_specs.type_qualifiers
150
+ type_specs = dcl_specs.type_specifiers
157
151
  else
158
- type_qualifiers = []
159
- type_specifiers = []
152
+ type_quals = []
153
+ type_specs = []
160
154
  end
161
155
 
162
- type = lookup_variable_type(type_qualifiers, type_specifiers,
163
- node.declarator)
156
+ type = lookup_variable_type(type_quals, type_specs, node.declarator)
164
157
 
165
158
  if type.function?
166
159
  node.type = @type_table.pointer_type(type)
@@ -174,15 +167,15 @@ module C #:nodoc:
174
167
  node.declaration_specifiers.accept(self) if node.declaration_specifiers
175
168
  node.init_declarator.accept(self)
176
169
 
177
- if declaration_specifiers = node.declaration_specifiers
178
- type_qualifiers = declaration_specifiers.type_qualifiers
179
- type_specifiers = declaration_specifiers.type_specifiers
170
+ if dcl_specs = node.declaration_specifiers
171
+ type_quals = dcl_specs.type_qualifiers
172
+ type_specs = dcl_specs.type_specifiers
180
173
  else
181
- type_qualifiers = []
182
- type_specifiers = []
174
+ type_quals = []
175
+ type_specs = []
183
176
  end
184
177
 
185
- type = lookup_variable_type(type_qualifiers, type_specifiers,
178
+ type = lookup_variable_type(type_quals, type_specs,
186
179
  node.init_declarator.declarator)
187
180
 
188
181
  if type.function?
@@ -217,9 +210,9 @@ module C #:nodoc:
217
210
  def visit_type_name(node)
218
211
  checkpoint(node.location)
219
212
  super
220
- type_qualifiers = node.specifier_qualifier_list.type_qualifiers
221
- type_specifiers = node.specifier_qualifier_list.type_specifiers
222
- node.type = lookup_variable_type(type_qualifiers, type_specifiers,
213
+ type_quals = node.specifier_qualifier_list.type_qualifiers
214
+ type_specs = node.specifier_qualifier_list.type_specifiers
215
+ node.type = lookup_variable_type(type_quals, type_specs,
223
216
  node.abstract_declarator)
224
217
  end
225
218
 
@@ -230,42 +223,37 @@ module C #:nodoc:
230
223
  end
231
224
 
232
225
  private
233
- def lookup_variable_type(type_qualifiers, type_specifiers, declarator)
234
- type = @type_table.lookup_or_install_type(type_qualifiers,
235
- type_specifiers,
236
- declarator, interpreter)
237
- type ? type : fallback_type
226
+ def lookup_variable_type(type_quals, type_specs, dcl)
227
+ @type_table.lookup_or_install_type(
228
+ type_quals, type_specs, dcl, interpreter) || fallback_type
238
229
  end
239
230
 
240
- def lookup_function_type(function_definition)
241
- type = @type_table.lookup_function_type(function_definition)
242
- type ? type : fallback_type
231
+ def lookup_function_type(fun_def)
232
+ @type_table.lookup_function_type(fun_def) || fallback_type
243
233
  end
244
234
 
245
- def compute_bitfield_width(struct_declarator)
246
- return nil unless expression = struct_declarator.expression
247
-
248
- if interpreter
249
- object = interpreter.execute(expression)
250
- if object.variable? && object.value.scalar?
251
- return object.value.unique_sample
235
+ def compute_bitfield_width(struct_dcl)
236
+ if expr = struct_dcl.expression
237
+ if interpreter
238
+ obj = interpreter.execute(expr)
239
+ else
240
+ obj = Interpreter.new(@type_table).execute(expr)
252
241
  end
253
- else
254
- object = Interpreter.new(@type_table).execute(expression)
255
- if object.variable? && object.value.scalar?
256
- return object.value.unique_sample
242
+
243
+ if obj.variable? && obj.value.scalar?
244
+ return obj.value.unique_sample
257
245
  end
258
246
  end
259
-
260
247
  nil
261
248
  end
249
+
250
+ extend Forwardable
251
+
252
+ def_delegator :@type_table, :monitor
253
+ private :monitor
262
254
  end
263
255
 
264
256
  class StaticTypeResolver < TypeResolver
265
- def initialize
266
- super(TypeTable.new)
267
- end
268
-
269
257
  private
270
258
  def interpreter
271
259
  nil
@@ -277,9 +265,9 @@ module C #:nodoc:
277
265
  end
278
266
 
279
267
  class DynamicTypeResolver < TypeResolver
280
- def initialize(type_table, interpreter)
281
- super(type_table)
282
- @interpreter = interpreter
268
+ def initialize(type_tbl, interp)
269
+ super(type_tbl)
270
+ @interpreter = interp
283
271
  end
284
272
 
285
273
  attr_reader :interpreter
@@ -1,7 +1,7 @@
1
1
  # Scanner for C language.
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
  #
@@ -30,7 +30,7 @@
30
30
  #++
31
31
 
32
32
  module AdLint #:nodoc:
33
- module C #:nodoc:
33
+ module Cc1 #:nodoc:
34
34
 
35
35
  # == DESCRIPTION
36
36
  # Constants for scanning the C source code.
@@ -101,12 +101,12 @@ module C #:nodoc:
101
101
  # Scans C identifier.
102
102
  #
103
103
  # === PARAMETER
104
- # _content_:: StringContent -- Scanning source.
104
+ # _cont_:: StringContent -- Scanning source.
105
105
  #
106
106
  # === RETURN VALUE
107
107
  # String -- Returns C identifier string if found at head of the content.
108
- def scan_identifier(content)
109
- content.scan(/[a-z_][a-z_0-9]*\b/i)
108
+ def scan_identifier(cont)
109
+ cont.scan(/[a-z_][a-z_0-9]*\b/i)
110
110
  end
111
111
 
112
112
  KEYWORDS_RE = Regexp.new(KEYWORD_VALUES.map { |keyword|
@@ -118,16 +118,16 @@ module C #:nodoc:
118
118
  # Scans C keyword.
119
119
  #
120
120
  # === PARAMETER
121
- # _content_:: StringContent -- Scanning source.
121
+ # _cont_:: StringContent -- Scanning source.
122
122
  #
123
123
  # === RETURN VALUE
124
124
  # String -- Returns C keyword string if found at head of the content.
125
- def scan_keyword(content)
126
- content.scan(KEYWORDS_RE)
125
+ def scan_keyword(cont)
126
+ cont.scan(KEYWORDS_RE)
127
127
  end
128
128
 
129
- PUNCTUATORS_RE = Regexp.new(PUNCTUATORS.sort { |l, r|
130
- r.length <=> l.length
129
+ PUNCTUATORS_RE = Regexp.new(PUNCTUATORS.sort { |a, b|
130
+ b.length <=> a.length
131
131
  }.map { |punct|
132
132
  punct.each_char.map { |ch| '\\' + ch }.join
133
133
  }.join("|")).freeze
@@ -137,63 +137,68 @@ module C #:nodoc:
137
137
  # Scans C punctuator.
138
138
  #
139
139
  # === PARAMETER
140
- # _content_:: StringContent -- Scanning source.
140
+ # _cont_:: StringContent -- Scanning source.
141
141
  #
142
142
  # === RETURN VALUE
143
143
  # String -- Returns C punctuator string if found at head of the content.
144
- def scan_punctuator(content)
145
- content.scan(PUNCTUATORS_RE)
144
+ def scan_punctuator(cont)
145
+ cont.scan(PUNCTUATORS_RE)
146
146
  end
147
147
 
148
148
  # === DESCRIPTION
149
149
  # Scans C integer constant.
150
150
  #
151
151
  # === PARAMETER
152
- # _content_:: StringContent -- Scanning source.
152
+ # _cont_:: StringContent -- Scanning source.
153
153
  #
154
154
  # === RETURN VALUE
155
155
  # String -- Returns C integer constant string if found at head of the
156
156
  # content.
157
- def scan_integer_constant(content)
158
- content.scan(/(?:0x[0-9a-f]+|0b[01]+|[0-9]+)[UL]*/i)
157
+ def scan_integer_constant(cont)
158
+ cont.scan(/(?:0x[0-9a-f]+|0b[01]+|[0-9]+)[UL]*/i)
159
159
  end
160
160
 
161
+ FLOATING1_RE = /(?:[0-9]*\.[0-9]*E[+-]?[0-9]+|[0-9]+\.?E[+-]?[0-9]+)[FL]*/i
162
+ FLOATING2_RE = /(?:[0-9]*\.[0-9]+|[0-9]+\.)[FL]*/i
163
+ private_constant :FLOATING1_RE, :FLOATING2_RE
164
+
161
165
  # === DESCRIPTION
162
166
  # Scans C floating constant.
163
167
  #
164
168
  # === PARAMETER
165
- # _content_:: StringContent -- Scanning source.
169
+ # _cont_:: StringContent -- Scanning source.
166
170
  #
167
171
  # === RETURN VALUE
168
172
  # String -- Returns C floating constant string if found at head of the
169
173
  # content.
170
- def scan_floating_constant(content)
171
- content.scan(
172
- /(?:[0-9]*\.[0-9]*E[+-]?[0-9]+|[0-9]+\.?E[+-]?[0-9]+)[FL]*/i) ||
173
- content.scan(/(?:[0-9]*\.[0-9]+|[0-9]+\.)[FL]*/i)
174
+ def scan_floating_constant(cont)
175
+ cont.scan(FLOATING1_RE) || cont.scan(FLOATING2_RE)
174
176
  end
175
177
 
176
178
  # === DESCRIPTION
177
179
  # Scans C character constant.
178
180
  #
179
181
  # === PARAMETER
180
- # _content_:: StringContent -- Scanning source.
182
+ # _cont_:: StringContent -- Scanning source.
181
183
  #
182
184
  # === RETURN VALUE
183
185
  # String -- Returns C character constant string if found at head of the
184
186
  # content.
185
- def scan_char_constant(content)
186
- scanned = content.scan(/L?'/i)
187
- return nil unless scanned
188
-
189
- until content.empty?
190
- str = content.scan(/.*?(?=\\|')/m)
191
- scanned << str if str
192
- next if content.scan(/\\[ \t]*\n/)
187
+ def scan_char_constant(cont)
188
+ unless scanned = cont.scan(/L?'/i)
189
+ return nil
190
+ end
191
+
192
+ until cont.empty?
193
+ if str = cont.scan(/.*?(?=\\|')/m)
194
+ scanned << str
195
+ end
196
+ next if cont.scan(/\\[ \t]*\n/)
197
+
193
198
  case
194
- when content.check(/\\/)
195
- scanned << content.eat!(2)
196
- when quote = content.scan(/'/)
199
+ when cont.check(/\\/)
200
+ scanned << cont.eat!(2)
201
+ when quote = cont.scan(/'/)
197
202
  scanned << quote
198
203
  break
199
204
  end
@@ -206,23 +211,26 @@ module C #:nodoc:
206
211
  # Scans C string literal.
207
212
  #
208
213
  # === PARAMETER
209
- # _content_:: StringContent -- Scanning source.
214
+ # _cont_:: StringContent -- Scanning source.
210
215
  #
211
216
  # === RETURN VALUE
212
217
  # String -- Returns C string literal string if found at head of the
213
218
  # content.
214
- def scan_string_literal(content)
215
- scanned = content.scan(/L?"/i)
216
- return nil unless scanned
217
-
218
- until content.empty?
219
- str = content.scan(/.*?(?=\\|")/m)
220
- scanned << str if str
221
- next if content.scan(/\\[ \t]*\n/)
219
+ def scan_string_literal(cont)
220
+ unless scanned = cont.scan(/L?"/i)
221
+ return nil
222
+ end
223
+
224
+ until cont.empty?
225
+ if str = cont.scan(/.*?(?=\\|")/m)
226
+ scanned << str
227
+ end
228
+ next if cont.scan(/\\[ \t]*\n/)
229
+
222
230
  case
223
- when content.check(/\\/)
224
- scanned << content.eat!(2)
225
- when quote = content.scan(/"/)
231
+ when cont.check(/\\/)
232
+ scanned << cont.eat!(2)
233
+ when quote = cont.scan(/"/)
226
234
  scanned << quote
227
235
  break
228
236
  end
@@ -235,12 +243,12 @@ module C #:nodoc:
235
243
  # Scans C NULL constant.
236
244
  #
237
245
  # === PARAMETER
238
- # _content_:: StringContent -- Scanning source.
246
+ # _cont_:: StringContent -- Scanning source.
239
247
  #
240
248
  # === RETURN VALUE
241
249
  # String -- Returns C NULL constant string if found at head of the content.
242
- def scan_null_constant(content)
243
- content.scan(/NULL\b/)
250
+ def scan_null_constant(cont)
251
+ cont.scan(/NULL\b/)
244
252
  end
245
253
  end
246
254