adlint 1.8.10 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/ChangeLog +261 -3
  2. data/MANIFEST +25 -1
  3. data/NEWS +25 -5
  4. data/Rakefile +11 -0
  5. data/TODO +0 -1
  6. data/etc/mesg.d/en_US/messages.yml +1 -1
  7. data/etc/mesg.d/ja_JP/messages.yml +1 -1
  8. data/features/message_detection/W0001.feature +41 -0
  9. data/features/message_detection/W0002.feature +68 -0
  10. data/features/message_detection/W0003.feature +134 -0
  11. data/features/message_detection/W0007.feature +264 -0
  12. data/features/message_detection/W0010.feature +75 -0
  13. data/features/message_detection/W0013.feature +189 -0
  14. data/features/message_detection/W0109.feature +50 -0
  15. data/features/message_detection/W0583.feature +30 -0
  16. data/features/message_detection/W0606.feature +20 -0
  17. data/features/message_detection/W0698.feature +20 -0
  18. data/features/message_detection/W0699.feature +21 -0
  19. data/features/message_detection/W0703.feature +73 -0
  20. data/features/message_detection/W0716.feature +67 -0
  21. data/features/message_detection/W0717.feature +64 -0
  22. data/features/message_detection/W0718.feature +64 -0
  23. data/features/message_detection/W0723.feature +18 -0
  24. data/features/message_detection/W1031.feature +328 -0
  25. data/features/step_definitions/message_detection_steps.rb +45 -0
  26. data/features/support/env.rb +58 -0
  27. data/lib/adlint/c/branch.rb +16 -23
  28. data/lib/adlint/c/code.rb +1 -12
  29. data/lib/adlint/c/conv.rb +4 -4
  30. data/lib/adlint/c/ctrlexpr.rb +10 -6
  31. data/lib/adlint/c/domain.rb +2 -2
  32. data/lib/adlint/c/expr.rb +11 -33
  33. data/lib/adlint/c/format.rb +6 -6
  34. data/lib/adlint/c/interp.rb +137 -80
  35. data/lib/adlint/c/mediator.rb +5 -2
  36. data/lib/adlint/c/message.rb +123 -140
  37. data/lib/adlint/c/message_shima.rb +44 -0
  38. data/lib/adlint/c/object.rb +93 -26
  39. data/lib/adlint/c/option.rb +53 -0
  40. data/lib/adlint/c/phase.rb +4 -1
  41. data/lib/adlint/c/type.rb +112 -46
  42. data/lib/adlint/c.rb +1 -0
  43. data/lib/adlint/version.rb +3 -3
  44. data/share/doc/developers_guide_ja.html +3 -3
  45. data/share/doc/developers_guide_ja.texi +1 -1
  46. data/share/doc/users_guide_en.html +35 -28
  47. data/share/doc/users_guide_en.texi +30 -22
  48. data/share/doc/users_guide_ja.html +35 -31
  49. data/share/doc/users_guide_ja.texi +30 -24
  50. data/spec/adlint/c/type_spec.rb +110 -0
  51. data/spec/conf.d/default_traits.yml +216 -0
  52. data/spec/conf.d/empty_cinit.h +11 -0
  53. data/spec/conf.d/empty_pinit.h +11 -0
  54. data/spec/spec_helper.rb +49 -0
  55. metadata +27 -3
  56. data/spec/MUST_WRITE_SPECS_WITH_RSPEC +0 -0
@@ -100,20 +100,23 @@ module C #:nodoc:
100
100
  end
101
101
 
102
102
  def declared_as_extern?
103
- storage_class_specifiers.empty? ||
104
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :EXTERN }
103
+ first_sc_spec = first_storage_class_specifier
104
+ first_sc_spec.nil? || first_sc_spec.type == :EXTERN
105
105
  end
106
106
 
107
107
  def declared_as_static?
108
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :STATIC }
108
+ first_sc_spec = first_storage_class_specifier and
109
+ first_sc_spec.type == :STATIC
109
110
  end
110
111
 
111
112
  def declared_as_auto?
112
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :AUTO }
113
+ first_sc_spec = first_storage_class_specifier and
114
+ first_sc_spec.type == :AUTO
113
115
  end
114
116
 
115
117
  def declared_as_register?
116
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :REGISTER }
118
+ first_sc_spec = first_storage_class_specifier and
119
+ first_sc_spec.type == :REGISTER
117
120
  end
