adlint 1.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 (465) hide show
  1. data/AUTHORS +27 -0
  2. data/COPYING +674 -0
  3. data/ChangeLog +820 -0
  4. data/INSTALL +78 -0
  5. data/MANIFEST +464 -0
  6. data/NEWS +38 -0
  7. data/README +74 -0
  8. data/Rakefile +167 -0
  9. data/TODO +29 -0
  10. data/bin/adlint +141 -0
  11. data/bin/adlint_chk +129 -0
  12. data/bin/adlint_cma +122 -0
  13. data/bin/adlint_sma +129 -0
  14. data/bin/adlintize +286 -0
  15. data/etc/conf.d/fallback/cinit.erb +11 -0
  16. data/etc/conf.d/fallback/traits.erb +216 -0
  17. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +149 -0
  18. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +227 -0
  19. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +224 -0
  20. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +226 -0
  21. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +219 -0
  22. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +224 -0
  23. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +234 -0
  24. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +226 -0
  25. data/etc/conf.d/noarch/GNUmakefile.erb +119 -0
  26. data/etc/conf.d/noarch/adlint_all_bat.erb +9 -0
  27. data/etc/conf.d/noarch/adlint_all_sh.erb +10 -0
  28. data/etc/conf.d/noarch/pinit.erb +11 -0
  29. data/etc/mesg.d/en_US/messages.yml +784 -0
  30. data/etc/mesg.d/ja_JP/messages.yml +784 -0
  31. data/lib/adlint/analyzer.rb +294 -0
  32. data/lib/adlint/c/branch.rb +251 -0
  33. data/lib/adlint/c/builtin.rb +92 -0
  34. data/lib/adlint/c/code.rb +490 -0
  35. data/lib/adlint/c/const.rb +465 -0
  36. data/lib/adlint/c/conv.rb +212 -0
  37. data/lib/adlint/c/ctrlexpr.rb +949 -0
  38. data/lib/adlint/c/domain.rb +7499 -0
  39. data/lib/adlint/c/environ.rb +133 -0
  40. data/lib/adlint/c/expr.rb +1725 -0
  41. data/lib/adlint/c/format.rb +3209 -0
  42. data/lib/adlint/c/interp.rb +1740 -0
  43. data/lib/adlint/c/lexer.rb +241 -0
  44. data/lib/adlint/c/mediator.rb +313 -0
  45. data/lib/adlint/c/message.rb +13597 -0
  46. data/lib/adlint/c/metric.rb +765 -0
  47. data/lib/adlint/c/object.rb +1018 -0
  48. data/lib/adlint/c/parser.rb +3800 -0
  49. data/lib/adlint/c/parser.y +2054 -0
  50. data/lib/adlint/c/phase.rb +712 -0
  51. data/lib/adlint/c/resolver.rb +270 -0
  52. data/lib/adlint/c/scanner.rb +248 -0
  53. data/lib/adlint/c/scope.rb +74 -0
  54. data/lib/adlint/c/syntax.rb +4279 -0
  55. data/lib/adlint/c/type.rb +7506 -0
  56. data/lib/adlint/c/util.rb +91 -0
  57. data/lib/adlint/c/value.rb +2310 -0
  58. data/lib/adlint/c.rb +56 -0
  59. data/lib/adlint/code.rb +500 -0
  60. data/lib/adlint/cpp/code.rb +189 -0
  61. data/lib/adlint/cpp/constexpr.rb +721 -0
  62. data/lib/adlint/cpp/constexpr.y +389 -0
  63. data/lib/adlint/cpp/eval.rb +1012 -0
  64. data/lib/adlint/cpp/lexer.rb +860 -0
  65. data/lib/adlint/cpp/macro.rb +637 -0
  66. data/lib/adlint/cpp/message.rb +992 -0
  67. data/lib/adlint/cpp/phase.rb +176 -0
  68. data/lib/adlint/cpp/scanner.rb +93 -0
  69. data/lib/adlint/cpp/source.rb +169 -0
  70. data/lib/adlint/cpp/subst.rb +300 -0
  71. data/lib/adlint/cpp/syntax.rb +1412 -0
  72. data/lib/adlint/cpp/util.rb +97 -0
  73. data/lib/adlint/cpp.rb +43 -0
  74. data/lib/adlint/driver.rb +147 -0
  75. data/lib/adlint/error.rb +179 -0
  76. data/lib/adlint/lang.rb +97 -0
  77. data/lib/adlint/ld/message.rb +259 -0
  78. data/lib/adlint/ld/metric.rb +57 -0
  79. data/lib/adlint/ld/object.rb +542 -0
  80. data/lib/adlint/ld/phase.rb +193 -0
  81. data/lib/adlint/ld/typedef.rb +109 -0
  82. data/lib/adlint/ld/util.rb +88 -0
  83. data/lib/adlint/ld.rb +37 -0
  84. data/lib/adlint/lexer.rb +293 -0
  85. data/lib/adlint/message.rb +368 -0
  86. data/lib/adlint/metric.rb +805 -0
  87. data/lib/adlint/monitor.rb +144 -0
  88. data/lib/adlint/phase.rb +90 -0
  89. data/lib/adlint/prelude.rb +314 -0
  90. data/lib/adlint/report.rb +617 -0
  91. data/lib/adlint/source.rb +155 -0
  92. data/lib/adlint/symbol.rb +127 -0
  93. data/lib/adlint/token.rb +215 -0
  94. data/lib/adlint/traits.rb +643 -0
  95. data/lib/adlint/util.rb +524 -0
  96. data/lib/adlint/version.rb +71 -0
  97. data/lib/adlint.rb +66 -0
  98. data/share/HEADER +45 -0
  99. data/share/demo/Makefile +110 -0
  100. data/share/demo/ambig_operator/ambig_operator.c +289 -0
  101. data/share/demo/arg_points_unset/arg_points_unset.c +37 -0
  102. data/share/demo/array_range/array_range.c +62 -0
  103. data/share/demo/bad_bitfields/bad_bitfields.c +74 -0
  104. data/share/demo/bad_brace/bad_brace.c +19 -0
  105. data/share/demo/bad_charset/abcde$.h +0 -0
  106. data/share/demo/bad_charset/bad_charset.c +22 -0
  107. data/share/demo/bad_comment/bad_comment.c +3 -0
  108. data/share/demo/bad_const/bad_const.c +19 -0
  109. data/share/demo/bad_conv/bad_conv.c +48 -0
  110. data/share/demo/bad_indent/bad_indent.c +50 -0
  111. data/share/demo/bad_init/bad_init.c +49 -0
  112. data/share/demo/bad_macro/bad_macro.c +97 -0
  113. data/share/demo/bitwise_expr/bitwise_expr.c +19 -0
  114. data/share/demo/call_by_value/call_by_value.c +26 -0
  115. data/share/demo/cross_ref/cross_ref.c +21 -0
  116. data/share/demo/dangling_else/dangling_else.c +20 -0
  117. data/share/demo/dead_code/dead_code.c +237 -0
  118. data/share/demo/deep_nest/deep_nest.c +57 -0
  119. data/share/demo/dense_switch/dense_switch.c +62 -0
  120. data/share/demo/direct_recur/direct_recur.c +15 -0
  121. data/share/demo/div_by_zero/div_by_zero.c +35 -0
  122. data/share/demo/dos_source/dos_source.c +7 -0
  123. data/share/demo/funptr_cast/funptr_cast.c +26 -0
  124. data/share/demo/goto_stmt/goto_stmt.c +19 -0
  125. data/share/demo/id_hiding/id_hiding.c +19 -0
  126. data/share/demo/ill_defined/ill_defined.c +13 -0
  127. data/share/demo/implicit_conv/implicit_conv.c +60 -0
  128. data/share/demo/implicit_int/implicit_int.c +14 -0
  129. data/share/demo/incomplete_type/incomplete_type.c +49 -0
  130. data/share/demo/indirect_recur/indirect_recur_1.c +14 -0
  131. data/share/demo/indirect_recur/indirect_recur_1.h +7 -0
  132. data/share/demo/indirect_recur/indirect_recur_2.c +12 -0
  133. data/share/demo/indirect_recur/indirect_recur_2.h +6 -0
  134. data/share/demo/indirect_recur/indirect_recur_3.c +6 -0
  135. data/share/demo/indirect_recur/indirect_recur_3.h +6 -0
  136. data/share/demo/indirect_recur/indirect_recur_4.c +25 -0
  137. data/share/demo/intro_demo/intro_demo.c +76 -0
  138. data/share/demo/intro_demo/intro_demo.h +12 -0
  139. data/share/demo/intro_demo/useless_header.h +5 -0
  140. data/share/demo/invalid_call/invalid_call.c +32 -0
  141. data/share/demo/kandr_fundef/kandr_fundef.c +10 -0
  142. data/share/demo/line_comment/line_comment.c +12 -0
  143. data/share/demo/local_decl/local_decl.c +9 -0
  144. data/share/demo/logical_trick/logical_trick.c +36 -0
  145. data/share/demo/long_sym/long_sym.c +5 -0
  146. data/share/demo/loop_var/loop_var.c +92 -0
  147. data/share/demo/malloc_or_die/malloc_or_die.c +43 -0
  148. data/share/demo/may_be_null/may_be_null.c +52 -0
  149. data/share/demo/may_be_null_arith/may_be_null_arith.c +15 -0
  150. data/share/demo/may_be_unset/may_be_unset.c +34 -0
  151. data/share/demo/mmapped_io/mmapped_io.c +23 -0
  152. data/share/demo/multi_break/multi_break.c +33 -0
  153. data/share/demo/multi_decl/multi_decl_1.c +17 -0
  154. data/share/demo/multi_decl/multi_decl_1.h +6 -0
  155. data/share/demo/multi_decl/multi_decl_2.c +13 -0
  156. data/share/demo/multi_decl/multi_decl_2.h +6 -0
  157. data/share/demo/multi_decl/multi_decl_3.c +22 -0
  158. data/share/demo/multi_def/multi_def_1.c +36 -0
  159. data/share/demo/multi_def/multi_def_1.h +6 -0
  160. data/share/demo/multi_def/multi_def_2.c +22 -0
  161. data/share/demo/multi_def/multi_def_2.h +6 -0
  162. data/share/demo/multi_def/multi_def_3.c +6 -0
  163. data/share/demo/multi_typedef/multi_typedef.c +11 -0
  164. data/share/demo/multi_typedef/multi_typedef_1.h +1 -0
  165. data/share/demo/multi_typedef/multi_typedef_2.h +1 -0
  166. data/share/demo/must_be_false/must_be_false.c +53 -0
  167. data/share/demo/must_be_null/must_be_null.c +13 -0
  168. data/share/demo/must_be_null_arith/must_be_null_arith.c +14 -0
  169. data/share/demo/must_be_true/must_be_true.c +21 -0
  170. data/share/demo/no_eof_nl/no_eof_nl.c +4 -0
  171. data/share/demo/no_void_arg/no_void_arg.c +14 -0
  172. data/share/demo/null_stmt/null_stmt.c +19 -0
  173. data/share/demo/octal_const/octal_const.c +20 -0
  174. data/share/demo/output_by_param/output_by_param.c +17 -0
  175. data/share/demo/overflow/overflow.c +74 -0
  176. data/share/demo/press_release/press_release.c +40 -0
  177. data/share/demo/retn_lvar_addr/retn_lvar_addr.c +47 -0
  178. data/share/demo/shift_expr/shift_expr.c +14 -0
  179. data/share/demo/should_be_typedef/should_be_typedef.c +51 -0
  180. data/share/demo/static_paths/static_paths.c +153 -0
  181. data/share/demo/static_vars/static_vars.c +39 -0
  182. data/share/demo/tag_hiding/tag_hiding.c +18 -0
  183. data/share/demo/tricky_incdec/tricky_incdec.c +12 -0
  184. data/share/demo/undefined_macro/undefined_macro.c +17 -0
  185. data/share/demo/uninit_vars/uninit_vars.c +28 -0
  186. data/share/demo/union_type/union_type.c +23 -0
  187. data/share/demo/unmatch_decl/unmatch_decl_1.c +12 -0
  188. data/share/demo/unmatch_decl/unmatch_decl_1.h +8 -0
  189. data/share/demo/unmatch_decl/unmatch_decl_2.c +10 -0
  190. data/share/demo/unmatch_decl/unmatch_decl_2.h +8 -0
  191. data/share/demo/unmatch_decl/unmatch_decl_3.c +7 -0
  192. data/share/demo/unmatch_paren_macro/unmatch_paren_macro.c +15 -0
  193. data/share/demo/unreachable/unreachable.c +34 -0
  194. data/share/demo/useless_exp_funs/useless_exp_funs_1.c +14 -0
  195. data/share/demo/useless_exp_funs/useless_exp_funs_1.h +1 -0
  196. data/share/demo/useless_exp_funs/useless_exp_funs_2.c +6 -0
  197. data/share/demo/useless_exp_vars/useless_export_1.c +8 -0
  198. data/share/demo/useless_exp_vars/useless_export_1.h +1 -0
  199. data/share/demo/useless_exp_vars/useless_export_2.c +7 -0
  200. data/share/demo/useless_expr/useless_expr.c +17 -0
  201. data/share/demo/useless_funs/useless_funs_1.c +21 -0
  202. data/share/demo/useless_funs/useless_funs_1.h +8 -0
  203. data/share/demo/useless_funs/useless_funs_2.c +6 -0
  204. data/share/demo/useless_header/useless_header.c +9 -0
  205. data/share/demo/useless_header/useless_header_1.h +12 -0
  206. data/share/demo/useless_header/useless_header_2.h +6 -0
  207. data/share/demo/useless_header/useless_header_3.h +9 -0
  208. data/share/demo/useless_header/useless_header_4.h +3 -0
  209. data/share/demo/useless_vars/useless_vars.c +17 -0
  210. data/share/demo/va_funcall/va_funcall.c +25 -0
  211. data/share/demo/various_fundef/various_fundef.c +36 -0
  212. data/share/demo/wchar_wstring/wchar_wstring.c +7 -0
  213. data/share/demo/wrap_around/wrap_around.c +38 -0
  214. data/share/doc/Makefile +16 -0
  215. data/share/doc/adlint_on_adqua.png +0 -0
  216. data/share/doc/adlint_on_eclipse_en.png +0 -0
  217. data/share/doc/adlint_on_eclipse_ja.png +0 -0
  218. data/share/doc/adlint_on_vim_en.png +0 -0
  219. data/share/doc/adlint_on_vim_ja.png +0 -0
  220. data/share/doc/developers_guide_ja.html +171 -0
  221. data/share/doc/developers_guide_ja.texi +87 -0
  222. data/share/doc/gen_mesg_sections.rb +39 -0
  223. data/share/doc/samples/GNUmakefile +162 -0
  224. data/share/doc/samples/adlint_traits.yml +238 -0
  225. data/share/doc/texinfo.css +22 -0
  226. data/share/doc/users_guide_en.html +39975 -0
  227. data/share/doc/users_guide_en.texi +32640 -0
  228. data/share/doc/users_guide_ja.html +40505 -0
  229. data/share/doc/users_guide_ja.texi +33189 -0
  230. data/share/logo/adlint-110.png +0 -0
  231. data/share/logo/adlint-524.png +0 -0
  232. data/share/logo/adlint.svg +4637 -0
  233. data/share/sample/README +6 -0
  234. data/share/sample/bison-2.5/adlint/GNUmakefile +170 -0
  235. data/share/sample/bison-2.5/adlint/adlint_traits.yml +225 -0
  236. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +198 -0
  237. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +228 -0
  238. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +21 -0
  239. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +238 -0
  240. data/share/sample/bison-2.5/adlint/src/GNUmakefile +166 -0
  241. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +228 -0
  242. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +21 -0
  243. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +239 -0
  244. data/share/sample/ctags-5.8/adlint/GNUmakefile +169 -0
  245. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +219 -0
  246. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +13 -0
  247. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +225 -0
  248. data/share/sample/flex-2.5.35/adlint/GNUmakefile +140 -0
  249. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +219 -0
  250. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +14 -0
  251. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +225 -0
  252. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +314 -0
  253. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +225 -0
  254. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +204 -0
  255. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +228 -0
  256. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +28 -0
  257. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +240 -0
  258. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +163 -0
  259. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +228 -0
  260. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +24 -0
  261. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +240 -0
  262. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +149 -0
  263. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +228 -0
  264. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +24 -0
  265. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +240 -0
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +131 -0
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +228 -0
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +24 -0
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +241 -0
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +131 -0
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +228 -0
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +24 -0
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +241 -0
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +131 -0
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +228 -0
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +24 -0
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +241 -0
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +131 -0
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +228 -0
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +24 -0
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +241 -0
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +134 -0
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +228 -0
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +24 -0
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +241 -0
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +131 -0
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +228 -0
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +24 -0
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +241 -0
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +131 -0
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +228 -0
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +24 -0
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +241 -0
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +131 -0
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +228 -0
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +24 -0
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +242 -0
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +132 -0
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +228 -0
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +24 -0
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +242 -0
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +132 -0
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +228 -0
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +24 -0
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +242 -0
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +132 -0
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +228 -0
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +24 -0
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +242 -0
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +132 -0
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +228 -0
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +24 -0
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +242 -0
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +134 -0
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +228 -0
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +24 -0
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +241 -0
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +140 -0
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +228 -0
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +24 -0
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +242 -0
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +131 -0
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +228 -0
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +24 -0
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +241 -0
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +131 -0
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +228 -0
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +24 -0
  329. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +241 -0
  330. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +131 -0
  331. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +228 -0
  332. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +24 -0
  333. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +241 -0
  334. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +134 -0
  335. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +228 -0
  336. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +24 -0
  337. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +242 -0
  338. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +131 -0
  339. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +228 -0
  340. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +24 -0
  341. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +241 -0
  342. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +131 -0
  343. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +228 -0
  344. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +24 -0
  345. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +241 -0
  346. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +131 -0
  347. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +228 -0
  348. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +24 -0
  349. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +241 -0
  350. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +131 -0
  351. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +228 -0
  352. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +24 -0
  353. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +241 -0
  354. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +131 -0
  355. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +228 -0
  356. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +24 -0
  357. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +241 -0
  358. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +131 -0
  359. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +228 -0
  360. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +24 -0
  361. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +241 -0
  362. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +131 -0
  363. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +228 -0
  364. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +24 -0
  365. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +241 -0
  366. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +131 -0
  367. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +228 -0
  368. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +24 -0
  369. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +241 -0
  370. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +131 -0
  371. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +228 -0
  372. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +24 -0
  373. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +241 -0
  374. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +131 -0
  375. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +228 -0
  376. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +24 -0
  377. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +241 -0
  378. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +162 -0
  379. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +228 -0
  380. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +24 -0
  381. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +241 -0
  382. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +131 -0
  383. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +228 -0
  384. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +24 -0
  385. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +241 -0
  386. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +135 -0
  387. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +228 -0
  388. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +24 -0
  389. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +241 -0
  390. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +131 -0
  391. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +228 -0
  392. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +24 -0
  393. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +241 -0
  394. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +131 -0
  395. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +228 -0
  396. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +24 -0
  397. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +241 -0
  398. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +131 -0
  399. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +228 -0
  400. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +24 -0
  401. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +241 -0
  402. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +131 -0
  403. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +228 -0
  404. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +24 -0
  405. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +241 -0
  406. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +132 -0
  407. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +228 -0
  408. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +24 -0
  409. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +241 -0
  410. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +144 -0
  411. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +228 -0
  412. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +24 -0
  413. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +241 -0
  414. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +131 -0
  415. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +228 -0
  416. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +24 -0
  417. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +241 -0
  418. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +131 -0
  419. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +228 -0
  420. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +24 -0
  421. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +241 -0
  422. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +140 -0
  423. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +228 -0
  424. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +24 -0
  425. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +241 -0
  426. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +131 -0
  427. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +228 -0
  428. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +24 -0
  429. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +241 -0
  430. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +131 -0
  431. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +228 -0
  432. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +24 -0
  433. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +241 -0
  434. data/share/sample/screen-4.0.3/adlint/GNUmakefile +162 -0
  435. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +228 -0
  436. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +21 -0
  437. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +238 -0
  438. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +185 -0
  439. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +228 -0
  440. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +25 -0
  441. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +250 -0
  442. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +131 -0
  443. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +228 -0
  444. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +24 -0
  445. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +237 -0
  446. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +146 -0
  447. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +225 -0
  448. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +132 -0
  449. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +228 -0
  450. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +24 -0
  451. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +240 -0
  452. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +153 -0
  453. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +228 -0
  454. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +23 -0
  455. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +239 -0
  456. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +147 -0
  457. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +228 -0
  458. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +24 -0
  459. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +240 -0
  460. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +144 -0
  461. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +228 -0
  462. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +24 -0
  463. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +239 -0
  464. data/spec/MUST_WRITE_SPECS_WITH_RSPEC +0 -0
  465. metadata +532 -0
