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
  # C preprocessor macros.
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,6 +39,8 @@ module AdLint #:nodoc:
39
39
  module Cpp #:nodoc:
40
40
 
41
41
  class Macro
42
+ include LocationHolder
43
+
42
44
  def initialize(define_line)
43
45
  @define_line = define_line
44
46
  end
@@ -57,8 +59,8 @@ module Cpp #:nodoc:
57
59
  @define_line.location
58
60
  end
59
61
 
60
- def expand(tokens, macro_table, context)
61
- @define_line.mark_as_referred_by(tokens.first)
62
+ def expand(toks, macro_tbl, repl_ctxt)
63
+ @define_line.mark_as_referred_by(toks.first)
62
64
  end
63
65
 
64
66
  def function_like?
@@ -67,28 +69,28 @@ module Cpp #:nodoc:
67
69
  end
68
70
 
69
71
  class ObjectLikeMacro < Macro
70
- def replaceable_size(tokens)
71
- if tokens.first.value == "NULL" then
72
+ def replaceable_size(toks)
73
+ if toks.first.value == "NULL" then
72
74
  0
73
75
  else
74
- name.value == tokens.first.value ? 1 : 0
76
+ name.value == toks.first.value ? 1 : 0
75
77
  end
76
78
  end
77
79
 
78
- def expand(tokens, macro_table, context)
80
+ def expand(toks, macro_tbl, repl_ctxt)
79
81
  super
80
82
 