118
121
 
119
122
  def designated_by_lvalue?
@@ -135,6 +138,15 @@ module C #:nodoc:
135
138
  def variable?
136
139
  subclass_responsibility
137
140
  end
141
+
142
+ private
143
+ def first_storage_class_specifier
144
+ if @declarations_and_definitions.empty?
145
+ nil
146
+ else
147
+ @declarations_and_definitions.first.storage_class_specifier
148
+ end
149
+ end
138
150
  end
139
151
 
140
152
  class TypedObject < Object
@@ -263,7 +275,8 @@ module C #:nodoc:
263
275
  if @scope.global?
264
276
  super
265
277
  else
266
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :EXTERN }
278
+ first_sc_spec = first_storage_class_specifier and
279
+ first_sc_spec.type == :EXTERN
267
280
  end
268
281
  end
269
282
 
@@ -271,8 +284,8 @@ module C #:nodoc:
271
284
  if @scope.global?
272
285
  super
273
286
  else
274
- storage_class_specifiers.empty? ||
275
- storage_class_specifiers.any? { |sc_spec| sc_spec.type == :AUTO }
287
+ first_sc_spec = first_storage_class_specifier
288
+ first_sc_spec.nil? || first_sc_spec.type == :AUTO
276
289
  end
277
290
  end
278
291
  end
@@ -595,8 +608,8 @@ module C #:nodoc:
595
608
  end
596
609
 
597
610
  def define(definition, init_value = nil)
598
- if storage_class_of(definition) == :static
599
- # NOTE: Value of the global variable should be arbitrary because
611
+ if storage_duration_of(definition) == :static
612
+ # NOTE: Value of the static duration object should be arbitrary because
600
613
  # execution of its accessors are out of order.
601
614
  # So, a value of the initializer should be ignored.
602
615
  init_value = definition.type.arbitrary_value
@@ -614,8 +627,8 @@ module C #:nodoc:
614
627
 
615
628
  # NOTE: Domain of the init-value will be restricted by type's min-max in
616
629
  # define_variable.
617
- define_variable(definition, definition.type, allocate_memory(definition),
618
- init_value)
630
+ define_variable(definition, definition.type,
631
+ allocate_memory(definition), init_value)
619
632
  end
620
633
 
621
634
  def define_temporary(type, init_value)
@@ -667,6 +680,63 @@ module C #:nodoc:
667
680
  end
668
681
  end
669
682
 
683
+ def storage_duration_of(declaration_or_definition)
684
+ # NOTE: The ISO C99 standard saids;
685
+ #
686
+ # 6.2.2 Linkages of identifiers
687
+ #
688
+ # 1 An identifier declared in different scopes or in the same scope more
689
+ # than once can be made to refer to the same object or function by a
690
+ # process called linkage. There are three kinds of linkage: external,
691
+ # internal, and none.
692
+ #
693
+ # 3 If the declaration of a file scope identifier for an object or a
694
+ # function contains the storage-class specifier static, the identifier
695
+ # has internal linkage.
696
+ #
697
+ # 4 For an identifier declared with the storage-class specifier extern in
698
+ # a scope in which a prior declaration of that identifier is visible,
699
+ # if the prior declaration specifies internal or external linkage, the
700
+ # linkage of the identifier at the later declaration is the same as the
701
+ # linkage specified at the prior declaration. If no prior declaration
702
+ # is visible, or if the prior declaration specifies no linkage, then
703
+ # the identifier has external linkage.
704
+ #
705
+ # 5 If the declaration of an identifier for a function has no
706
+ # storage-class specifier, its linkage is determined exactly as if it
707
+ # were declared with the storage-class specifier extern. If the
708
+ # declaration of an identifier for an object has file scope and no
709
+ # storage-class specifier, its linkage is external.
710
+ #
711
+ # 6 The following identifiers have no linkage: an identifier declared to
712
+ # be anything other than an object or a function; an identifier
713
+ # declared to be a function parameter; a block scope identifier for an
714
+ # object declared without the storage-class specifier extern.
715
+ #
716
+ # 6.2.4 Storage durations of objects
717
+ #
718
+ # 1 An object has a storage duration that determines its lifetime. There
719
+ # are three storage durations: static, automatic, and allocated.
720
+ # Allocated storage is described in 7.20.3.
721
+ #
722
+ # 3 An object whose identifier is declared with external or internal
723
+ # linkage, or with the storage-class specifier static has static
724
+ # storage duration. Its lifetime is the entire execution of the program
725
+ # and its stored value is initialized only once, prior to program
726
+ # startup.
727
+ #
728
+ # 4 An object whose identifier is declared with no linkage and without
729
+ # the storage-class specifier static has automatic storage duration.
730
+
731
+ sc_specifier = declaration_or_definition.storage_class_specifier
732
+ if sc_specifier &&
733
+ (sc_specifier.type == :EXTERN || sc_specifier.type == :STATIC)
734
+ :static
735
+ else
736
+ current_scope.global? ? :static : :automatic
737
+ end
738
+ end
739
+
670
740
  private
