adlint 1.16.0 → 1.18.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.
- data/ChangeLog +471 -0
- data/MANIFEST +35 -8
- data/NEWS +50 -4
- data/bin/adlint +7 -7
- data/bin/adlint_chk +7 -7
- data/bin/adlint_cma +7 -7
- data/bin/adlint_sma +7 -7
- data/bin/adlintize +5 -5
- data/etc/mesg.d/en_US/messages.yml +3 -3
- data/etc/mesg.d/ja_JP/messages.yml +3 -3
- data/features/message_detection/E0013.feature +34 -0
- data/features/message_detection/W0007.feature +2 -0
- data/features/message_detection/W0583.feature +1 -2
- data/features/message_detection/W0641.feature +132 -0
- data/features/message_detection/W0643.feature +1 -1
- data/features/message_detection/W0644.feature +529 -0
- data/features/message_detection/W0645.feature +1 -1
- data/features/message_detection/W0649.feature +277 -0
- data/features/message_detection/W0650.feature +208 -0
- data/features/message_detection/W0697.feature +6 -0
- data/features/message_detection/W0705.feature +350 -0
- data/features/message_detection/W0707.feature +223 -0
- data/features/message_detection/W0711.feature +113 -0
- data/features/message_detection/W0712.feature +113 -0
- data/features/message_detection/W0713.feature +110 -0
- data/features/message_detection/W0714.feature +118 -0
- data/features/message_detection/W0715.feature +118 -0
- data/features/message_detection/W0716.feature +1 -0
- data/features/message_detection/W0717.feature +1 -0
- data/features/message_detection/W0718.feature +1 -0
- data/features/message_detection/W0719.feature +154 -0
- data/features/message_detection/W0723.feature +1 -2
- data/features/message_detection/W0732.feature +3 -0
- data/features/message_detection/W0733.feature +3 -0
- data/features/message_detection/W0734.feature +4 -0
- data/features/message_detection/W0735.feature +4 -0
- data/features/message_detection/W0745.feature +132 -0
- data/features/message_detection/W0780.feature +68 -0
- data/features/message_detection/W0783.feature +95 -0
- data/features/message_detection/W0792.feature +124 -0
- data/features/message_detection/W0793.feature +153 -0
- data/features/message_detection/W0794.feature +90 -0
- data/features/message_detection/W0830.feature +65 -0
- data/features/message_detection/W0833.feature +220 -0
- data/features/message_detection/W0834.feature +189 -0
- data/features/message_detection/W1026.feature +105 -0
- data/features/message_detection/W1031.feature +17 -34
- data/features/message_detection/W1039.feature +268 -0
- data/features/message_detection/W1047.feature +163 -0
- data/features/message_detection/W1066.feature +1 -0
- data/features/message_detection/W1067.feature +1 -0
- data/features/message_detection/W1068.feature +1 -0
- data/features/message_detection/W1069.feature +5 -0
- data/features/message_detection/W1070.feature +5 -0
- data/features/message_detection/W1071.feature +83 -0
- data/features/message_detection/W1073.feature +3 -2
- data/features/message_detection/W9003.feature +7 -12
- data/features/step_definitions/message_detection_steps.rb +4 -31
- data/features/support/env.rb +117 -2
- data/lib/adlint/c/branch.rb +0 -2
- data/lib/adlint/c/ctrlexpr.rb +33 -0
- data/lib/adlint/c/expr.rb +119 -31
- data/lib/adlint/c/interp.rb +44 -3
- data/lib/adlint/c/message.rb +1411 -29
- data/lib/adlint/c/object.rb +16 -2
- data/lib/adlint/c/option.rb +1 -0
- data/lib/adlint/c/parser.rb +101 -100
- data/lib/adlint/c/parser.y +3 -2
- data/lib/adlint/c/phase.rb +18 -0
- data/lib/adlint/c/resolver.rb +23 -0
- data/lib/adlint/c/syntax.rb +90 -4
- data/lib/adlint/c/type.rb +177 -110
- data/lib/adlint/cpp/macro.rb +4 -4
- data/lib/adlint/version.rb +2 -2
- data/share/demo/bad_include/test/"1/".h +0 -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 +467 -506
- data/share/doc/users_guide_en.texi +95 -125
- data/share/doc/users_guide_ja.html +471 -518
- data/share/doc/users_guide_ja.texi +95 -133
- data/spec/spec_helper.rb +6 -0
- metadata +37 -10
data/lib/adlint/c/parser.y
CHANGED
@@ -1092,7 +1092,8 @@ enum_specifier
|
|
1092
1092
|
{
|
1093
1093
|
checkpoint(val[0].location)
|
1094
1094
|
|
1095
|
-
result = EnumSpecifier.new(create_unnamed_tag_name(val[0]), val[2]
|
1095
|
+
result = EnumSpecifier.new(create_unnamed_tag_name(val[0]), val[2],
|
1096
|
+
val[3])
|
1096
1097
|
result.head_token = val[0]
|
1097
1098
|
result.tail_token = val[4]
|
1098
1099
|
}
|
@@ -1100,7 +1101,7 @@ enum_specifier
|
|
1100
1101
|
{
|
1101
1102
|
checkpoint(val[0].location)
|
1102
1103
|
|
1103
|
-
result = EnumSpecifier.new(val[1], val[3])
|
1104
|
+
result = EnumSpecifier.new(val[1], val[3], val[4])
|
1104
1105
|
result.head_token = val[0]
|
1105
1106
|
result.tail_token = val[5]
|
1106
1107
|
}
|
data/lib/adlint/c/phase.rb
CHANGED
@@ -602,8 +602,12 @@ module C #:nodoc:
|
|
602
602
|
W0638.new(context),
|
603
603
|
W0639.new(context),
|
604
604
|
W0640.new(context),
|
605
|
+
W0641.new(context),
|
605
606
|
W0642.new(context),
|
607
|
+
W0644.new(context),
|
606
608
|
W0645.new(context),
|
609
|
+
W0649.new(context),
|
610
|
+
W0650.new(context),
|
607
611
|
W0653.new(context),
|
608
612
|
W0654.new(context),
|
609
613
|
W0655.new(context),
|
@@ -646,6 +650,7 @@ module C #:nodoc:
|
|
646
650
|
W0703.new(context),
|
647
651
|
W0704.new(context),
|
648
652
|
W0705.new(context),
|
653
|
+
W0707.new(context),
|
649
654
|
W0708.new(context),
|
650
655
|
W0711.new(context),
|
651
656
|
W0712.new(context),
|
@@ -655,6 +660,7 @@ module C #:nodoc:
|
|
655
660
|
W0716.new(context),
|
656
661
|
W0717.new(context),
|
657
662
|
W0718.new(context),
|
663
|
+
W0719.new(context),
|
658
664
|
W0720.new(context),
|
659
665
|
W0721.new(context),
|
660
666
|
W0722.new(context),
|
@@ -709,13 +715,18 @@ module C #:nodoc:
|
|
709
715
|
W0777.new(context),
|
710
716
|
W0778.new(context),
|
711
717
|
W0779.new(context),
|
718
|
+
W0780.new(context),
|
712
719
|
W0781.new(context),
|
720
|
+
W0783.new(context),
|
713
721
|
W0785.new(context),
|
714
722
|
W0786.new(context),
|
715
723
|
W0787.new(context),
|
716
724
|
W0788.new(context),
|
717
725
|
W0789.new(context),
|
718
726
|
W0790.new(context),
|
727
|
+
W0792.new(context),
|
728
|
+
W0793.new(context),
|
729
|
+
W0794.new(context),
|
719
730
|
W0795.new(context),
|
720
731
|
W0796.new(context),
|
721
732
|
W0797.new(context),
|
@@ -727,10 +738,14 @@ module C #:nodoc:
|
|
727
738
|
W0810.new(context),
|
728
739
|
W0827.new(context),
|
729
740
|
W0828.new(context),
|
741
|
+
W0830.new(context),
|
742
|
+
W0833.new(context),
|
743
|
+
W0834.new(context),
|
730
744
|
W0947.new(context),
|
731
745
|
W0948.new(context),
|
732
746
|
W0949.new(context),
|
733
747
|
W0950.new(context),
|
748
|
+
W1026.new(context),
|
734
749
|
W1027.new(context),
|
735
750
|
W1028.new(context),
|
736
751
|
W1029.new(context),
|
@@ -739,6 +754,8 @@ module C #:nodoc:
|
|
739
754
|
W1032.new(context),
|
740
755
|
W1033.new(context),
|
741
756
|
W1034.new(context),
|
757
|
+
W1039.new(context),
|
758
|
+
W1047.new(context),
|
742
759
|
W1049.new(context),
|
743
760
|
W1050.new(context),
|
744
761
|
W1051.new(context),
|
@@ -761,6 +778,7 @@ module C #:nodoc:
|
|
761
778
|
W1068.new(context),
|
762
779
|
W1069.new(context),
|
763
780
|
W1070.new(context),
|
781
|
+
W1071.new(context),
|
764
782
|
W1072.new(context),
|
765
783
|
W1073.new(context),
|
766
784
|
W1074.new(context),
|
data/lib/adlint/c/resolver.rb
CHANGED
@@ -123,6 +123,29 @@ module C #:nodoc:
|
|
123
123
|
node.init_declarator.declarator)
|
124
124
|
end
|
125
125
|
|
126
|
+
def visit_parameter_declaration(node)
|
127
|
+
checkpoint(node.location)
|
128
|
+
node.declaration_specifiers.accept(self) if node.declaration_specifiers
|
129
|
+
node.declarator.accept(self) if node.declarator
|
130
|
+
|
131
|
+
if declaration_specifiers = node.declaration_specifiers
|
132
|
+
type_qualifiers = declaration_specifiers.type_qualifiers
|
133
|
+
type_specifiers = declaration_specifiers.type_specifiers
|
134
|
+
else
|
135
|
+
type_qualifiers = []
|
136
|
+
type_specifiers = []
|
137
|
+
end
|
138
|
+
|
139
|
+
type = lookup_variable_type(type_qualifiers, type_specifiers,
|
140
|
+
node.declarator)
|
141
|
+
|
142
|
+
if type.function?
|
143
|
+
node.type = @type_table.pointer_type(type)
|
144
|
+
else
|
145
|
+
node.type = type
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
126
149
|
def visit_variable_declaration(node)
|
127
150
|
checkpoint(node.location)
|
128
151
|
node.declaration_specifiers.accept(self) if node.declaration_specifiers
|
data/lib/adlint/c/syntax.rb
CHANGED
@@ -1457,7 +1457,10 @@ module C #:nodoc:
|
|
1457
1457
|
# left-to-right evaluation; there is a sequence point after the
|
1458
1458
|
# evaluation of the first operand. If the first operand compares equal
|
1459
1459
|
# to 0, the second operand is not evaluated.
|
1460
|
-
|
1460
|
+
#
|
1461
|
+
# NOTE: Sequence point will be reached after lhs value reference.
|
1462
|
+
# So, notification should be done by ExpressionEvaluator manually.
|
1463
|
+
# @lhs_operand.append_sequence_point!
|
1461
1464
|
end
|
1462
1465
|
|
1463
1466
|
def have_side_effect?
|
@@ -1491,7 +1494,10 @@ module C #:nodoc:
|
|
1491
1494
|
# left-to-right evaluation; there is a sequence point after the
|
1492
1495
|
# evaluation of the first operand. If the first operand compares
|
1493
1496
|
# unequal to 0, the second operand is not evaluated.
|
1494
|
-
|
1497
|
+
#
|
1498
|
+
# NOTE: Sequence point will be reached after lhs value reference.
|
1499
|
+
# So, notification should be done by ExpressionEvaluator manually.
|
1500
|
+
# @lhs_operand.append_sequence_point!
|
1495
1501
|
end
|
1496
1502
|
|
1497
1503
|
def have_side_effect?
|
@@ -2363,14 +2369,16 @@ module C #:nodoc:
|
|
2363
2369
|
end
|
2364
2370
|
|
2365
2371
|
class EnumSpecifier < TypeSpecifier
|
2366
|
-
def initialize(identifier, enumerators)
|
2372
|
+
def initialize(identifier, enumerators, trailing_comma = nil)
|
2367
2373
|
super()
|
2368
2374
|
@identifier = identifier
|
2369
2375
|
@enumerators = enumerators
|
2376
|
+
@trailing_comma = trailing_comma
|
2370
2377
|
end
|
2371
2378
|
|
2372
2379
|
attr_reader :identifier
|
2373
2380
|
attr_reader :enumerators
|
2381
|
+
attr_reader :trailing_comma
|
2374
2382
|
|
2375
2383
|
def location
|
2376
2384
|
@identifier.location
|
@@ -2509,6 +2517,18 @@ module C #:nodoc:
|
|
2509
2517
|
def variable?
|
2510
2518
|
!function?
|
2511
2519
|
end
|
2520
|
+
|
2521
|
+
def parameter_type_list
|
2522
|
+
subclass_responsibility
|
2523
|
+
end
|
2524
|
+
|
2525
|
+
def innermost_parameter_type_list
|
2526
|
+
subclass_responsibility
|
2527
|
+
end
|
2528
|
+
|
2529
|
+
def identifier_list
|
2530
|
+
subclass_responsibility
|
2531
|
+
end
|
2512
2532
|
end
|
2513
2533
|
|
2514
2534
|
class IdentifierDeclarator < Declarator
|
@@ -2531,6 +2551,10 @@ module C #:nodoc:
|
|
2531
2551
|
nil
|
2532
2552
|
end
|
2533
2553
|
|
2554
|
+
def innermost_parameter_type_list
|
2555
|
+
nil
|
2556
|
+
end
|
2557
|
+
|
2534
2558
|
def identifier_list
|
2535
2559
|
nil
|
2536
2560
|
end
|
@@ -2565,6 +2589,10 @@ module C #:nodoc:
|
|
2565
2589
|
@base.parameter_type_list
|
2566
2590
|
end
|
2567
2591
|
|
2592
|
+
def innermost_parameter_type_list
|
2593
|
+
@base.innermost_parameter_type_list
|
2594
|
+
end
|
2595
|
+
|
2568
2596
|
def identifier_list
|
2569
2597
|
@base.identifier_list
|
2570
2598
|
end
|
@@ -2602,6 +2630,10 @@ module C #:nodoc:
|
|
2602
2630
|
@base.parameter_type_list
|
2603
2631
|
end
|
2604
2632
|
|
2633
|
+
def innermost_parameter_type_list
|
2634
|
+
@base.innermost_parameter_type_list
|
2635
|
+
end
|
2636
|
+
|
2605
2637
|
def identifier_list
|
2606
2638
|
@base.identifier_list
|
2607
2639
|
end
|
@@ -2654,6 +2686,10 @@ module C #:nodoc:
|
|
2654
2686
|
|
2655
2687
|
attr_accessor :parameter_type_list
|
2656
2688
|
|
2689
|
+
def innermost_parameter_type_list
|
2690
|
+
@base.innermost_parameter_type_list || @parameter_type_list
|
2691
|
+
end
|
2692
|
+
|
2657
2693
|
def identifier_list
|
2658
2694
|
@base.identifier_list
|
2659
2695
|
end
|
@@ -2670,6 +2706,10 @@ module C #:nodoc:
|
|
2670
2706
|
def parameter_type_list
|
2671
2707
|
@base.parameter_type_list
|
2672
2708
|
end
|
2709
|
+
|
2710
|
+
def innermost_parameter_type_list
|
2711
|
+
@base.innermost_parameter_type_list
|
2712
|
+
end
|
2673
2713
|
end
|
2674
2714
|
|
2675
2715
|
class AbbreviatedFunctionDeclarator < FunctionDeclarator
|
@@ -2677,6 +2717,10 @@ module C #:nodoc:
|
|
2677
2717
|
@base.parameter_type_list
|
2678
2718
|
end
|
2679
2719
|
|
2720
|
+
def innermost_parameter_type_list
|
2721
|
+
@base.innermost_parameter_type_list
|
2722
|
+
end
|
2723
|
+
|
2680
2724
|
def identifier_list
|
2681
2725
|
@base.identifier_list
|
2682
2726
|
end
|
@@ -2711,10 +2755,12 @@ module C #:nodoc:
|
|
2711
2755
|
super()
|
2712
2756
|
@declaration_specifiers = declaration_specifiers
|
2713
2757
|
@declarator = declarator
|
2758
|
+
@type = nil
|
2714
2759
|
end
|
2715
2760
|
|
2716
2761
|
attr_reader :declaration_specifiers
|
2717
2762
|
attr_reader :declarator
|
2763
|
+
attr_accessor :type
|
2718
2764
|
|
2719
2765
|
def location
|
2720
2766
|
@declarator ? @declarator.location : @declaration_specifiers.location
|
@@ -3487,7 +3533,7 @@ module C #:nodoc:
|
|
3487
3533
|
def initialize(declaration_specifiers, declarator,
|
3488
3534
|
compound_statement, symbol_table)
|
3489
3535
|
super(declaration_specifiers, declarator,
|
3490
|
-
create_parameters(declarator.
|
3536
|
+
create_parameters(declarator.innermost_parameter_type_list),
|
3491
3537
|
compound_statement, symbol_table)
|
3492
3538
|
end
|
3493
3539
|
|
@@ -3635,6 +3681,18 @@ module C #:nodoc:
|
|
3635
3681
|
stack.last == :function
|
3636
3682
|
end
|
3637
3683
|
|
3684
|
+
def parameter_type_list
|
3685
|
+
@base.parameter_type_list
|
3686
|
+
end
|
3687
|
+
|
3688
|
+
def innermost_parameter_type_list
|
3689
|
+
@base.innermost_parameter_type_list
|
3690
|
+
end
|
3691
|
+
|
3692
|
+
def identifier_list
|
3693
|
+
@base.identifier_list
|
3694
|
+
end
|
3695
|
+
|
3638
3696
|
def inspect(indent = 0)
|
3639
3697
|
" " * indent + short_class_name
|
3640
3698
|
end
|
@@ -3656,6 +3714,18 @@ module C #:nodoc:
|
|
3656
3714
|
@base.function?
|
3657
3715
|
end
|
3658
3716
|
|
3717
|
+
def parameter_type_list
|
3718
|
+
@base.parameter_type_list
|
3719
|
+
end
|
3720
|
+
|
3721
|
+
def innermost_parameter_type_list
|
3722
|
+
@base.innermost_parameter_type_list
|
3723
|
+
end
|
3724
|
+
|
3725
|
+
def identifier_list
|
3726
|
+
@base.identifier_list
|
3727
|
+
end
|
3728
|
+
|
3659
3729
|
def inspect(indent = 0)
|
3660
3730
|
" " * indent + short_class_name
|
3661
3731
|
end
|
@@ -3683,6 +3753,18 @@ module C #:nodoc:
|
|
3683
3753
|
stack.last == :function
|
3684
3754
|
end
|
3685
3755
|
|
3756
|
+
def parameter_type_list
|
3757
|
+
@base.parameter_type_list
|
3758
|
+
end
|
3759
|
+
|
3760
|
+
def innermost_parameter_type_list
|
3761
|
+
@base.innermost_parameter_type_list
|
3762
|
+
end
|
3763
|
+
|
3764
|
+
def identifier_list
|
3765
|
+
@base.identifier_list
|
3766
|
+
end
|
3767
|
+
|
3686
3768
|
def inspect(indent = 0)
|
3687
3769
|
" " * indent + short_class_name
|
3688
3770
|
end
|
@@ -3710,6 +3792,10 @@ module C #:nodoc:
|
|
3710
3792
|
stack.last == :function
|
3711
3793
|
end
|
3712
3794
|
|
3795
|
+
def innermost_parameter_type_list
|
3796
|
+
@base.innermost_parameter_type_list || @parameter_type_list
|
3797
|
+
end
|
3798
|
+
|
3713
3799
|
def inspect(indent = 0)
|
3714
3800
|
" " * indent + short_class_name
|
3715
3801
|
end
|
data/lib/adlint/c/type.rb
CHANGED
@@ -31,6 +31,7 @@
|
|
31
31
|
|
32
32
|
require "adlint/traits"
|
33
33
|
require "adlint/token"
|
34
|
+
require "adlint/util"
|
34
35
|
require "adlint/c/syntax"
|
35
36
|
require "adlint/c/scope"
|
36
37
|
require "adlint/c/object"
|
@@ -136,6 +137,7 @@ module C #:nodoc:
|
|
136
137
|
# <--- ParameterType ---------------------------------+
|
137
138
|
class Type
|
138
139
|
include StandardTypeCatalogAccessor
|
140
|
+
include Visitable
|
139
141
|
|
140
142
|
def initialize(type_table, name, type_declarations = [])
|
141
143
|
@type_table = type_table
|
@@ -877,34 +879,22 @@ module C #:nodoc:
|
|
877
879
|
|
878
880
|
def _arithmetic_type_with_undeclared(lhs, rhs = self)
|
879
881
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
880
|
-
#
|
881
|
-
# raises a runtime error.
|
882
|
-
raise TypeError,
|
883
|
-
"arithmetic-type of UndeclaredType and UndeclaredType is not defined."
|
882
|
+
lhs # NOTREACHED
|
884
883
|
end
|
885
884
|
|
886
885
|
def _arithmetic_type_with_unresolved(lhs, rhs = self)
|
887
886
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
888
|
-
#
|
889
|
-
# raises a runtime error.
|
890
|
-
raise TypeError,
|
891
|
-
"arithmetic-type of UnresolvedType and UndeclaredType is not defined."
|
887
|
+
lhs # NOTREACHED
|
892
888
|
end
|
893
889
|
|
894
890
|
def _arithmetic_type_with_void(lhs, rhs = self)
|
895
891
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
896
|
-
#
|
897
|
-
# raises a runtime error.
|
898
|
-
raise TypeError,
|
899
|
-
"arithmetic-type of `void' and UndeclaredType is not defined."
|
892
|
+
lhs # NOTREACHED
|
900
893
|
end
|
901
894
|
|
902
895
|
def _arithmetic_type_with_function(lhs, rhs = self)
|
903
896
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
904
|
-
#
|
905
|
-
# raises a runtime error.
|
906
|
-
raise TypeError,
|
907
|
-
"arithmetic-type of FunctionType and UndeclaredType is not defined."
|
897
|
+
lhs # NOTREACHED
|
908
898
|
end
|
909
899
|
|
910
900
|
def _arithmetic_type_with_char(lhs, rhs = self)
|
@@ -1127,26 +1117,17 @@ module C #:nodoc:
|
|
1127
1117
|
|
1128
1118
|
def _arithmetic_type_with_array(lhs, rhs = self)
|
1129
1119
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
1130
|
-
#
|
1131
|
-
# raises a runtime error.
|
1132
|
-
raise TypeError,
|
1133
|
-
"arithmetic-type of ArrayType and UndeclaredType is not defined."
|
1120
|
+
lhs # NOTREACHED
|
1134
1121
|
end
|
1135
1122
|
|
1136
1123
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
1137
1124
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
1138
|
-
#
|
1139
|
-
# raises a runtime error.
|
1140
|
-
raise TypeError,
|
1141
|
-
"arithmetic-type of StructType and UndeclaredType is not defined."
|
1125
|
+
lhs # NOTREACHED
|
1142
1126
|
end
|
1143
1127
|
|
1144
1128
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
1145
1129
|
# NOTE: An arithmetic operation with UndeclaredType must not be executed!
|
1146
|
-
#
|
1147
|
-
# raises a runtime error.
|
1148
|
-
raise TypeError,
|
1149
|
-
"arithmetic-type of UnionType and UndeclaredType is not defined."
|
1130
|
+
lhs # NOTREACHED
|
1150
1131
|
end
|
1151
1132
|
|
1152
1133
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -1410,26 +1391,17 @@ module C #:nodoc:
|
|
1410
1391
|
|
1411
1392
|
def _arithmetic_type_with_unresolved(lhs, rhs = self)
|
1412
1393
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1413
|
-
#
|
1414
|
-
# raises a runtime error.
|
1415
|
-
raise TypeError,
|
1416
|
-
"arithmetic-type of UnresolvedType and UnresolvedType is not defined."
|
1394
|
+
lhs # NOTREACHED
|
1417
1395
|
end
|
1418
1396
|
|
1419
1397
|
def _arithmetic_type_with_void(lhs, rhs = self)
|
1420
1398
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1421
|
-
#
|
1422
|
-
# raises a runtime error.
|
1423
|
-
raise TypeError,
|
1424
|
-
"arithmetic-type of `void' and UnresolvedType is not defined."
|
1399
|
+
lhs # NOTREACHED
|
1425
1400
|
end
|
1426
1401
|
|
1427
1402
|
def _arithmetic_type_with_function(lhs, rhs = self)
|
1428
1403
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1429
|
-
#
|
1430
|
-
# raises a runtime error.
|
1431
|
-
raise TypeError,
|
1432
|
-
"arithmetic-type of FunctionType and UnresolvedType is not defined."
|
1404
|
+
lhs # NOTREACHED
|
1433
1405
|
end
|
1434
1406
|
|
1435
1407
|
def _arithmetic_type_with_char(lhs, rhs = self)
|
@@ -1652,26 +1624,17 @@ module C #:nodoc:
|
|
1652
1624
|
|
1653
1625
|
def _arithmetic_type_with_array(lhs, rhs = self)
|
1654
1626
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1655
|
-
#
|
1656
|
-
# raises a runtime error.
|
1657
|
-
raise TypeError,
|
1658
|
-
"arithmetic-type of ArrayType and UnresolvedType is not defined."
|
1627
|
+
lhs # NOTREACHED
|
1659
1628
|
end
|
1660
1629
|
|
1661
1630
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
1662
1631
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1663
|
-
#
|
1664
|
-
# raises a runtime error.
|
1665
|
-
raise TypeError,
|
1666
|
-
"arithmetic-type of StructType and UnresolvedType is not defined."
|
1632
|
+
lhs # NOTREACHED
|
1667
1633
|
end
|
1668
1634
|
|
1669
1635
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
1670
1636
|
# NOTE: An arithmetic operation with UnresolvedType must not be executed!
|
1671
|
-
#
|
1672
|
-
# raises a runtime error.
|
1673
|
-
raise TypeError,
|
1674
|
-
"arithmetic-type of UnionType and UnresolvedType is not defined."
|
1637
|
+
lhs # NOTREACHED
|
1675
1638
|
end
|
1676
1639
|
|
1677
1640
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -2274,17 +2237,12 @@ module C #:nodoc:
|
|
2274
2237
|
|
2275
2238
|
def _arithmetic_type_with_void(lhs, rhs = self)
|
2276
2239
|
# NOTE: An arithmetic operation with `void' must not be executed!
|
2277
|
-
#
|
2278
|
-
raise TypeError,
|
2279
|
-
"arithmetic-type of `void' and `void' is not defined."
|
2240
|
+
lhs # NOTREACHED
|
2280
2241
|
end
|
2281
2242
|
|
2282
2243
|
def _arithmetic_type_with_function(lhs, rhs = self)
|
2283
2244
|
# NOTE: An arithmetic operation with `void' must not be executed!
|
2284
|
-
#
|
2285
|
-
# raises a runtime error.
|
2286
|
-
raise TypeError,
|
2287
|
-
"arithmetic-type of FunctionType and `void' is not defined."
|
2245
|
+
lhs # NOTREACHED
|
2288
2246
|
end
|
2289
2247
|
|
2290
2248
|
def _arithmetic_type_with_char(lhs, rhs = self)
|
@@ -2502,26 +2460,17 @@ module C #:nodoc:
|
|
2502
2460
|
|
2503
2461
|
def _arithmetic_type_with_array(lhs, rhs = self)
|
2504
2462
|
# NOTE: An arithmetic operation with `void' must not be executed!
|
2505
|
-
#
|
2506
|
-
# raises a runtime error.
|
2507
|
-
raise TypeError,
|
2508
|
-
"arithmetic-type of ArrayType and `void' is not defined."
|
2463
|
+
lhs # NOTREACHED
|
2509
2464
|
end
|
2510
2465
|
|
2511
2466
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
2512
2467
|
# NOTE: An arithmetic operation with `void' must not be executed!
|
2513
|
-
#
|
2514
|
-
# raises a runtime error.
|
2515
|
-
raise TypeError,
|
2516
|
-
"arithmetic-type of StructType and `void' is not defined."
|
2468
|
+
lhs # NOTREACHED
|
2517
2469
|
end
|
2518
2470
|
|
2519
2471
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
2520
2472
|
# NOTE: An arithmetic operation with `void' must not be executed!
|
2521
|
-
#
|
2522
|
-
# raises a runtime error.
|
2523
|
-
raise TypeError,
|
2524
|
-
"arithmetic-type of UnionType and `void' is not defined."
|
2473
|
+
lhs # NOTREACHED
|
2525
2474
|
end
|
2526
2475
|
|
2527
2476
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -2599,8 +2548,9 @@ module C #:nodoc:
|
|
2599
2548
|
end
|
2600
2549
|
|
2601
2550
|
def incomplete?
|
2602
|
-
@return_type.incomplete?
|
2603
|
-
@parameter_types.
|
2551
|
+
@return_type.incomplete? && !@return_type.void? or
|
2552
|
+
@parameter_types.empty? ||
|
2553
|
+
@parameter_types.any? { |type| type.incomplete? && !type.void? }
|
2604
2554
|
end
|
2605
2555
|
|
2606
2556
|
def compatible?(to_type)
|
@@ -2803,10 +2753,7 @@ module C #:nodoc:
|
|
2803
2753
|
|
2804
2754
|
def _arithmetic_type_with_function(lhs, rhs = self)
|
2805
2755
|
# NOTE: An arithmetic operation with FunctionType must not be executed!
|
2806
|
-
#
|
2807
|
-
# raises a runtime error.
|
2808
|
-
raise TypeError,
|
2809
|
-
"arithmetic-type of FunctionType and FunctionType is not defined."
|
2756
|
+
lhs # NOTREACHED
|
2810
2757
|
end
|
2811
2758
|
|
2812
2759
|
def _arithmetic_type_with_char(lhs, rhs = self)
|
@@ -3029,26 +2976,17 @@ module C #:nodoc:
|
|
3029
2976
|
|
3030
2977
|
def _arithmetic_type_with_array(lhs, rhs = self)
|
3031
2978
|
# NOTE: An arithmetic operation with FunctionType must not be executed!
|
3032
|
-
#
|
3033
|
-
# raises a runtime error.
|
3034
|
-
raise TypeError,
|
3035
|
-
"arithmetic-type of ArrayType and FunctionType is not defined."
|
2979
|
+
lhs # NOTREACHED
|
3036
2980
|
end
|
3037
2981
|
|
3038
2982
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
3039
2983
|
# NOTE: An arithmetic operation with FunctionType must not be executed!
|
3040
|
-
#
|
3041
|
-
# raises a runtime error.
|
3042
|
-
raise TypeError,
|
3043
|
-
"arithmetic-type of StructType and FunctionType is not defined."
|
2984
|
+
lhs # NOTREACHED
|
3044
2985
|
end
|
3045
2986
|
|
3046
2987
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
3047
2988
|
# NOTE: An arithmetic operation with FunctionType must not be executed!
|
3048
|
-
#
|
3049
|
-
# raises a runtime error.
|
3050
|
-
raise TypeError,
|
3051
|
-
"arithmetic-type of UnionType and FunctionType is not defined."
|
2989
|
+
lhs # NOTREACHED
|
3052
2990
|
end
|
3053
2991
|
|
3054
2992
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -5231,7 +5169,9 @@ module C #:nodoc:
|
|
5231
5169
|
end
|
5232
5170
|
|
5233
5171
|
def undeclared?
|
5234
|
-
|
5172
|
+
# NOTE: To avoid the infinite recursive call of #undeclared? when the
|
5173
|
+
# composite type contains the pointer to it's owner type.
|
5174
|
+
@base_type.kind_of?(UndeclaredType)
|
5235
5175
|
end
|
5236
5176
|
|
5237
5177
|
def unresolved?
|
@@ -6129,26 +6069,17 @@ module C #:nodoc:
|
|
6129
6069
|
|
6130
6070
|
def _arithmetic_type_with_array(lhs, rhs = self)
|
6131
6071
|
# NOTE: An arithmetic operation with ArrayType must not be executed!
|
6132
|
-
#
|
6133
|
-
# raises a runtime error.
|
6134
|
-
raise TypeError,
|
6135
|
-
"arithmetic-type of ArrayType and ArrayType is not defined."
|
6072
|
+
lhs # NOTREACHED
|
6136
6073
|
end
|
6137
6074
|
|
6138
6075
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
6139
6076
|
# NOTE: An arithmetic operation with ArrayType must not be executed!
|
6140
|
-
#
|
6141
|
-
# raises a runtime error.
|
6142
|
-
raise TypeError,
|
6143
|
-
"arithmetic-type of StructType and ArrayType is not defined."
|
6077
|
+
lhs # NOTREACHED
|
6144
6078
|
end
|
6145
6079
|
|
6146
6080
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
6147
6081
|
# NOTE: An arithmetic operation with ArrayType must not be executed!
|
6148
|
-
#
|
6149
|
-
# raises a runtime error.
|
6150
|
-
raise TypeError,
|
6151
|
-
"arithmetic-type of UnionType and ArrayType is not defined."
|
6082
|
+
lhs # NOTREACHED
|
6152
6083
|
end
|
6153
6084
|
|
6154
6085
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -6716,19 +6647,13 @@ module C #:nodoc:
|
|
6716
6647
|
def _arithmetic_type_with_struct(lhs, rhs = self)
|
6717
6648
|
# NOTE: An arithmetic operation with CompositeDataType must not be
|
6718
6649
|
# executed!
|
6719
|
-
#
|
6720
|
-
# runtime error.
|
6721
|
-
raise TypeError,
|
6722
|
-
"arithmetic-type of StructType and CompositeDataType is not defined."
|
6650
|
+
lhs # NOTREACHED
|
6723
6651
|
end
|
6724
6652
|
|
6725
6653
|
def _arithmetic_type_with_union(lhs, rhs = self)
|
6726
6654
|
# NOTE: An arithmetic operation with CompositeDataType must not be
|
6727
6655
|
# executed!
|
6728
|
-
#
|
6729
|
-
# runtime error.
|
6730
|
-
raise TypeError,
|
6731
|
-
"arithmetic-type of UnionType and CompositeDataType is not defined."
|
6656
|
+
lhs # NOTREACHED
|
6732
6657
|
end
|
6733
6658
|
|
6734
6659
|
def _arithmetic_type_with_extended_big_int(lhs, rhs = self)
|
@@ -6995,6 +6920,7 @@ module C #:nodoc:
|
|
6995
6920
|
@declaration_or_definition = declaration_or_definition
|
6996
6921
|
end
|
6997
6922
|
|
6923
|
+
attr_reader :type
|
6998
6924
|
attr_reader :param_name
|
6999
6925
|
|
7000
6926
|
extend Forwardable
|
@@ -7771,5 +7697,146 @@ module C #:nodoc:
|
|
7771
7697
|
end
|
7772
7698
|
end
|
7773
7699
|
|
7700
|
+
class TypeVisitor
|
7701
|
+
def visit_undeclared_type(type)
|
7702
|
+
end
|
7703
|
+
|
7704
|
+
def visit_unresolved_type(type)
|
7705
|
+
end
|
7706
|
+
|
7707
|
+
def visit_qualified_type(type)
|
7708
|
+
type.base_type.accept(self)
|
7709
|
+
end
|
7710
|
+
|
7711
|
+
def visit_void_type(type)
|
7712
|
+
end
|
7713
|
+
|
7714
|
+
def visit_function_type(type)
|
7715
|
+
type.return_type.accept(self)
|
7716
|
+
type.parameter_types.each { |ptype| ptype.accept(self) }
|
7717
|
+
end
|
7718
|
+
|
7719
|
+
def visit_char_type(type)
|
7720
|
+
end
|
7721
|
+
|
7722
|
+
def visit_signed_char_type(type)
|
7723
|
+
end
|
7724
|
+
|
7725
|
+
def visit_unsigned_char_type(type)
|
7726
|
+
end
|
7727
|
+
|
7728
|
+
def visit_short_type(type)
|
7729
|
+
end
|
7730
|
+
|
7731
|
+
def visit_signed_short_type(type)
|
7732
|
+
end
|
7733
|
+
|
7734
|
+
def visit_unsigned_short_type(type)
|
7735
|
+
end
|
7736
|
+
|
7737
|
+
def visit_short_int_type(type)
|
7738
|
+
end
|
7739
|
+
|
7740
|
+
def visit_signed_short_int_type(type)
|
7741
|
+
end
|
7742
|
+
|
7743
|
+
def visit_unsigned_short_int_type(type)
|
7744
|
+
end
|
7745
|
+
|
7746
|
+
def visit_int_type(type)
|
7747
|
+
end
|
7748
|
+
|
7749
|
+
def visit_signed_type(type)
|
7750
|
+
end
|
7751
|
+
|
7752
|
+
def visit_signed_int_type(type)
|
7753
|
+
end
|
7754
|
+
|
7755
|
+
def visit_unsigned_type(type)
|
7756
|
+
end
|
7757
|
+
|
7758
|
+
def visit_unsigned_int_type(type)
|
7759
|
+
end
|
7760
|
+
|
7761
|
+
def visit_long_type(type)
|
7762
|
+
end
|
7763
|
+
|
7764
|
+
def visit_signed_long_type(type)
|
7765
|
+
end
|
7766
|
+
|
7767
|
+
def visit_unsigned_long_type(type)
|
7768
|
+
end
|
7769
|
+
|
7770
|
+
def visit_long_int_type(type)
|
7771
|
+
end
|
7772
|
+
|
7773
|
+
def visit_signed_long_int_type(type)
|
7774
|
+
end
|
7775
|
+
|
7776
|
+
def visit_unsigned_long_int_type(type)
|
7777
|
+
end
|
7778
|
+
|
7779
|
+
def visit_long_long_type(type)
|
7780
|
+
end
|
7781
|
+
|
7782
|
+
def visit_signed_long_long_type(type)
|
7783
|
+
end
|
7784
|
+
|
7785
|
+
def visit_unsigned_long_long_type(type)
|
7786
|
+
end
|
7787
|
+
|
7788
|
+
def visit_long_long_int_type(type)
|
7789
|
+
end
|
7790
|
+
|
7791
|
+
def visit_signed_long_long_int_type(type)
|
7792
|
+
end
|
7793
|
+
|
7794
|
+
def visit_unsigned_long_long_int_type(type)
|
7795
|
+
end
|
7796
|
+
|
7797
|
+
def visit_extended_big_int_type(type)
|
7798
|
+
end
|
7799
|
+
|
7800
|
+
def visit_bitfield_type(type)
|
7801
|
+
type.base_type.accept(self)
|
7802
|
+
end
|
7803
|
+
|
7804
|
+
def visit_enum_type(type)
|
7805
|
+
end
|
7806
|
+
|
7807
|
+
def visit_pointer_type(type)
|
7808
|
+
type.base_type.accept(self)
|
7809
|
+
end
|
7810
|
+
|
7811
|
+
def visit_float_type(type)
|
7812
|
+
end
|
7813
|
+
|
7814
|
+
def visit_double_type(type)
|
7815
|
+
end
|
7816
|
+
|
7817
|
+
def visit_long_double_type(type)
|
7818
|
+
end
|
7819
|
+
|
7820
|
+
def visit_array_type(type)
|
7821
|
+
type.base_type.accept(self)
|
7822
|
+
end
|
7823
|
+
|
7824
|
+
def visit_struct_type(type)
|
7825
|
+
type.members.each { |memb| memb.type.accept(self) }
|
7826
|
+
end
|
7827
|
+
|
7828
|
+
def visit_union_type(type)
|
7829
|
+
type.members.each { |memb| memb.type.accept(self) }
|
7830
|
+
end
|
7831
|
+
|
7832
|
+
def visit_user_type(type)
|
7833
|
+
type.real_type.accept(self)
|
7834
|
+
end
|
7835
|
+
|
7836
|
+
def visit_parameter_type(type)
|
7837
|
+
type.type.accept(self)
|
7838
|
+
end
|
7839
|
+
end
|
7840
|
+
|
7774
7841
|
end
|
7775
7842
|
end
|