@@ -0,0 +1,465 @@
1
+ # C constant-expression evaluator.
2
+ #
3
+ # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
+ # Copyright:: Copyright (C) 2010-2012, 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-2012, 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
+ module AdLint #:nodoc:
33
+ module C #:nodoc:
34
+
35
+ module ConstantEvaluator
36
+ # NOTE: Host class of this module must include InterpreterMediator.
37
+
38
+ def eval_constant(constant_specifier)
39
+ eval_as_integer_constant(constant_specifier.constant.value) or
40
+ eval_as_floating_constant(constant_specifier.constant.value) or
41
+ eval_as_character_constant(constant_specifier.constant.value)
42
+ end
43
+
44
+ private
45
+ def eval_as_integer_constant(value)
46
+ # NOTE: The ISO C99 standard saids;
47
+ #
48
+ # 6.4.4.1 Integer constants
49
+ #
50
+ # 5 The type of an integer constant is the first of the corresponding
51
+ # list in which its value can be represented.
52
+ #
53
+ # | decimal | octal or hexadecimal
54
+ # ------------+------------------------+------------------------
55
+ # unsuffixed | int | int
56
+ # | long int | unsigned int
57
+ # | long long int | long int
58
+ # | | unsigned long int
59
+ # | | long long int
60
+ # | | unsigned long long int
61
+ # ------------+------------------------+------------------------
62
+ # u or U | unsigned int | unsigned int
63
+ # | unsigned long int | unsigned long int
64
+ # | unsigned long long int | unsigned long long int
65
+ # ------------+------------------------+------------------------
66
+ # l or L | long int | long int
67
+ # | long long int | unsigned long int
68
+ # | | long long int
69
+ # | | unsigned long long int
70
+ # ------------+------------------------+------------------------
71
+ # u or U and | unsigned long int | unsigned long int
72
+ # l or L | unsigned long long int | unsigned long long int
73
+ # ------------+------------------------+------------------------
74
+ # ll or LL | long long int | long long int
75
+ # | | unsigned long long int
76
+ # ------------+------------------------+------------------------
77
+ # u or U and | unsigned long long int | unsigned long long int
78
+ # ll or LL | |
79
+
80
+ # NOTE: For binary constants.
81
+ case value
82
+ when /\A0b([01]+)(?:ULL|LLU)\z/i
83
+ return eval_as_non_decimal_integer_constant_with_ull($1.to_i(2))
84
+ when /\A0b([01]+)LL\z/i
85
+ return eval_as_non_decimal_integer_constant_with_ll($1.to_i(2))
86
+ when /\A0b([01]+)(?:UL|LU)\z/i
87
+ return eval_as_non_decimal_integer_constant_with_ul($1.to_i(2))
88
+ when /\A0b([01]+)L\z/i
89
+ return eval_as_non_decimal_integer_constant_with_l($1.to_i(2))
90
+ when /\A0b([01]+)U\z/i
91
+ return eval_as_non_decimal_integer_constant_with_u($1.to_i(2))
92
+ when /\A0b([01]+)\z/i
93
+ return eval_as_non_decimal_integer_constant_unsuffixed($1.to_i(2))
94
+ end
95
+
96
+ # NOTE: For octal constants.
97
+ case value
98
+ when /\A0([0-9]+)(?:ULL|LLU)\z/i
99
+ return eval_as_non_decimal_integer_constant_with_ull($1.to_i(8))
100
+ when /\A0([0-9]+)LL\z/i
101
+ return eval_as_non_decimal_integer_constant_with_ll($1.to_i(8))
102
+ when /\A0([0-9]+)(?:UL|LU)\z/i
103
+ return eval_as_non_decimal_integer_constant_with_ul($1.to_i(8))
104
+ when /\A0([0-9]+)L\z/i
105
+ return eval_as_non_decimal_integer_constant_with_l($1.to_i(8))
106
+ when /\A0([0-9]+)U\z/i
107
+ return eval_as_non_decimal_integer_constant_with_u($1.to_i(8))
108
+ when /\A0([0-9]+)\z/
109
+ return eval_as_non_decimal_integer_constant_unsuffixed($1.to_i(8))
110
+ end
111
+
112
+ # NOTE: For decimal constants.
113
+ case value
114
+ when /\A([0-9]+)(?:ULL|LLU)\z/i
115
+ return eval_as_decimal_integer_constant_with_ull($1.to_i(10))
116
+ when /\A([0-9]+)LL\z/i
117
+ return eval_as_decimal_integer_constant_with_ll($1.to_i(10))
118
+ when /\A([0-9]+)(?:UL|LU)\z/i
119
+ return eval_as_decimal_integer_constant_with_ul($1.to_i(10))
120
+ when /\A([0-9]+)L\z/i
121
+ return eval_as_decimal_integer_constant_with_l($1.to_i(10))
122
+ when /\A([0-9]+)U\z/i
123
+ return eval_as_decimal_integer_constant_with_u($1.to_i(10))
124
+ when /\A([0-9]+)\z/
125
+ return eval_as_decimal_integer_constant_unsuffixed($1.to_i(10))
126
+ end
127
+
128
+ # NOTE: For hexadecimal constants.
129
+ case value
130
+ when /\A0x([0-9A-F]+)(?:ULL|LLU)\z/i
131
+ return eval_as_non_decimal_integer_constant_with_ull($1.to_i(16))
132
+ when /\A0x([0-9A-F]+)LL\z/i
133
+ return eval_as_non_decimal_integer_constant_with_ll($1.to_i(16))
134
+ when /\A0x([0-9A-F]+)(?:UL|LU)\z/i
135
+ return eval_as_non_decimal_integer_constant_with_ul($1.to_i(16))
136
+ when /\A0x([0-9A-F]+)L\z/i
137
+ return eval_as_non_decimal_integer_constant_with_l($1.to_i(16))
138
+ when /\A0x([0-9A-F]+)U\z/i
139
+ return eval_as_non_decimal_integer_constant_with_u($1.to_i(16))
140
+ when /\A0x([0-9A-F]+)\z/i
141
+ return eval_as_non_decimal_integer_constant_unsuffixed($1.to_i(16))
142
+ end
143
+
144
+ nil
145
+ end
146
+
147
+ def eval_as_floating_constant(value)
148
+ # TODO: Must implement hexadecimal-floating-constant evaluation.
149
+ case value
150
+ when /\A([0-9]*\.[0-9]*E[+-]?[0-9]+)\z/i,
151
+ /\A([0-9]+\.?E[+-]?[0-9]+)\z/i,
152
+ /\A([0-9]*\.[0-9]+|[0-9]+\.)\z/
153
+ return temporary_variable(double_type, ScalarValue.of($1.to_f))
154
+ when /\A([0-9]*\.[0-9]*E[+-]?[0-9]+)F\z/i,
155
+ /\A([0-9]+\.?E[+-]?[0-9]+)F\z/i,
156
+ /\A([0-9]*\.[0-9]+|[0-9]+\.)F\z/i
157
+ return temporary_variable(float_type, ScalarValue.of($1.to_f))
158
+ when /\A([0-9]*\.[0-9]*E[+-]?[0-9]+)L\z/i,
159
+ /\A([0-9]+\.?E[+-]?[0-9]+)L\z/i,
160
+ /\A([0-9]*\.[0-9]+|[0-9]+\.)L\z/i
161
+ return temporary_variable(long_double_type, ScalarValue.of($1.to_f))
162
+ end
163
+ nil
164
+ end
165
+
166
+ def eval_as_character_constant(value)
167
+ if value =~ /\A(L?)'(.*)'\z/i
168
+ case $2.length
169
+ when 0
170
+ char_code = 0
171
+ when 1
172
+ char_code = $2[0].ord
173
+ else
174
+ char_code = $2[0] == "\\" ? EscapeSequence.new($2).value : $2[0].ord
175
+ end
176
+
177
+ if $1 == "L"
178
+ temporary_variable(wchar_type, ScalarValue.of(char_code))
179
+ else
180
+ temporary_variable(int_type, ScalarValue.of(char_code))
181
+ end
182
+ else
183
+ nil
184
+ end
185
+ end
186
+
187
+ def eval_as_decimal_integer_constant_unsuffixed(value)
188
+ case
189
+ when int_value_range.include?(value)
190
+ temporary_variable(int_type, ScalarValue.of(value))
191
+ when long_int_value_range.include?(value)
192
+ temporary_variable(long_int_type, ScalarValue.of(value))
193
+ when long_long_int_value_range.include?(value)
194
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
195
+ else
196
+ # NOTE: The ISO C99 standard saids;
197
+ #
198
+ # 6.4.4.1 Integer constants
199
+ #
200
+ # 6 If an integer constant cannot be represented by any type in its
201
+ # list and has no extended integer type, then the integer constant
202
+ # has no type.
203
+ #
204
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
205
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
206
+ end
207
+ end
208
+
209
+ def eval_as_decimal_integer_constant_with_u(value)
210
+ case
211
+ when unsigned_int_value_range.include?(value)
212
+ temporary_variable(unsigned_int_type, ScalarValue.of(value))
213
+ when unsigned_long_int_value_range.include?(value)
214
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
215
+ when unsigned_long_long_int_value_range.include?(value)
216
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
217
+ else
218
+ # NOTE: The ISO C99 standard saids;
219
+ #
220
+ # 6.4.4.1 Integer constants
221
+ #
222
+ # 6 If an integer constant cannot be represented by any type in its
223
+ # list and has no extended integer type, then the integer constant
224
+ # has no type.
225
+ #
226
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
227
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
228
+ end
229
+ end
230
+
231
+ def eval_as_decimal_integer_constant_with_l(value)
232
+ case
233
+ when long_int_value_range.include?(value)
234
+ temporary_variable(long_int_type, ScalarValue.of(value))
235
+ when long_long_int_value_range.include?(value)
236
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
237
+ else
238
+ # NOTE: The ISO C99 standard saids;
239
+ #
240
+ # 6.4.4.1 Integer constants
241
+ #
242
+ # 6 If an integer constant cannot be represented by any type in its
243
+ # list and has no extended integer type, then the integer constant
244
+ # has no type.
245
+ #
246
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
247
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
248
+ end
249
+ end
250
+
251
+ def eval_as_decimal_integer_constant_with_ul(value)
252
+ case
253
+ when unsigned_long_int_value_range.include?(value)
254
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
255
+ when unsigned_long_long_int_value_range.include?(value)
256
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
257
+ else
258
+ # NOTE: The ISO C99 standard saids;
259
+ #
260
+ # 6.4.4.1 Integer constants
261
+ #
262
+ # 6 If an integer constant cannot be represented by any type in its
263
+ # list and has no extended integer type, then the integer constant
264
+ # has no type.
265
+ #
266
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
267
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
268
+ end
269
+ end
270
+
271
+ def eval_as_decimal_integer_constant_with_ll(value)
272
+ case
273
+ when long_long_int_value_range.include?(value)
274
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
275
+ else
276
+ # NOTE: The ISO C99 standard saids;
277
+ #
278
+ # 6.4.4.1 Integer constants
279
+ #
280
+ # 6 If an integer constant cannot be represented by any type in its
281
+ # list and has no extended integer type, then the integer constant
282
+ # has no type.
283
+ #
284
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
285
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
286
+ end
287
+ end
288
+
289
+ def eval_as_decimal_integer_constant_with_ull(value)
290
+ case
291
+ when unsigned_long_long_int_value_range.include?(value)
292
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
293
+ else
294
+ # NOTE: The ISO C99 standard saids;
295
+ #
296
+ # 6.4.4.1 Integer constants
297
+ #
298
+ # 6 If an integer constant cannot be represented by any type in its
299
+ # list and has no extended integer type, then the integer constant
300
+ # has no type.
301
+ #
302
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
303
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
304
+ end
305
+ end
306
+
307
+ def eval_as_non_decimal_integer_constant_unsuffixed(value)
308
+ case
309
+ when int_value_range.include?(value)
310
+ temporary_variable(int_type, ScalarValue.of(value))
311
+ when unsigned_int_value_range.include?(value)
312
+ temporary_variable(unsigned_int_type, ScalarValue.of(value))
313
+ when long_int_value_range.include?(value)
314
+ temporary_variable(long_int_type, ScalarValue.of(value))
315
+ when unsigned_long_int_value_range.include?(value)
316
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
317
+ when long_long_int_value_range.include?(value)
318
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
319
+ when unsigned_long_long_int_value_range.include?(value)
320
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
321
+ else
322
+ # NOTE: The ISO C99 standard saids;
323
+ #
324
+ # 6.4.4.1 Integer constants
325
+ #
326
+ # 6 If an integer constant cannot be represented by any type in its
327
+ # list and has no extended integer type, then the integer constant
328
+ # has no type.
329
+ #
330
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
331
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
332
+ end
333
+ end
334
+
335
+ def eval_as_non_decimal_integer_constant_with_u(value)
336
+ case
337
+ when unsigned_int_value_range.include?(value)
338
+ temporary_variable(unsigned_int_type, ScalarValue.of(value))
339
+ when unsigned_long_int_value_range.include?(value)
340
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
341
+ when unsigned_long_long_int_value_range.include?(value)
342
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
343
+ else
344
+ # NOTE: The ISO C99 standard saids;
345
+ #
346
+ # 6.4.4.1 Integer constants
347
+ #
348
+ # 6 If an integer constant cannot be represented by any type in its
349
+ # list and has no extended integer type, then the integer constant
350
+ # has no type.
351
+ #
352
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
353
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
354
+ end
355
+ end
356
+
357
+ def eval_as_non_decimal_integer_constant_with_l(value)
358
+ case
359
+ when long_int_value_range.include?(value)
360
+ temporary_variable(long_int_type, ScalarValue.of(value))
361
+ when unsigned_long_int_value_range.include?(value)
362
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
363
+ when long_long_int_value_range.include?(value)
364
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
365
+ when unsigned_long_long_int_value_range.include?(value)
366
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
367
+ else
368
+ # NOTE: The ISO C99 standard saids;
369
+ #
370
+ # 6.4.4.1 Integer constants
371
+ #
372
+ # 6 If an integer constant cannot be represented by any type in its
373
+ # list and has no extended integer type, then the integer constant
374
+ # has no type.
375
+ #
376
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
377
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
378
+ end
379
+ end
380
+
381
+ def eval_as_non_decimal_integer_constant_with_ul(value)
382
+ case
383
+ when unsigned_long_int_value_range.include?(value)
384
+ temporary_variable(unsigned_long_int_type, ScalarValue.of(value))
385
+ when unsigned_long_long_int_value_range.include?(value)
386
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
387
+ else
388
+ # NOTE: The ISO C99 standard saids;
389
+ #
390
+ # 6.4.4.1 Integer constants
391
+ #
392
+ # 6 If an integer constant cannot be represented by any type in its
393
+ # list and has no extended integer type, then the integer constant
394
+ # has no type.
395
+ #
396
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
397
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
398
+ end
399
+ end
400
+
401
+ def eval_as_non_decimal_integer_constant_with_ll(value)
402
+ case
403
+ when long_long_int_value_range.include?(value)
404
+ temporary_variable(long_long_int_type, ScalarValue.of(value))
405
+ when unsigned_long_long_int_value_range.include?(value)
406
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
407
+ else
408
+ # NOTE: The ISO C99 standard saids;
409
+ #
410
+ # 6.4.4.1 Integer constants
411
+ #
412
+ # 6 If an integer constant cannot be represented by any type in its
413
+ # list and has no extended integer type, then the integer constant
414
+ # has no type.
415
+ #
416
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
417
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
418
+ end
419
+ end
420
+
421
+ def eval_as_non_decimal_integer_constant_with_ull(value)
422
+ case
423
+ when unsigned_long_long_int_value_range.include?(value)
424
+ temporary_variable(unsigned_long_long_int_type, ScalarValue.of(value))
425
+ else
426
+ # NOTE: The ISO C99 standard saids;
427
+ #
428
+ # 6.4.4.1 Integer constants
429
+ #
430
+ # 6 If an integer constant cannot be represented by any type in its
431
+ # list and has no extended integer type, then the integer constant
432
+ # has no type.
433
+ #
434
+ # NOTE: Use ExtendedBigIntType for unrepresentable integer constants.
435
+ temporary_variable(extended_big_int_type, ScalarValue.of(value))
436
+ end
437
+ end
438
+
439
+ def int_value_range
440
+ int_type.min_value..int_type.max_value
441
+ end
442
+
443
+ def long_int_value_range
444
+ long_int_type.min_value..long_int_type.max_value
445
+ end
446
+
447
+ def long_long_int_value_range
448
+ long_long_int_type.min_value..long_long_int_type.max_value
449
+ end
450
+
451
+ def unsigned_int_value_range
452
+ unsigned_int_type.min_value..unsigned_int_type.max_value
453
+ end
454
+
455
+ def unsigned_long_int_value_range
456
+ unsigned_long_int_type.min_value..unsigned_long_int_type.max_value
457
+ end
458
+
459
+ def unsigned_long_long_int_value_range
460
+ unsigned_long_long_type.min_value..unsigned_long_long_type.max_value
461
+ end
462
+ end
463
+
464
+ end
465
+ end
@@ -0,0 +1,212 @@
1
+ # C conversion semantics.
2
+ #
3
+ # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
+ # Copyright:: Copyright (C) 2010-2012, 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-2012, 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
+ module AdLint #:nodoc:
33
+ module C #:nodoc:
34
+
35
+ # Host class of this module must include InterpreterMediator.
36
+ module Conversion
37
+ def do_conversion(original, to_type)
38
+ if original.type.coercible?(to_type)
39
+ # NOTE: Value will be coerced into the destination type in
40
+ # VariableTableMediator#temporary_variable.
41
+ temporary_variable(to_type, wrap_around_value(original, to_type))
42
+ else
43
+ nil
44
+ end
45
+ end
46
+
47
+ def do_integer_promotion(original)
48
+ return original unless original.type.integer?
49
+
50
+ promoted_type = original.type.integer_promoted_type
51
+ if original.type.same_as?(promoted_type)
52
+ original
53
+ else
54
+ do_conversion(original, promoted_type) || original
55
+ end
56
+ end
57
+
58
+ def do_usual_arithmetic_conversion(lhs_original, rhs_original)
59
+ if lhs_original.type.pointer? && rhs_original.type.pointer?
60
+ return lhs_original, rhs_original
61
+ end
62
+
63
+ arith_type = lhs_original.type.arithmetic_type_with(rhs_original.type)
64
+
65
+ if lhs_original.type.same_as?(arith_type)
66
+ lhs_converted = lhs_original
67
+ else
68
+ lhs_converted = do_conversion(lhs_original, arith_type) || lhs_original
69
+ end
70
+
71
+ if rhs_original.type.same_as?(arith_type)
72
+ rhs_converted = rhs_original
73
+ else
74
+ rhs_converted = do_conversion(rhs_original, arith_type) || rhs_original
75
+ end
76
+
77
+ return lhs_converted, rhs_converted
78
+ end
79
+
80
+ def do_default_argument_promotion(original)
81
+ promoted_type = original.type.argument_promoted_type
82
+ if original.type.same_as?(promoted_type)
83
+ original
84
+ else
85
+ do_conversion(original, promoted_type) || original
86
+ end
87
+ end
88
+
89
+ private
90
+ def wrap_around_value(original, to_type)
91
+ return original.value unless original.type.scalar? && to_type.scalar?
92
+
93
+ case
94
+ when original.type.signed? && to_type.unsigned?
95
+ min = ScalarValue.of(to_type.min_value)
96
+ if (original.value < min).may_be_true?
97
+ return min - original.value + ScalarValue.of(1)
98
+ end
99
+ when original.type.unsigned? && to_type.signed?
100
+ max = ScalarValue.of(to_type.max_value)
101
+ if (original.value > max).may_be_true?
102
+ return max - original.value + ScalarValue.of(1)
103
+ end
104
+ end
105
+
106
+ original.value
107
+ end
108
+ end
109
+
110
+ # Host class of this module must include StandardTypeCatalogAccessor.
111
+ module UsualArithmeticTypeConversion
112
+ def do_usual_arithmetic_type_conversion(lhs_type, rhs_type)
113
+ # NOTE: The ISO C99 standard saids;
114
+ #
115
+ # 6.3.1.8 Usual arithmetic conversions
116
+ #
117
+ # 1 Many operators that except operands of arithmetic type cause
118
+ # conversions and yield result types in a similar way. The purpose is
119
+ # to determine a common real type for the operands and result. For the
120
+ # specified operands, each operand is converted, without change of type
121
+ # domain, to a type whose corresponding real type is the common real
122
+ # type. Unless explicitly stated otherwise, the common real type is
123
+ # also the corresponding real type of the result, whose type domain is
124
+ # the type domain of the operands if they are the same, and complex
125
+ # otherwise. This pattern is called the usual arithmetic conversions:
126
+ #
127
+ # First, if the corresponding real type of either operand is long
128
+ # double, the other operand is converted, without change of type
129
+ # domain, to a type whose corresponding real type is long double.
130
+ #
131
+ # Otherwise, if the corresponding real type of either operand is
132
+ # double, the other operand is converted, without change of type
133
+ # domain, to a type whose corresponding real type is double.
134
+ #
135
+ # Otherwise, if the corresponding real type of either operand is
136
+ # float, the other operand is converted, without change of type
137
+ # domain, to a type whose corresponding real type is float.
138
+ #
139
+ # Otherwise, the integer promotions are performed on both operands.
140
+ # Then the following rules are applied to the promoted operands:
141
+ #
142
+ # If both operands have the same type, then no further conversion
143
+ # is needed.
144
+ #
145
+ # Otherwise, if both operands have signed integer types or both
146
+ # have unsigned integer types, the operand with the type of lesser
147
+ # integer conversion rank is converted to the type of the operand
148
+ # with greater rank.
149
+ #
150
+ # Otherwise, if the operand that has unsigned integer type has rank
151
+ # greater or equal to the rank of the type of the other operand,
152
+ # then the operand with signed integer type is converted to the
153
+ # type of the operand with unsigned integer type.
154
+ #
155
+ # Otherwise, if the type of the operand with signed integer type
156
+ # can represent all of the values of the type of the operand with
157
+ # unsigned integer type, then the operand with unsigned integer
158
+ # type is converted to the type of the operand with signed integer
159
+ # type.
160
+ #
161
+ # Otherwise, both operands are converted to the unsigned integer
162
+ # type corresponding to the type of the operand with signed integer
163
+ # type.
164
+
165
+ if lhs_type.same_as?(long_double_type) ||
166
+ rhs_type.same_as?(long_double_type)
167
+ return long_double_type
168
+ end
169
+
170
+ if lhs_type.same_as?(double_type) || rhs_type.same_as?(double_type)
171
+ return double_type
172
+ end
173
+
174
+ if lhs_type.same_as?(float_type) || rhs_type.same_as?(float_type)
175
+ return float_type
176
+ end
177
+
178
+ lhs_promoted_type = lhs_type.integer_promoted_type
179
+ rhs_promoted_type = rhs_type.integer_promoted_type
180
+
181
+ return lhs_promoted_type if lhs_promoted_type.same_as?(rhs_promoted_type)
182
+
183
+ lhs_rank = lhs_promoted_type.integer_conversion_rank
184
+ rhs_rank = rhs_promoted_type.integer_conversion_rank
185
+
186
+ case
187
+ when lhs_promoted_type.signed? && rhs_promoted_type.signed?
188
+ return lhs_rank < rhs_rank ? rhs_promoted_type : lhs_promoted_type
189
+ when lhs_promoted_type.unsigned? && rhs_promoted_type.unsigned?
190
+ return lhs_rank < rhs_rank ? rhs_promoted_type : lhs_promoted_type
191
+ when lhs_promoted_type.unsigned? && lhs_rank >= rhs_rank
192
+ return lhs_promoted_type
193
+ when rhs_promoted_type.unsigned? && lhs_rank <= rhs_rank
194
+ return rhs_promoted_type
195
+ when lhs_promoted_type.signed? &&
196
+ rhs_promoted_type.compatible?(lhs_promoted_type)
197
+ return lhs_promoted_type
198
+ when rhs_promoted_type.signed? &&
199
+ lhs_promoted_type.compatible?(rhs_promoted_type)
200
+ return rhs_promoted_type
201
+ when lhs_promoted_type.signed?
202
+ return lhs_promoted_type.corresponding_unsigned_type
203
+ when rhs_promoted_type.signed?
204
+ return rhs_promoted_type.corresponding_unsigned_type
205
+ end
206
+
207
+ raise TypeError, "cannot do usual arithmetic conversion."
208
+ end
209
+ end
210
+
211
+ end
212
+ end