671
741
  def define_variable(declaration_or_definition, type, memory, init_value)
672
742
  variable = create_variable(declaration_or_definition, type, memory)
@@ -683,25 +753,13 @@ module C #:nodoc:
683
753
 
684
754
  def allocate_memory(declaration_or_definition)
685
755
  byte_size = declaration_or_definition.type.aligned_byte_size
686
- if storage_class_of(declaration_or_definition) == :static
756
+ if storage_duration_of(declaration_or_definition) == :static
687
757
  @memory_pool.allocate_static(byte_size)
688
758
  else
689
759
  @memory_pool.allocate_dynamic(byte_size)
690
760
  end
691
761
  end
692
762
 
693
- def storage_class_of(declaration_or_definition)
694
- storage_class_specifier =
695
- declaration_or_definition.storage_class_specifier
696
- if storage_class_specifier &&
697
- (storage_class_specifier.type == :EXTERN ||
698
- storage_class_specifier.type == :STATIC)
699
- :static
700
- else
701
- current_scope.global? ? :static : :dynamic
702
- end
703
- end
704
-
705
763
  def create_variable(declaration_or_definition, type, memory)
706
764
  if declaration_or_definition
707
765
  NamedVariable.new(memory, declaration_or_definition, current_scope)
@@ -797,7 +855,7 @@ module C #:nodoc:
797
855
  when arg.type.function? && param_type.pointer?
798
856
  arg_value = interpreter.pointer_value_of(arg)
799
857
  converted = interpreter.temporary_variable(param_type, arg_value)
800
- when arg.variable? && !param_type.same_as?(arg.type)
858
+ when arg.variable? && !arg.type.same_as?(param_type)
801
859
  converted =
802
860
  interpreter.do_conversion(arg, param_type) ||
803
861
  interpreter.temporary_variable(param_type)
@@ -960,6 +1018,15 @@ module C #:nodoc:
960
1018
  @scope_stack.pop
961
1019
  end
962
1020
 
1021
+ def declare(declaration)
1022
+ if function = lookup(declaration.identifier.value)
1023
+ function.declarations_and_definitions.push(declaration)
1024
+ return function
1025
+ end
1026
+
1027
+ define(ExplicitFunction.new(declaration))
1028
+ end
1029
+
963
1030
  def define(function)
964
1031
  # NOTE: A function has a starting address in the TEXT segment.
965
1032
  # This is ad-hoc implementation, but it's enough for analysis.
@@ -0,0 +1,53 @@
1
+ # Miscellaneous option constants.
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 InterpreterOptions
36
+ QUIET = :quiet
37
+ end
38
+
39
+ module BranchOptions
40
+ NARROWING = :narrowing
41
+ WIDENING = :widening
42
+ FIRST = :first
43
+ FINAL = :final
44
+ SMOTHER_BREAK = :smother_break
45
+ IMPLICIT_CONDITION = :implicit_condition
46
+ end
47
+
48
+ module BranchGroupOptions
49
+ COMPLETE = :complete
50
+ end
51
+
52
+ end
53
+ end
@@ -641,6 +641,9 @@ module C #:nodoc:
641
641
  W0713.new(context),
642
642
  W0714.new(context),
643
643
  W0715.new(context),
644
+ W0716.new(context),
645
+ W0717.new(context),
646
+ W0718.new(context),
644
647
  W0720.new(context),
645
648
  W0721.new(context),
646
649
  W0722.new(context),
@@ -747,7 +750,7 @@ module C #:nodoc:
747
750
  private
748
751
  def do_execute(context)
749
752
  monitored_region("int") do