81
- if replacement_list
82
- location = tokens.first.location
83
- result = replacement_list.tokens.map { |t|
84
- ReplacedToken.new(t.type, t.value, location, t.type_hint, false)
83
+ if repl_list = self.replacement_list
84
+ loc = toks.first.location
85
+ res_toks = repl_list.tokens.map { |tok|
86
+ ReplacedToken.new(tok.type, tok.value, loc, tok.type_hint, false)
85
87
  }
86
88
  else
87
- result = []
89
+ res_toks = []
88
90
  end
89
91
 
90
- macro_table.notify_object_like_macro_replacement(self, tokens, result)
91
- result
92
+ macro_tbl.notify_object_like_macro_replacement(self, toks, res_toks)
93
+ res_toks
92
94
  end
93
95
 
94
96
  def function_like?; false end
@@ -98,7 +100,7 @@ module Cpp #:nodoc:
98
100
  def initialize(define_line)
99
101
  super
100
102
  if params = define_line.identifier_list
101
- @parameter_names = params.identifiers.map { |t| t.value }
103
+ @parameter_names = params.identifiers.map { |tok| tok.value }
102
104
  else
103
105
  @parameter_names = []
104
106
  end
@@ -106,137 +108,137 @@ module Cpp #:nodoc:
106
108
 
107
109
  attr_reader :parameter_names
108
110
 
109
- def replaceable_size(tokens)
110
- return 0 unless name.value == tokens.first.value
111
- args, index = parse_arguments(tokens, 1)
111
+ def replaceable_size(toks)
112
+ return 0 unless name.value == toks.first.value
113
+ args, idx = parse_arguments(toks, 1)
112
114
  case
113
115
  when args && @parameter_names.empty?
114
- index + 1
116
+ idx + 1
115
117
  when args && @parameter_names.size >= args.size
116
- index + 1
118
+ idx + 1
117
119
  else
118
120
  0
119
121
  end
120
122
  end
121
123
 
122
- def expand(tokens, macro_table, context)
124
+ def expand(toks, macro_tbl, repl_ctxt)
123
125
  super
124
126
 
125
- args, * = parse_arguments(tokens, 1)
127
+ args, * = parse_arguments(toks, 1)
126
128
  args = [] if @parameter_names.empty?
127
129
  args_hash =
128
- @parameter_names.zip(args).each_with_object({}) { |(name, arg), hash|
129
- hash[name] = arg
130
+ @parameter_names.zip(args).each_with_object({}) { |(param, arg), hash|
131
+ hash[param] = arg
130
132
  }
131
133
 
132
- result = expand_replacement_list(args_hash, tokens.first.location,
133
- macro_table, context)
134
- macro_table.notify_function_like_macro_replacement(self, tokens, args,
135
- result)
136
- result
134
+ res_toks = expand_replacement_list(args_hash, toks.first.location,
135
+ macro_tbl, repl_ctxt)
136
+ macro_tbl.notify_function_like_macro_replacement(self, toks, args,
137
+ res_toks)
138
+ res_toks
137
139
  end
138
140
 
139
141
  def function_like?; true end
140
142
 
141
143
  private
142
- def parse_arguments(tokens, index)
143
- while token = tokens[index]
144
+ def parse_arguments(toks, idx)
145
+ while tok = toks[idx]
144
146
  case
145
- when token.type == :NEW_LINE
146
- index += 1
147
- when token.value == "("
148
- index += 1
147
+ when tok.type == :NEW_LINE
148
+ idx += 1
149
+ when tok.value == "("
150
+ idx += 1
149
151
  break
150
152
  else
151
- return nil, index
153
+ return nil, idx
152
154
  end
153
155
  end
154
- return nil, index unless token
156
+ return nil, idx unless tok
155
157
 
156
158
  args = []
157
159
  loop do
158
- arg, index, last = parse_one_argument(tokens, index)
160
+ arg, idx, lst = parse_one_argument(toks, idx)
159
161
  args.push(arg)
160
- break if last
162
+ break if lst
161
163
  end
162
- return args, index
164
+ return args, idx
163
165
  end
164
166
 
165
- def parse_one_argument(tokens, index)
167
+ def parse_one_argument(toks, idx)
166
168
  arg = []
167
169
  paren_depth = 0
168
- while token = tokens[index]
169
- case token.value
170
+ while tok = toks[idx]
171
+ case tok.value
170
172
  when "("
171
- arg.push(token)
173
+ arg.push(tok)
172
174
  paren_depth += 1
173
175
  when ")"
174
176
  paren_depth -= 1
175
177
  if paren_depth >= 0
176
- arg.push(token)
178
+ arg.push(tok)
177
179
  else
178
- return arg, index, true
180
+ return arg, idx, true
179
181
  end
180
182
  when ","
181
183
  if paren_depth > 0
182
- arg.push(token)
184
+ arg.push(tok)
183
185
  else
184
- return arg, index + 1, false
186
+ return arg, idx + 1, false
185
187
  end
186
188
  when "\n"
187
189
  ;
188
190
  else
189
- arg.push(token)
191
+ arg.push(tok)
190
192
  end
191
- index += 1
193
+ idx += 1
192
194
  end
193
- return arg, index, true # NOTREACHED
195
+ return arg, idx, true # NOTREACHED
194
196
  end
195
197
 
196
- def expand_replacement_list(args, location, macro_table, context)
197
- return [] unless replacement_list
198
+ def expand_replacement_list(args, loc, macro_tbl, repl_ctxt)
199
+ unless repl_list = self.replacement_list
200
+ return []
201
+ end
198
202
 
199
- result = []
200
- index = 0
201
- while curr_token = replacement_list.tokens[index]
202
- next_token = replacement_list.tokens[index + 1]
203
+ res_toks = []
204
+ idx = 0
205
+ while cur_tok = repl_list.tokens[idx]
206
+ nxt_tok = repl_list.tokens[idx + 1]
203
207
 
204
208
  case
205
- when arg = args[curr_token.value]
206
- substitute_argument(curr_token, next_token, arg, location, result,
207
- macro_table, context)
208
- when curr_token.value == "#"
209
- if next_token
210
- stringized = stringize_argument(args[next_token.value], location,
211
- macro_table)
212
- result.push(stringized)
213
- index += 1
209
+ when arg = args[cur_tok.value]
210
+ substitute_argument(cur_tok, nxt_tok, arg, loc, res_toks, macro_tbl,
211
+ repl_ctxt)
212
+ when cur_tok.value == "#"
213
+ if nxt_tok
214
+ tok = stringize_argument(args[nxt_tok.value], loc, macro_tbl)
215
+ res_toks.push(tok)
216
+ idx += 1
214
217
  end
215
- when curr_token.value == "##" && next_token.value == "#"
216
- if next_next_token = replacement_list.tokens[index + 2]
217
- stringized = stringize_argument(args[next_next_token.value],
218
- location, macro_table)
219
- concat_with_last_token([stringized], location, result, macro_table)
220
- index += 2
218
+ when cur_tok.value == "##" && nxt_tok.value == "#"
219
+ if nxt_nxt_tok = repl_list.tokens[idx + 2]
220
+ tok = stringize_argument(args[nxt_nxt_tok.value], loc, macro_tbl)
221
+ concat_with_last_token([tok], loc, res_toks, macro_tbl)
222
+ idx += 2
221
223
  end
222
- when curr_token.value == "##"
223
- if next_token and arg = args[next_token.value]
224
- concat_with_last_token(arg, location, result, macro_table)
224
+ when cur_tok.value == "##"
225
+ if nxt_tok and arg = args[nxt_tok.value]
226
+ concat_with_last_token(arg, loc, res_toks, macro_tbl)
225
227
  else
226
- concat_with_last_token([next_token], location, result, macro_table)
228
+ concat_with_last_token([nxt_tok], loc, res_toks, macro_tbl)
227
229
  end
228
- index += 1
230
+ idx += 1
229
231
  else
230
- result.push(ReplacedToken.new(curr_token.type, curr_token.value,
231
- location, curr_token.type_hint, false))
232
+ res_toks.push(ReplacedToken.new(cur_tok.type, cur_tok.value, loc,
233
+ cur_tok.type_hint, false))
232
234
  end
233
- index += 1
235
+ idx += 1
234
236
  end
235
- result
237
+ res_toks
236
238
  end
237
239
 
238
- def substitute_argument(param_token, next_token, arg, location, result,
239
- macro_table, context)
240
+ def substitute_argument(param_tok, nxt_tok, arg, loc, res_toks, macro_tbl,
241
+ repl_ctxt)
240
242
  # NOTE: The ISO C99 standard says;
241
243
  #
242
244
  # 6.10.3.1 Argument substitution
@@ -250,19 +252,19 @@ module Cpp #:nodoc:
250
252
  # tokens are completely macro replaced as if they formed the rest of
251
253
  # the preprocessing file; no other preprocessing tokens are available.
252
254
 
253
- if next_token && next_token.value == "##"
254
- result.concat(arg.map { |t|
255
- ReplacedToken.new(t.type, t.value, location, t.type_hint, false)
255
+ if nxt_tok && nxt_tok.value == "##"
256
+ res_toks.concat(arg.map { |tok|
257
+ ReplacedToken.new(tok.type, tok.value, loc, tok.type_hint, false)
256
258
  })
257
259
  else
258
- macro_table.replace(arg, context)
259
- result.concat(arg.map { |t|
260
- ReplacedToken.new(t.type, t.value, location, t.type_hint, true)
260
+ macro_tbl.replace(arg, repl_ctxt)
261
+ res_toks.concat(arg.map { |tok|
262
+ ReplacedToken.new(tok.type, tok.value, loc, tok.type_hint, true)
261
263
  })
262
264
  end
263
265
  end
264
266
 
265
- def stringize_argument(arg, expansion_location, macro_table)
267
+ def stringize_argument(arg, expansion_loc, macro_tbl)
266
268
  # NOTE: The ISO C99 standard says;
267
269
  #
268
270
  # 6.10.3.2 The # operator
@@ -298,18 +300,17 @@ module Cpp #:nodoc:
298
300
  # NOTE: This code does not concern about contents of the string literal.
299
301
  # But, it is enough for analysis.
300
302
 
301
- str = arg.map { |token| token.value }.join
303
+ str = arg.map { |tok| tok.value }.join
302
304
  if str =~ /((:?\\*))\\\z/ && $1.length.even?
303
305
  str.chop!
304
- macro_table.notify_last_backslash_ignored(arg.last)
306
+ macro_tbl.notify_last_backslash_ignored(arg.last)
305
307
  end
306
308
 
307
309
  ReplacedToken.new(:PP_TOKEN, "\"#{str.gsub(/["\\]/) { "\\" + $& }}\"",
308
- expansion_location, :STRING_LITERAL, false)
310
+ expansion_loc, :STRING_LITERAL, false)
309
311
  end
310
312
 
311
- def concat_with_last_token(arg_tokens, expansion_location, result_tokens,
312
- macro_table)
313
+ def concat_with_last_token(arg_toks, expansion_loc, res_toks, macro_tbl)
313
314
  # NOTE: The ISO C99 standard says;
314
315
  #
315
316
  # 6.10.3.3 The ## operator
@@ -341,28 +342,27 @@ module Cpp #:nodoc:
341
342
  # The resulting token is available for further macro replacement. The
342
343
  # order of evaluation of ## operators is unspecified.
343
344
 
344
- if lhs = result_tokens.pop
345
- if rhs = arg_tokens.first
345
+ if lhs = res_toks.pop
346
+ if rhs = arg_toks.first
346
347
  # NOTE: To avoid syntax error when the concatenated token can be
347
348
  # retokenize to two or more tokens.
348
- new_tokens = StringToPPTokensLexer.new(lhs.value + rhs.value).execute
349
- new_tokens.map! do |token|
350
- ReplacedToken.new(token.type, token.value, expansion_location,
351
- token.type_hint, false)
349
+ new_toks = StringToPPTokensLexer.new(lhs.value + rhs.value).execute
350
+ new_toks.map! do |tok|
351
+ ReplacedToken.new(tok.type, tok.value, expansion_loc,
352
+ tok.type_hint, false)
352
353
  end
353
- result_tokens.concat(new_tokens)
354
- result_tokens.concat(arg_tokens[1..-1].map { |token|
355
- ReplacedToken.new(token.type, token.value, expansion_location,
356
- token.type_hint, false)
354
+ res_toks.concat(new_toks)
355
+ res_toks.concat(arg_toks[1..-1].map { |tok|
356
+ ReplacedToken.new(tok.type, tok.value, expansion_loc,
357
+ tok.type_hint, false)
357
358
  })
358
359
  else
359
- new_tokens = [ReplacedToken.new(lhs.type, lhs.value,
360
- expansion_location, lhs.type_hint,
361
- false)]
362
- result_tokens.concat(new_tokens)
360
+ new_toks = [ReplacedToken.new(lhs.type, lhs.value, expansion_loc,
361
+ lhs.type_hint, false)]
362
+ res_toks.concat(new_toks)
363
363
  end
364
364
 
365
- macro_table.notify_sharpsharp_operator_evaled(lhs, rhs, new_tokens)
365
+ macro_tbl.notify_sharpsharp_operator_evaled(lhs, rhs, new_toks)
366
366
  end
367
367
  end
368
368
  end
@@ -375,13 +375,13 @@ module Cpp #:nodoc:
375
375
 
376
376
  attr_reader :replacement_list
377
377
 
378
- def expand(tokens, macro_table, context)
379
- @replacement_list = generate_replacement_list(tokens.first)
378
+ def expand(toks, macro_tbl, repl_ctxt)
379
+ @replacement_list = generate_replacement_list(toks.first)
380
380
  super
381
381
  end
382
382
 
383
383
  private
384
- def generate_replacement_list(token)
384
+ def generate_replacement_list(tok)
385
385
  subclass_responsibility
386
386
  end
387
387
  end
@@ -392,9 +392,9 @@ module Cpp #:nodoc:
392
392
  end
393
393
 
394
394
  private
395
- def generate_replacement_list(token)
395
+ def generate_replacement_list(tok)
396
396
  date = Time.now.strftime("%h %d %Y")
397
- PPTokens.new.push(Token.new(:PP_TOKEN, "\"#{date}\"", token.location,
397
+ PPTokens.new.push(Token.new(:PP_TOKEN, "\"#{date}\"", tok.location,
398
398
  :STRING_LITERAL))
399
399
  end
400
400
  end
@@ -405,9 +405,9 @@ module Cpp #:nodoc:
405
405
  end
406
406
 
407
407
  private
408
- def generate_replacement_list(token)
408
+ def generate_replacement_list(tok)
409
409
  PPTokens.new.push(
410
- Token.new(:PP_TOKEN, "\"#{token.location.fpath}\"", token.location,
410
+ Token.new(:PP_TOKEN, "\"#{tok.location.fpath}\"", tok.location,
411
411
  :STRING_LITERAL))
412
412
  end
413
413
  end
@@ -418,9 +418,9 @@ module Cpp #:nodoc:
418
418
  end
419
419
 
420
420
  private
421
- def generate_replacement_list(token)
421
+ def generate_replacement_list(tok)
422
422
  PPTokens.new.push(
423
- Token.new(:PP_TOKEN, "#{token.location.line_no}", token.location,
423
+ Token.new(:PP_TOKEN, "#{tok.location.line_no}", tok.location,
424
424
  :STRING_LITERAL))
425
425
  end
426
426
  end
@@ -431,8 +431,8 @@ module Cpp #:nodoc:
431
431
  end
432
432
 
433
433
  private
434
- def generate_replacement_list(token)
435
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
434
+ def generate_replacement_list(tok)
435
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
436
436
  end
437
437
  end
438
438
 
@@ -442,8 +442,8 @@ module Cpp #:nodoc:
442
442
  end
443
443
 
444
444
  private
445
- def generate_replacement_list(token)
446
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
445
+ def generate_replacement_list(tok)
446
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
447
447
  end
448
448
  end
449
449
 
@@ -453,8 +453,8 @@ module Cpp #:nodoc:
453
453
  end
454
454
 
455
455
  private
456
- def generate_replacement_list(token)
457
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
456
+ def generate_replacement_list(tok)
457
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
458
458
  end
459
459
  end
460
460
 
@@ -464,8 +464,8 @@ module Cpp #:nodoc:
464
464
  end
465
465
 
466
466
  private
467
- def generate_replacement_list(token)
468
- PPTokens.new.push(Token.new(:PP_TOKEN, "199901L", token.location,
467
+ def generate_replacement_list(tok)
468
+ PPTokens.new.push(Token.new(:PP_TOKEN, "199901L", tok.location,
469
469
  :CONSTANT))
470
470
  end
471
471
  end
@@ -476,9 +476,9 @@ module Cpp #:nodoc:
476
476
  end
477
477
 
478
478
  private
479
- def generate_replacement_list(token)
479
+ def generate_replacement_list(tok)
480
480
  time = Time.now.strftime("%H:%M:%S")
481
- PPTokens.new.push(Token.new(:PP_TOKEN, "\"#{time}\"", token.location,
481
+ PPTokens.new.push(Token.new(:PP_TOKEN, "\"#{time}\"", tok.location,
482
482
  :STRING_LITERAL))
483
483
  end
484
484
  end
@@ -489,8 +489,8 @@ module Cpp #:nodoc:
489
489
  end
490
490
 
491
491
  private
492
- def generate_replacement_list(token)
493
- PPTokens.new.push(Token.new(:PP_TOKEN, "0", token.location, :CONSTANT))
492
+ def generate_replacement_list(tok)
493
+ PPTokens.new.push(Token.new(:PP_TOKEN, "0", tok.location, :CONSTANT))
494
494
  end
495
495
  end
496
496
 
@@ -500,8 +500,8 @@ module Cpp #:nodoc:
500
500
  end
501
501
 
502
502
  private
503
- def generate_replacement_list(token)
504
- PPTokens.new.push(Token.new(:PP_TOKEN, "0", token.location, :CONSTANT))
503
+ def generate_replacement_list(tok)
504
+ PPTokens.new.push(Token.new(:PP_TOKEN, "0", tok.location, :CONSTANT))
505
505
  end
506
506
  end
507
507
 
@@ -511,8 +511,8 @@ module Cpp #:nodoc:
511
511
  end
512
512
 
513
513
  private
514
- def generate_replacement_list(token)
515
- PPTokens.new.push(Token.new(:PP_TOKEN, "199712L", token.location,
514
+ def generate_replacement_list(tok)
515
+ PPTokens.new.push(Token.new(:PP_TOKEN, "199712L", tok.location,
516
516
  :CONSTANT))
517
517
  end
518
518
  end
@@ -522,7 +522,7 @@ module Cpp #:nodoc:
522
522
  super(PseudoFunctionLikeDefineLine.new("_Pragma", ["str"]))
523
523
  end
524
524
 
525
- def expand(tokens, macro_table, context)
525
+ def expand(toks, macro_tbl, repl_ctxt)
526
526
  # TODO: Should implement pragma handling feature.
527
527
  []
528
528
  end
@@ -534,8 +534,8 @@ module Cpp #:nodoc:
534
534
  end
535
535
 
536
536
  private
537
- def generate_replacement_list(token)
538
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
537
+ def generate_replacement_list(tok)
538
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
539
539
  end
540
540
  end
541
541
 
@@ -545,8 +545,8 @@ module Cpp #:nodoc:
545
545
  end
546
546
 
547
547
  private
548
- def generate_replacement_list(token)
549
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
548
+ def generate_replacement_list(tok)
549
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
550
550
  end
551
551
  end
552
552
 
@@ -556,8 +556,8 @@ module Cpp #:nodoc:
556
556
  end
557
557
 
558
558
  private
559
- def generate_replacement_list(token)
560
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
559
+ def generate_replacement_list(tok)
560
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
561
561
  end
562
562
  end
563
563
 
@@ -567,8 +567,8 @@ module Cpp #:nodoc:
567
567
  end
568
568
 
569
569
  private
570
- def generate_replacement_list(token)
571
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
570
+ def generate_replacement_list(tok)
571
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
572
572
  end
573
573
  end
574
574
 
@@ -578,8 +578,8 @@ module Cpp #:nodoc:
578
578
  end
579
579
 
580
580
  private
581
- def generate_replacement_list(token)
582
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
581
+ def generate_replacement_list(tok)
582
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
583
583
  end
584
584
  end
585
585
 
@@ -589,8 +589,8 @@ module Cpp #:nodoc:
589
589
  end
590
590
 
591
591
  private
592
- def generate_replacement_list(token)
593
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
592
+ def generate_replacement_list(tok)
593
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
594
594
  end
595
595
  end
596
596
 
@@ -600,8 +600,8 @@ module Cpp #:nodoc:
600
600
  end
601
601
 
602
602
  private
603
- def generate_replacement_list(token)
604
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
603
+ def generate_replacement_list(tok)
604
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
605
605
  end
606
606
  end
607
607
 
@@ -611,25 +611,25 @@ module Cpp #:nodoc:
611
611
  end
612
612
 
613
613
  private
614
- def generate_replacement_list(token)
615
- PPTokens.new.push(Token.new(:PP_TOKEN, "1", token.location, :CONSTANT))
614
+ def generate_replacement_list(tok)
615
+ PPTokens.new.push(Token.new(:PP_TOKEN, "1", tok.location, :CONSTANT))
616
616
  end
617
617
  end
618
618
 
619
619
  class MacroReplacementContext
620
620
  def initialize
621
- @hide_sets = Hash.new { |h, k| h[k] = Set.new }
621
+ @hide_sets = Hash.new { |hash, key| hash[key] = Set.new }
622
622
  end
623
623
 
624
- def add_to_hide_set(orig_token, new_tokens, macro_name)
625
- new_tokens.each do |new_token|
626
- @hide_sets[new_token].merge(@hide_sets[orig_token])
627
- @hide_sets[new_token].add(macro_name)
624
+ def add_to_hide_set(org_tok, new_toks, macro_name)
625
+ new_toks.each do |new_tok|
626
+ @hide_sets[new_tok].merge(@hide_sets[org_tok])
627
+ @hide_sets[new_tok].add(macro_name)
628
628
  end
629
629
  end
630
630
 
631
- def hidden?(token, macro_name)
632
- @hide_sets[token].include?(macro_name)
631
+ def hidden?(tok, macro_name)
632
+ @hide_sets[tok].include?(macro_name)
633
633
  end
634
634
  end
635
635
 
@@ -660,12 +660,12 @@ module Cpp #:nodoc:
660
660
  @macros[name_str]
661
661
  end
662
662
 
663
- def replace(tokens, context = nil)
663
+ def replace(toks, repl_ctxt = nil)
664
664
  replaced = false
665
- index = 0
665
+ idx = 0
666
666
 
667
- while token = tokens[index]
668
- case token.value
667
+ while tok = toks[idx]
668
+ case tok.value
669
669
  when "defined"
670
670
  in_defined = true
671
671
  when "(", ")"
@@ -674,53 +674,51 @@ module Cpp #:nodoc:
674
674
  if in_defined
675
675
  in_defined = false
676
676
  else
677
- if new_index = do_replace(tokens, index, context)
678
- index = new_index
677
+ if new_idx = do_replace(toks, idx, repl_ctxt)
678
+ idx = new_idx
679
679
  replaced = true
680
680
  end
681
681
  end
682
682
  end
683
- index += 1
683
+ idx += 1
684
684
  end
685
685
 
686
686
  replaced
687
687
  end
688
688
 
689
- def notify_object_like_macro_replacement(macro, replacing_tokens,
690
- result_tokens)
691
- on_object_like_macro_replacement.invoke(macro, replacing_tokens,
692
- result_tokens)
689
+ def notify_object_like_macro_replacement(macro, replacing_toks, res_toks)
690
+ on_object_like_macro_replacement.invoke(macro, replacing_toks, res_toks)
693
691
  end
694
692
 
695
- def notify_function_like_macro_replacement(macro, replacing_tokens, args,
696
- result_tokens)
697
- on_function_like_macro_replacement.invoke(macro, replacing_tokens, args,
698
- result_tokens)
693
+ def notify_function_like_macro_replacement(macro, replacing_toks, args,
694
+ res_toks)
695
+ on_function_like_macro_replacement.invoke(macro, replacing_toks, args,
696
+ res_toks)
699
697
  end
700
698
 
701
- def notify_sharpsharp_operator_evaled(lhs_token, rhs_token, new_tokens)
702
- on_sharpsharp_operator_evaled.invoke(lhs_token, rhs_token, new_tokens)
699
+ def notify_sharpsharp_operator_evaled(lhs_tok, rhs_tok, new_toks)
700
+ on_sharpsharp_operator_evaled.invoke(lhs_tok, rhs_tok, new_toks)
703
701
  end
704
702
 
705
- def notify_last_backslash_ignored(token)
706
- on_last_backslash_ignored.invoke(token)
703
+ def notify_last_backslash_ignored(tok)
704
+ on_last_backslash_ignored.invoke(tok)
707
705
  end
708
706
 
709
707
  private
710
- def do_replace(tokens, index, context)
711
- context ||= MacroReplacementContext.new
708
+ def do_replace(toks, idx, repl_ctxt)
709
+ repl_ctxt ||= MacroReplacementContext.new
712
710
 
713
- return nil unless token = tokens[index] and macro = lookup(token.value)
714
- return nil if context.hidden?(token, macro.name.value)
711
+ return nil unless tok = toks[idx] and macro = lookup(tok.value)
712
+ return nil if repl_ctxt.hidden?(tok, macro.name.value)
715
713
 
716
- size = macro.replaceable_size(tokens[index..-1])
714
+ size = macro.replaceable_size(toks[idx..-1])
717
715
 
718
- if tokens[index, size].all? { |t| t.need_no_further_replacement? }
716
+ if toks[idx, size].all? { |t| t.need_no_further_replacement? }
719
717
  return nil
720
718
  end
721
719
 
722
- expanded = macro.expand(tokens[index, size], self, context)
723
- context.add_to_hide_set(tokens[index], expanded, macro.name.value)
720
+ expanded = macro.expand(toks[idx, size], self, repl_ctxt)
721
+ repl_ctxt.add_to_hide_set(toks[idx], expanded, macro.name.value)
724
722
 
725
723
  # NOTE: The ISO C99 standard says;
726
724
  #
@@ -740,10 +738,10 @@ module Cpp #:nodoc:
740
738
  # tokens are no longer available for further replacement even if they
741
739
  # are later (re)examined in contexts in which that macro name
742
740
  # preprocessing token whould otherwise have been replaced.
743
- while replace(expanded, context); end
744
- tokens[index, size] = expanded
741
+ while replace(expanded, repl_ctxt); end
742
+ toks[idx, size] = expanded
745
743
 
746
- index + expanded.size - 1
744
+ idx + expanded.size - 1
747
745
  end
748
746
 
749
747
  def predefine_special_macros