adlint 1.6.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +389 -37
- data/INSTALL +3 -0
- data/MANIFEST +7 -0
- data/NEWS +50 -10
- data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
- data/etc/mesg.d/en_US/messages.yml +7 -7
- data/etc/mesg.d/ja_JP/messages.yml +4 -4
- data/lib/adlint/c/branch.rb +4 -4
- data/lib/adlint/c/code.rb +11 -13
- data/lib/adlint/c/enum.rb +0 -2
- data/lib/adlint/c/environ.rb +13 -7
- data/lib/adlint/c/expr.rb +5 -1
- data/lib/adlint/c/interp.rb +10 -6
- data/lib/adlint/c/mediator.rb +1 -0
- data/lib/adlint/c/message.rb +294 -111
- data/lib/adlint/c/message_shima.rb +63 -0
- data/lib/adlint/c/metric.rb +25 -13
- data/lib/adlint/c/object.rb +168 -31
- data/lib/adlint/c/parser.rb +3 -3
- data/lib/adlint/c/phase.rb +20 -3
- data/lib/adlint/c/syntax.rb +175 -17
- data/lib/adlint/c/value.rb +199 -126
- data/lib/adlint/cpp/asm.rb +4 -4
- data/lib/adlint/cpp/constexpr.rb +1 -1
- data/lib/adlint/cpp/eval.rb +6 -4
- data/lib/adlint/cpp/message.rb +100 -7
- data/lib/adlint/cpp/phase.rb +12 -1
- data/lib/adlint/cpp/source.rb +2 -2
- data/lib/adlint/cpp/subst.rb +2 -4
- data/lib/adlint/lang.rb +5 -3
- data/lib/adlint/ld/metric.rb +1 -1
- data/lib/adlint/version.rb +2 -2
- data/share/demo/Makefile +5 -0
- data/share/demo/bad_include/bad_include.c +13 -0
- data/share/demo/bad_include/test'1'.h +0 -0
- data/share/demo/bad_include/test'2'.h +0 -0
- data/share/demo/incomplete_ifelse/incomplete_ifelse.c +29 -0
- data/share/demo/inline_asm/inline_asm.c +25 -0
- data/share/demo/invalid_call/invalid_call.c +12 -4
- data/share/demo/logical_expr/logical_expr.c +73 -0
- data/share/demo/register_vars/register_vars.c +12 -0
- data/share/demo/typedef_each_src/typedef_each_src.c +9 -0
- data/share/demo/wrap_around/wrap_around.c +17 -0
- data/share/doc/developers_guide_ja.html +3 -3
- data/share/doc/developers_guide_ja.texi +1 -1
- data/share/doc/users_guide_en.html +137 -102
- data/share/doc/users_guide_en.texi +121 -86
- data/share/doc/users_guide_ja.html +118 -91
- data/share/doc/users_guide_ja.texi +103 -76
- metadata +10 -3
@@ -187,6 +187,69 @@ module C #:nodoc:
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
+
class W0711 < PassiveMessageDetection
|
191
|
+
def initialize(context)
|
192
|
+
super
|
193
|
+
visitor = context[:c_visitor]
|
194
|
+
visitor.enter_relational_expression += method(:check)
|
195
|
+
end
|
196
|
+
|
197
|
+
private
|
198
|
+
def check(expression)
|
199
|
+
if !expression.lhs_operand.logical? && expression.rhs_operand.logical?
|
200
|
+
W(:W0711, expression.rhs_operand.location)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
class W0712 < W0711
|
206
|
+
private
|
207
|
+
def check(expression)
|
208
|
+
if expression.lhs_operand.logical? && !expression.rhs_operand.logical?
|
209
|
+
W(:W0712, expression.lhs_operand.location)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
class W0713 < W0711
|
215
|
+
private
|
216
|
+
def check(expression)
|
217
|
+
if expression.lhs_operand.logical? && expression.rhs_operand.logical?
|
218
|
+
W(:W0713, expression.location)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
class W0714 < PassiveMessageDetection
|
224
|
+
def initialize(context)
|
225
|
+
super
|
226
|
+
visitor = context[:c_visitor]
|
227
|
+
visitor.enter_and_expression += method(:check)
|
228
|
+
end
|
229
|
+
|
230
|
+
private
|
231
|
+
def check(expression)
|
232
|
+
if expression.lhs_operand.logical? && expression.rhs_operand.logical?
|
233
|
+
W(:W0714, expression.location)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
class W0715 < PassiveMessageDetection
|
239
|
+
def initialize(context)
|
240
|
+
super
|
241
|
+
visitor = context[:c_visitor]
|
242
|
+
visitor.enter_inclusive_or_expression += method(:check)
|
243
|
+
end
|
244
|
+
|
245
|
+
private
|
246
|
+
def check(expression)
|
247
|
+
if expression.lhs_operand.logical? && expression.rhs_operand.logical?
|
248
|
+
W(:W0715, expression.location)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
190
253
|
class W0726 < W0698
|
191
254
|
private
|
192
255
|
def check(return_statement)
|
data/lib/adlint/c/metric.rb
CHANGED
@@ -145,7 +145,7 @@ module C #:nodoc:
|
|
145
145
|
return unless @current_function
|
146
146
|
|
147
147
|
FN_STMT(FunctionIdentifier.new(@current_function.identifier.value,
|
148
|
-
@current_function.signature),
|
148
|
+
@current_function.signature.to_s),
|
149
149
|
@current_function.location, @statement_count)
|
150
150
|
|
151
151
|
@current_function = nil
|
@@ -302,14 +302,14 @@ module C #:nodoc:
|
|
302
302
|
def do_prepare(context) end
|
303
303
|
def do_execute(context) end
|
304
304
|
|
305
|
-
def enter_function(function_definition)
|
305
|
+
def enter_function(function_definition, function)
|
306
306
|
if @fpath == function_definition.location.fpath
|
307
307
|
@current_function = function_definition
|
308
308
|
@variables = {}
|
309
309
|
end
|
310
310
|
end
|
311
311
|
|
312
|
-
def leave_function(function_definition)
|
312
|
+
def leave_function(function_definition, function)
|
313
313
|
return unless @current_function
|
314
314
|
|
315
315
|
useless_count = @variables.each_value.reduce(0) { |count, read_count|
|
@@ -527,9 +527,11 @@ module C #:nodoc:
|
|
527
527
|
visitor.leave_ansi_function_definition += method(:leave_function)
|
528
528
|
visitor.enter_kandr_function_definition += method(:enter_function)
|
529
529
|
visitor.leave_kandr_function_definition += method(:leave_function)
|
530
|
-
visitor.
|
530
|
+
visitor.enter_if_else_statement += method(:enter_if_else_statement)
|
531
|
+
visitor.leave_if_else_statement += method(:leave_if_else_statement)
|
531
532
|
@current_function = nil
|
532
|
-
@
|
533
|
+
@if_else_statement_chain = 0
|
534
|
+
@incomplete_if_else_statement_count = 0
|
533
535
|
end
|
534
536
|
|
535
537
|
private
|
@@ -539,7 +541,8 @@ module C #:nodoc:
|
|
539
541
|
def enter_function(function_definition)
|
540
542
|
if @fpath == function_definition.location.fpath
|
541
543
|
@current_function = function_definition
|
542
|
-
@
|
544
|
+
@if_else_statement_chain = 0
|
545
|
+
@incomplete_if_else_statement_count = 0
|
543
546
|
end
|
544
547
|
end
|
545
548
|
|
@@ -548,17 +551,26 @@ module C #:nodoc:
|
|
548
551
|
|
549
552
|
FN_UELS(FunctionIdentifier.new(@current_function.identifier.value,
|
550
553
|
@current_function.signature.to_s),
|
551
|
-
@current_function.location, @
|
554
|
+
@current_function.location, @incomplete_if_else_statement_count)
|
552
555
|
|
553
556
|
@current_function = nil
|
554
|
-
@
|
557
|
+
@if_else_statement_chain = 0
|
558
|
+
@incomplete_if_else_statement_count = 0
|
555
559
|
end
|
556
560
|
|
557
|
-
def
|
558
|
-
|
559
|
-
|
561
|
+
def enter_if_else_statement(node)
|
562
|
+
@if_else_statement_chain += 1
|
563
|
+
|
564
|
+
if @current_function && @if_else_statement_chain > 0
|
565
|
+
if node.else_statement.kind_of?(IfStatement)
|
566
|
+
@incomplete_if_else_statement_count += 1
|
567
|
+
end
|
560
568
|
end
|
561
569
|
end
|
570
|
+
|
571
|
+
def leave_if_else_statement(node)
|
572
|
+
@if_else_statement_chain -= 1
|
573
|
+
end
|
562
574
|
end
|
563
575
|
|
564
576
|
class FN_NEST < MetricMeasurement
|
@@ -661,7 +673,7 @@ module C #:nodoc:
|
|
661
673
|
def do_prepare(context) end
|
662
674
|
def do_execute(context) end
|
663
675
|
|
664
|
-
def enter_function(function_definition)
|
676
|
+
def enter_function(function_definition, function)
|
665
677
|
if @fpath == function_definition.location.fpath
|
666
678
|
@current_function = function_definition
|
667
679
|
|
@@ -676,7 +688,7 @@ module C #:nodoc:
|
|
676
688
|
end
|
677
689
|
end
|
678
690
|
|
679
|
-
def leave_function(function_definition)
|
691
|
+
def leave_function(function_definition, function)
|
680
692
|
return unless @current_function
|
681
693
|
|
682
694
|
FN_PATH(FunctionIdentifier.new(@current_function.identifier.value,
|
data/lib/adlint/c/object.rb
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#++
|
31
31
|
|
32
32
|
require "adlint/util"
|
33
|
+
require "adlint/c/syntax"
|
33
34
|
require "adlint/c/value"
|
34
35
|
require "adlint/c/scope"
|
35
36
|
require "adlint/c/seqp"
|
@@ -92,6 +93,29 @@ module C #:nodoc:
|
|
92
93
|
|
93
94
|
attr_reader :declarations_and_definitions
|
94
95
|
|
96
|
+
def storage_class_specifiers
|
97
|
+
@declarations_and_definitions.map { |decl_or_def|
|
98
|
+
decl_or_def.storage_class_specifier
|
99
|
+
}.compact
|
100
|
+
end
|
101
|
+
|
102
|
+
def declared_as_extern?
|
103
|
+
storage_class_specifiers.empty? ||
|
104
|
+
storage_class_specifiers.any? { |sc_spec| sc_spec.type == :EXTERN }
|
105
|
+
end
|
106
|
+
|
107
|
+
def declared_as_static?
|
108
|
+
storage_class_specifiers.any? { |sc_spec| sc_spec.type == :STATIC }
|
109
|
+
end
|
110
|
+
|
111
|
+
def declared_as_auto?
|
112
|
+
storage_class_specifiers.any? { |sc_spec| sc_spec.type == :AUTO }
|
113
|
+
end
|
114
|
+
|
115
|
+
def declared_as_register?
|
116
|
+
storage_class_specifiers.any? { |sc_spec| sc_spec.type == :REGISTER }
|
117
|
+
end
|
118
|
+
|
95
119
|
def designated_by_lvalue?
|
96
120
|
subclass_responsibility
|
97
121
|
end
|
@@ -193,6 +217,30 @@ module C #:nodoc:
|
|
193
217
|
self_value.exist?
|
194
218
|
end
|
195
219
|
|
220
|
+
def enter_value_versioning_group
|
221
|
+
value.enter_versioning_group
|
222
|
+
end
|
223
|
+
|
224
|
+
def leave_value_versioning_group(raise_complement)
|
225
|
+
value.leave_versioning_group(raise_complement)
|
226
|
+
end
|
227
|
+
|
228
|
+
def begin_value_versioning
|
229
|
+
value.begin_versioning
|
230
|
+
end
|
231
|
+
|
232
|
+
def end_value_versioning
|
233
|
+
value.end_versioning
|
234
|
+
end
|
235
|
+
|
236
|
+
def rollback_latest_value_version!
|
237
|
+
value.rollback_latest_version!
|
238
|
+
end
|
239
|
+
|
240
|
+
def rollback_all_value_versions!
|
241
|
+
value.rollback_all_versions!
|
242
|
+
end
|
243
|
+
|
196
244
|
private
|
197
245
|
def relate_to_memory(memory)
|
198
246
|
bind_to(memory)
|
@@ -210,6 +258,23 @@ module C #:nodoc:
|
|
210
258
|
end
|
211
259
|
|
212
260
|
attr_accessor :scope
|
261
|
+
|
262
|
+
def declared_as_extern?
|
263
|
+
if @scope.global?
|
264
|
+
super
|
265
|
+
else
|
266
|
+
storage_class_specifiers.all? { |sc_spec| sc_spec.type == :EXTERN }
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def declared_as_auto?
|
271
|
+
if @scope.global?
|
272
|
+
super
|
273
|
+
else
|
274
|
+
storage_class_specifiers.empty? ||
|
275
|
+
storage_class_specifiers.any? { |sc_spec| sc_spec.type == :AUTO }
|
276
|
+
end
|
277
|
+
end
|
213
278
|
end
|
214
279
|
|
215
280
|
class OuterVariable < ScopedVariable
|
@@ -220,6 +285,60 @@ module C #:nodoc:
|
|
220
285
|
@inner_variables = create_inner_variables(type, scope)
|
221
286
|
end
|
222
287
|
|
288
|
+
def enter_value_versioning_group
|
289
|
+
super
|
290
|
+
if @inner_variables
|
291
|
+
@inner_variables.each do |inner|
|
292
|
+
inner.enter_value_versioning_group
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
def leave_value_versioning_group(raise_complement)
|
298
|
+
super
|
299
|
+
if @inner_variables
|
300
|
+
@inner_variables.each do |inner|
|
301
|
+
inner.leave_value_versioning_group(raise_complement)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def begin_value_versioning
|
307
|
+
super
|
308
|
+
if @inner_variables
|
309
|
+
@inner_variables.each do |inner|
|
310
|
+
inner.begin_value_versioning
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
def end_value_versioning
|
316
|
+
super
|
317
|
+
if @inner_variables
|
318
|
+
@inner_variables.each do |inner|
|
319
|
+
inner.end_value_versioning
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
def rollback_latest_value_version!
|
325
|
+
super
|
326
|
+
if @inner_variables
|
327
|
+
@inner_variables.each do |inner|
|
328
|
+
inner.rollback_latest_value_version!
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def rollback_all_value_versions!
|
334
|
+
super
|
335
|
+
if @inner_variables
|
336
|
+
@inner_variables.each do |inner|
|
337
|
+
inner.rollback_all_value_versions!
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
223
342
|
def inner_variable_at(index)
|
224
343
|
if @type.array?
|
225
344
|
# TODO: If linear searching is too slow, use an index of inner
|
@@ -345,17 +464,40 @@ module C #:nodoc:
|
|
345
464
|
include Nameable
|
346
465
|
|
347
466
|
def initialize(memory, outer_variable, type, component_name)
|
467
|
+
@owner = outer_variable
|
468
|
+
@component_name = component_name
|
348
469
|
self.name = create_qualified_name(outer_variable, component_name)
|
349
470
|
|
350
471
|
super(memory, nil, type, outer_variable.scope)
|
351
|
-
|
352
|
-
@owner = outer_variable
|
353
|
-
@component_name = component_name
|
354
472
|
end
|
355
473
|
|
356
474
|
attr_reader :owner
|
357
475
|
attr_reader :component_name
|
358
476
|
|
477
|
+
def storage_class_specifiers
|
478
|
+
@owner.storage_class_specifiers
|
479
|
+
end
|
480
|
+
|
481
|
+
def declared_as_extern?
|
482
|
+
@owner.declared_as_extern?
|
483
|
+
end
|
484
|
+
|
485
|
+
def declared_as_static?
|
486
|
+
@owner.declared_as_static?
|
487
|
+
end
|
488
|
+
|
489
|
+
def declared_as_auto?
|
490
|
+
@owner.declared_as_auto?
|
491
|
+
end
|
492
|
+
|
493
|
+
def declared_as_register?
|
494
|
+
@owner.declared_as_register?
|
495
|
+
end
|
496
|
+
|
497
|
+
def named?
|
498
|
+
@owner.named?
|
499
|
+
end
|
500
|
+
|
359
501
|
def temporary?
|
360
502
|
@owner.temporary?
|
361
503
|
end
|
@@ -437,7 +579,7 @@ module C #:nodoc:
|
|
437
579
|
@memory_pool.free(variable.binding.memory)
|
438
580
|
end
|
439
581
|
@scope_stack.pop
|
440
|
-
|
582
|
+
rollback_all_global_variables_value! if current_scope.global?
|
441
583
|
end
|
442
584
|
|
443
585
|
def declare(declaration)
|
@@ -453,7 +595,14 @@ module C #:nodoc:
|
|
453
595
|
end
|
454
596
|
|
455
597
|
def define(definition, init_value = nil)
|
456
|
-
|
598
|
+
if storage_class_of(definition) == :static
|
599
|
+
# NOTE: Value of the global variable should be arbitrary because
|
600
|
+
# execution of its accessors are out of order.
|
601
|
+
# So, a value of the initializer should be ignored.
|
602
|
+
init_value = definition.type.arbitrary_value
|
603
|
+
else
|
604
|
+
init_value ||= definition.type.undefined_value
|
605
|
+
end
|
457
606
|
|
458
607
|
if variable = lookup(definition.identifier.value)
|
459
608
|
if variable.scope == current_scope
|
@@ -486,35 +635,35 @@ module C #:nodoc:
|
|
486
635
|
nil
|
487
636
|
end
|
488
637
|
|
489
|
-
def
|
638
|
+
def enter_variables_value_versioning_group
|
490
639
|
@named_variables.each do |hash|
|
491
|
-
hash.each_value { |variable| variable.
|
640
|
+
hash.each_value { |variable| variable.enter_value_versioning_group }
|
492
641
|
end
|
493
642
|
end
|
494
643
|
|
495
|
-
def
|
644
|
+
def leave_variables_value_versioning_group(raise_complement)
|
496
645
|
@named_variables.each do |hash|
|
497
646
|
hash.each_value do |variable|
|
498
|
-
variable.
|
647
|
+
variable.leave_value_versioning_group(raise_complement)
|
499
648
|
end
|
500
649
|
end
|
501
650
|
end
|
502
651
|
|
503
|
-
def
|
652
|
+
def begin_variables_value_versioning
|
504
653
|
@named_variables.each do |hash|
|
505
|
-
hash.each_value { |variable| variable.
|
654
|
+
hash.each_value { |variable| variable.begin_value_versioning }
|
506
655
|
end
|
507
656
|
end
|
508
657
|
|
509
|
-
def
|
658
|
+
def end_variables_value_versioning
|
510
659
|
@named_variables.each do |hash|
|
511
|
-
hash.each_value { |variable| variable.
|
660
|
+
hash.each_value { |variable| variable.end_value_versioning }
|
512
661
|
end
|
513
662
|
end
|
514
663
|
|
515
|
-
def
|
664
|
+
def rollback_latest_variables_value_version!
|
516
665
|
@named_variables.each do |hash|
|
517
|
-
hash.each_value { |variable| variable.
|
666
|
+
hash.each_value { |variable| variable.rollback_latest_value_version! }
|
518
667
|
end
|
519
668
|
end
|
520
669
|
|
@@ -541,14 +690,6 @@ module C #:nodoc:
|
|
541
690
|
end
|
542
691
|
end
|
543
692
|
|
544
|
-
def default_value_of(definition)
|
545
|
-
if storage_class_of(definition) == :static
|
546
|
-
definition.type.zero_value
|
547
|
-
else
|
548
|
-
definition.type.undefined_value
|
549
|
-
end
|
550
|
-
end
|
551
|
-
|
552
693
|
def storage_class_of(declaration_or_definition)
|
553
694
|
storage_class_specifier =
|
554
695
|
declaration_or_definition.storage_class_specifier
|
@@ -573,9 +714,9 @@ module C #:nodoc:
|
|
573
714
|
@scope_stack.last
|
574
715
|
end
|
575
716
|
|
576
|
-
def
|
717
|
+
def rollback_all_global_variables_value!
|
577
718
|
@named_variables.first.each_value do |variable|
|
578
|
-
variable.
|
719
|
+
variable.rollback_all_value_versions!
|
579
720
|
end
|
580
721
|
end
|
581
722
|
end
|
@@ -745,9 +886,7 @@ module C #:nodoc:
|
|
745
886
|
end
|
746
887
|
|
747
888
|
def signature
|
748
|
-
|
749
|
-
type.parameter_types.map { |ptype| ptype.brief_image }.join(",") +
|
750
|
-
(type.have_va_list? ? ",...)" : ")")
|
889
|
+
FunctionSignature.new(name, type)
|
751
890
|
end
|
752
891
|
end
|
753
892
|
|
@@ -798,9 +937,7 @@ module C #:nodoc:
|
|
798
937
|
end
|
799
938
|
|
800
939
|
def signature
|
801
|
-
|
802
|
-
type.parameter_types.map { |ptype| ptype.brief_image }.join(",") +
|
803
|
-
(type.have_va_list? ? ",...)" : ")")
|
940
|
+
FunctionSignature.new("__adlint__anonymous_func", type)
|
804
941
|
end
|
805
942
|
end
|
806
943
|
|
data/lib/adlint/c/parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.4.
|
3
|
+
# This file is automatically generated by Racc 1.4.8
|
4
4
|
# from Racc grammer file "".
|
5
5
|
#
|
6
6
|
|
@@ -235,7 +235,7 @@ clist = [
|
|
235
235
|
'15,16,39,38,18,19,20,21,24,25,22,23,36,37,17,26,27,28,33,34,35,,,,,',
|
236
236
|
',,,,,,,,32,29,,400,,12,13,14,15,16,39,38,18,19,20,21,24,25,22,23,36',
|
237
237
|
'37,17,26,27,28,33,34,35,,,,,,,,,,,,,,32' ]
|
238
|
-
racc_action_table = arr = Array.new(4442, nil)
|
238
|
+
racc_action_table = arr = ::Array.new(4442, nil)
|
239
239
|
idx = 0
|
240
240
|
clist.each do |str|
|
241
241
|
str.split(',', -1).each do |i|
|
@@ -417,7 +417,7 @@ clist = [
|
|
417
417
|
'343,343,,,,,,,,,,,,,,343,346,,343,,346,346,346,346,346,346,346,346,346',
|
418
418
|
'346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,,,,,,,,',
|
419
419
|
',,,,,346' ]
|
420
|
-
racc_action_check = arr = Array.new(4442, nil)
|
420
|
+
racc_action_check = arr = ::Array.new(4442, nil)
|
421
421
|
idx = 0
|
422
422
|
clist.each do |str|
|
423
423
|
str.split(',', -1).each do |i|
|
data/lib/adlint/c/phase.rb
CHANGED
@@ -44,6 +44,15 @@ require "adlint/c/util"
|
|
44
44
|
module AdLint #:nodoc:
|
45
45
|
module C #:nodoc:
|
46
46
|
|
47
|
+
class Prepare1Phase < Phase
|
48
|
+
private
|
49
|
+
def do_execute(context)
|
50
|
+
monitored_region("pr3") do
|
51
|
+
context[:c_visitor] = SyntaxTreeMulticastVisitor.new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
47
56
|
class ParsePhase < Phase
|
48
57
|
private
|
49
58
|
def do_execute(context)
|
@@ -70,12 +79,11 @@ module C #:nodoc:
|
|
70
79
|
end
|
71
80
|
end
|
72
81
|
|
73
|
-
class
|
82
|
+
class Prepare2Phase < Phase
|
74
83
|
private
|
75
84
|
def do_execute(context)
|
76
|
-
monitored_region("
|
85
|
+
monitored_region("pr4") do
|
77
86
|
context[:c_interpreter] = Interpreter.new(context[:c_type_table])
|
78
|
-
context[:c_visitor] = SyntaxTreeMulticastVisitor.new
|
79
87
|
|
80
88
|
context[:c_commands] = setup_code_extractions(context) +
|
81
89
|
setup_metric_measurements(context) +
|
@@ -566,6 +574,8 @@ module C #:nodoc:
|
|
566
574
|
W0600.new(context),
|
567
575
|
W0605.new(context),
|
568
576
|
W0606.new(context),
|
577
|
+
W0607.new(context),
|
578
|
+
W0608.new(context),
|
569
579
|
W0609.new(context),
|
570
580
|
W0610.new(context),
|
571
581
|
W0611.new(context),
|
@@ -575,6 +585,7 @@ module C #:nodoc:
|
|
575
585
|
W0622.new(context),
|
576
586
|
W0623.new(context),
|
577
587
|
W0624.new(context),
|
588
|
+
W0625.new(context),
|
578
589
|
W0626.new(context),
|
579
590
|
W0627.new(context),
|
580
591
|
W0629.new(context),
|
@@ -584,6 +595,7 @@ module C #:nodoc:
|
|
584
595
|
W0638.new(context),
|
585
596
|
W0639.new(context),
|
586
597
|
W0640.new(context),
|
598
|
+
W0642.new(context),
|
587
599
|
W0653.new(context),
|
588
600
|
W0654.new(context),
|
589
601
|
W0655.new(context),
|
@@ -624,6 +636,11 @@ module C #:nodoc:
|
|
624
636
|
W0704.new(context),
|
625
637
|
W0705.new(context),
|
626
638
|
W0708.new(context),
|
639
|
+
W0711.new(context),
|
640
|
+
W0712.new(context),
|
641
|
+
W0713.new(context),
|
642
|
+
W0714.new(context),
|
643
|
+
W0715.new(context),
|
627
644
|
W0720.new(context),
|
628
645
|
W0721.new(context),
|
629
646
|
W0722.new(context),
|