750
- context[:c_interpreter].execute(context[:c_syntax_tree])
753
+ Program.new(context[:c_interpreter], context[:c_syntax_tree]).execute
751
754
  ValueDomain.clear_memo
752
755
  end
753
756
  ensure
data/lib/adlint/c/type.rb CHANGED
@@ -35,6 +35,7 @@ require "adlint/c/syntax"
35
35
  require "adlint/c/scope"
36
36
  require "adlint/c/object"
37
37
  require "adlint/c/conv"
38
+ require "adlint/c/option"
38
39
 
39
40
  module AdLint #:nodoc:
40
41
  module C #:nodoc:
@@ -200,14 +201,22 @@ module C #:nodoc:
200
201
  subclass_responsibility
201
202
  end
202
203
 
203
- def compatible?(type)
204
+ def compatible?(to_type)
204
205
  subclass_responsibility
205
206
  end
206
207
 
207
- def coercible?(type)
208
+ def coercible?(to_type)
208
209
  subclass_responsibility
209
210
  end
210
211
 
212
+ def convertible?(to_type)
213
+ self.same_as?(to_type)
214
+ end
215
+
216
+ def more_cv_qualified?(than_type)
217
+ false
218
+ end
219
+
211
220
  def same_as?(type)
212
221
  self.real_type.unqualify == type.real_type.unqualify
213
222
  end
@@ -667,11 +676,15 @@ module C #:nodoc:
667
676
  true
668
677
  end
669
678
 
670
- def compatible?(type)
679
+ def compatible?(to_type)
671
680
  false
672
681
  end
673
682
 
674
- def coercible?(type)
683
+ def coercible?(to_type)
684
+ false
685
+ end
686
+
687
+ def convertible?(to_type)
675
688
  false
676
689
  end
677
690
 
@@ -1187,11 +1200,15 @@ module C #:nodoc:
1187
1200
  true
1188
1201
  end
1189
1202
 
1190
- def compatible?(type)
1203
+ def compatible?(to_type)
1191
1204
  false
1192
1205
  end
1193
1206
 
1194
- def coercible?(type)
1207
+ def coercible?(to_type)
1208
+ false
1209
+ end
1210
+
1211
+ def convertible?(to_type)
1195
1212
  false
1196
1213
  end
1197
1214
 
@@ -1709,12 +1726,34 @@ module C #:nodoc:
1709
1726
  @base_type.incomplete?
1710
1727
  end
1711
1728
 
1712
- def compatible?(type)
1713
- @base_type.compatible?(type)
1729
+ def compatible?(to_type)
1730
+ @base_type.compatible?(to_type)
1714
1731
  end
1715
1732
 
1716
- def coercible?(type)
1717
- @base_type.coercible?(type)
1733
+ def coercible?(to_type)
1734
+ @base_type.coercible?(to_type)
1735
+ end
1736
+
1737
+ def more_cv_qualified?(than_type)
1738
+ # NOTE: The term `more cv-qualified' means:
1739
+ # const > none
1740
+ # volatile > none
1741
+ # const volatile > none
1742
+ # const volatile > const
1743
+ # const volatile > volatile
1744
+ if than_type.qualified?
1745
+ if than_type.const? && than_type.volatile?
1746
+ false
1747
+ else
1748
+ if self.const? && self.volatile?
1749
+ true
1750
+ else
1751
+ false
1752
+ end
1753
+ end
1754
+ else
1755
+ true
1756
+ end
1718
1757
  end
1719
1758
 
1720
1759
  def scalar?
@@ -2014,16 +2053,20 @@ module C #:nodoc:
2014
2053
  true
2015
2054
  end
2016
2055
 
2017
- def compatible?(type)
2056
+ def compatible?(to_type)
2018
2057
  false
2019
2058
  end
2020
2059
 
2021
- def coercible?(type)
2060
+ def coercible?(to_type)
2022
2061
  false
2023
2062
  end
2024
2063
 
2064
+ def convertible?(to_type)
2065
+ to_type.void?
2066
+ end
2067
+
2025
2068
  def same_as?(type)
2026
- type.void?
2069
+ false
2027
2070
  end
2028
2071
 
2029
2072
  def scalar?
@@ -2538,19 +2581,19 @@ module C #:nodoc:
2538
2581
  @parameter_types.any? { |type| type.incomplete? }
2539
2582
  end
2540
2583
 
2541
- def compatible?(type)
2542
- return false unless type.function?
2584
+ def compatible?(to_type)
2585
+ return false unless to_type.function?
2543
2586
 
2544
2587
  lhs_params = @parameter_types
2545
- rhs_params = type.parameter_types
2588
+ rhs_params = to_type.parameter_types
2546
2589
 
2547
- @return_type.compatible?(type.return_type) &&
2590
+ @return_type.compatible?(to_type.return_type) &&
2548
2591
  lhs_params.size == rhs_params.size &&
2549
2592
  lhs_params.zip(rhs_params).all? { |lhs, rhs| lhs.compatible?(rhs) } &&
2550
- @have_va_list == type.have_va_list?
2593
+ @have_va_list == to_type.have_va_list?
2551
2594
  end
2552
2595
 
2553
- def coercible?(type)
2596
+ def coercible?(to_type)
2554
2597
  false
2555
2598
  end
2556
2599
 
@@ -3087,12 +3130,12 @@ module C #:nodoc:
3087
3130
  self
3088
3131
  end
3089
3132
 
3090
- def compatible?(type)
3133
+ def compatible?(to_type)
3091
3134
  subclass_responsibility
3092
3135
  end
3093
3136
 
3094
- def coercible?(type)
3095
- type.scalar?
3137
+ def coercible?(to_type)
3138
+ to_type.scalar?
3096
3139
  end
3097
3140
 
3098
3141
  def scalar?
@@ -3483,9 +3526,10 @@ module C #:nodoc:
3483
3526
  nil
3484
3527
  end
3485
3528
 
3486
- def compatible?(type)
3487
- type.integer? &&
3488
- type.min_value <= self.min_value && self.max_value <= type.max_value
3529
+ def compatible?(to_type)
3530
+ to_type.integer? &&
3531
+ to_type.min_value <= self.min_value &&
3532
+ self.max_value <= to_type.max_value
3489
3533
  end
3490
3534
 
3491
3535
  def integer?
@@ -4877,9 +4921,10 @@ module C #:nodoc:
4877
4921
  false
4878
4922
  end
4879
4923
 
4880
- def compatible?(type)
4924
+ def compatible?(to_type)
4881
4925
  type.floating? &&
4882
- type.min_value <= self.min_value && self.max_value <= type.max_value
4926
+ to_type.min_value <= self.min_value &&
4927
+ self.max_value <= to_type.max_value
4883
4928
  end
4884
4929
 
4885
4930
  def integer?
@@ -5338,15 +5383,18 @@ module C #:nodoc:
5338
5383
  false
5339
5384
  end
5340
5385
 
5341
- def same_as?(type)
5386
+ def convertible?(to_type)
5342
5387
  lhs_unqualified = self.real_type.unqualify
5343
- rhs_unqualified = type.real_type.unqualify
5388
+ rhs_unqualified = to_type.real_type.unqualify
5389
+
5390
+ if rhs_unqualified.pointer? || rhs_unqualified.array?
5391
+ lhs_base = lhs_unqualified.base_type
5392
+ rhs_base = rhs_unqualified.base_type
5344
5393
 
5345
- if rhs_unqualified.pointer?
5346
- if lhs_unqualified.base_type.void?
5347
- true
5394
+ unless lhs_base.more_cv_qualified?(rhs_base)
5395
+ lhs_base.void? || lhs_base.convertible?(rhs_base)
5348
5396
  else
5349
- lhs_unqualified.base_type.same_as?(rhs_unqualified.base_type)
5397
+ false
5350
5398
  end
5351
5399
  else
5352
5400
  false
@@ -5536,13 +5584,31 @@ module C #:nodoc:
5536
5584
  @base_type.incomplete? || @length.nil?
5537
5585
  end
5538
5586
 
5539
- def compatible?(type)
5540
- type.array? &&
5541
- @length == type.length && @base_type.compatible?(type.base_type)
5587
+ def compatible?(to_type)
5588
+ to_type.array? &&
5589
+ @length == to_type.length && @base_type.compatible?(to_type.base_type)
5590
+ end
5591
+
5592
+ def coercible?(to_type)
5593
+ to_type.array? && @base_type.coercible?(to_type.base_type)
5542
5594
  end
5543
5595
 
5544
- def coercible?(type)
5545
- type.array? && @base_type.coercible?(type.base_type)
5596
+ def convertible?(to_type)
5597
+ lhs_unqualified = self.real_type.unqualify
5598
+ rhs_unqualified = to_type.real_type.unqualify
5599
+
5600
+ if rhs_unqualified.pointer? || rhs_unqualified.array?
5601
+ lhs_base = lhs_unqualified.base_type
5602
+ rhs_base = rhs_unqualified.base_type
5603
+
5604
+ unless lhs_base.more_cv_qualified?(rhs_base)
5605
+ lhs_base.convertible?(rhs_base)
5606
+ else
5607
+ false
5608
+ end
5609
+ else
5610
+ false
5611
+ end
5546
5612
  end
5547
5613
 
5548
5614
  def same_as?(type)
@@ -6118,15 +6184,15 @@ module C #:nodoc:
6118
6184
  declarations.all? { |decl| decl.struct_declarations.nil? }
6119
6185
  end
6120
6186
 
6121
- def compatible?(type)
6122
- type.composite? &&
6123
- @members.size == type.members.size &&
6124
- @members.zip(type.members).all? { |lhs, rhs| lhs.compatible?(rhs) }
6187
+ def compatible?(to_type)
6188
+ to_type.composite? &&
6189
+ @members.size == to_type.members.size &&
6190
+ @members.zip(to_type.members).all? { |lhs, rhs| lhs.compatible?(rhs) }
6125
6191
  end
6126
6192
 
6127
- def coercible?(type)
6128
- type.composite? &&
6129
- @members.zip(type.members).all? { |lhs_member, rhs_member|
6193
+ def coercible?(to_type)
6194
+ to_type.composite? &&
6195
+ @members.zip(to_type.members).all? { |lhs_member, rhs_member|
6130
6196
  rhs_member && lhs_member.type.coercible?(rhs_member.type)
6131
6197
  }
6132
6198
  end
@@ -7228,7 +7294,7 @@ module C #:nodoc:
7228
7294
  else
7229
7295
  if interpreter
7230
7296
  object = interpreter.execute(first_type_specifier.expression,
7231
- :suppress_notification)
7297
+ InterpreterOptions::QUIET)
7232
7298
  return object.type
7233
7299
  else
7234
7300
  return nil
data/lib/adlint/c.rb CHANGED
@@ -47,6 +47,7 @@ require "adlint/c/message"
47
47
  require "adlint/c/message_shima"
48
48
  require "adlint/c/metric"
49
49
  require "adlint/c/object"
50
+ require "adlint/c/option"
50
51
  require "adlint/c/parser"
51
52
  require "adlint/c/phase"
52
53
  require "adlint/c/resolver"
@@ -32,9 +32,9 @@
32
32
  module AdLint #:nodoc:
33
33
 
34
34
  MAJOR_VERSION = 1
35
- MINOR_VERSION = 8
36
- PATCH_VERSION = 10
37
- RELEASE_DATE = "2012-05-18"
35
+ MINOR_VERSION = 10
36
+ PATCH_VERSION = 0
37
+ RELEASE_DATE = "2012-06-06"
38
38
 
39
39
  TRAITS_SCHEMA_VERSION = "1.0.0"
40
40
 
@@ -1,8 +1,8 @@
1
1
  <html lang="ja">
2
2
  <head>
3
- <title>AdLint 1.8.10 開発者ガイド</title>
3
+ <title>AdLint 1.10.0 開発者ガイド</title>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
- <meta name="description" content="AdLint 1.8.10 開発者ガイド">
5
+ <meta name="description" content="AdLint 1.10.0 開発者ガイド">
6
6
  <meta name="generator" content="makeinfo 4.13">
7
7
  <link title="Top" rel="top" href="#Top">
8
8
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
44
44
  --></style>
45
45
  </head>
46
46
  <body>
47
- <h1 class="settitle">AdLint 1.8.10 開発者ガイド</h1>
47
+ <h1 class="settitle">AdLint 1.10.0 開発者ガイド</h1>
48
48
  <div class="contents">
49
49
  <h2>Table of Contents</h2>
50
50
  <ul>
@@ -2,7 +2,7 @@
2
2
  @setfilename developers_guide_ja.info
3
3
  @documentlanguage ja
4
4
  @documentencoding utf-8
5
- @settitle AdLint 1.8.10 開発者ガイド
5
+ @settitle AdLint 1.10.0 開発者ガイド
6
6
 
7
7
  @copying
8
8
  Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.