adlint 1.10.0 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +197 -4
- data/MANIFEST +17 -0
- data/NEWS +23 -4
- data/etc/mesg.d/en_US/messages.yml +14 -1
- data/etc/mesg.d/ja_JP/messages.yml +14 -1
- data/features/message_detection/W0093.feature +87 -0
- data/features/message_detection/W0687.feature +25 -0
- data/features/message_detection/W0688.feature +63 -0
- data/features/message_detection/W0689.feature +46 -0
- data/features/message_detection/W0690.feature +35 -0
- data/features/message_detection/W0698.feature +3 -2
- data/features/message_detection/W0703.feature +1 -0
- data/features/message_detection/W0723.feature +34 -0
- data/features/message_detection/W0732.feature +158 -0
- data/features/message_detection/W0733.feature +158 -0
- data/features/message_detection/W0734.feature +322 -0
- data/features/message_detection/W0735.feature +322 -0
- data/features/message_detection/W1052.feature +66 -0
- data/features/message_detection/W9001.feature +33 -0
- data/features/message_detection/W9003.feature +131 -0
- data/lib/adlint/c/ctrlexpr.rb +51 -50
- data/lib/adlint/c/domain.rb +237 -223
- data/lib/adlint/c/expr.rb +6 -8
- data/lib/adlint/c/interp.rb +8 -11
- data/lib/adlint/c/message.rb +20 -0
- data/lib/adlint/c/message_shima.rb +63 -0
- data/lib/adlint/c/object.rb +5 -4
- data/lib/adlint/c/operator.rb +99 -0
- data/lib/adlint/c/parser.rb +2 -2
- data/lib/adlint/c/parser.y +2 -2
- data/lib/adlint/c/phase.rb +6 -1
- data/lib/adlint/c/syntax.rb +442 -30
- data/lib/adlint/c/type.rb +449 -363
- data/lib/adlint/c/value.rb +96 -25
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/prelude.rb +16 -18
- data/lib/adlint/version.rb +2 -2
- data/share/doc/developers_guide_ja.html +11 -5
- data/share/doc/developers_guide_ja.texi +9 -3
- data/share/doc/users_guide_en.html +697 -131
- data/share/doc/users_guide_en.texi +491 -41
- data/share/doc/users_guide_ja.html +709 -139
- data/share/doc/users_guide_ja.texi +499 -45
- data/spec/adlint/c/ctrlexpr_spec.rb +168 -0
- data/spec/adlint/c/domain_spec.rb +835 -0
- data/spec/adlint/c/operator_spec.rb +406 -0
- data/spec/adlint/c/syntax_spec.rb +717 -0
- data/spec/adlint/c/type_spec.rb +55 -30
- metadata +19 -2
data/lib/adlint/c/syntax.rb
CHANGED
@@ -428,16 +428,24 @@ module C #:nodoc:
|
|
428
428
|
}
|
429
429
|
end
|
430
430
|
|
431
|
+
def logical?
|
432
|
+
subclass_responsibility
|
433
|
+
end
|
434
|
+
|
435
|
+
def arithmetic?
|
436
|
+
subclass_responsibility
|
437
|
+
end
|
438
|
+
|
439
|
+
def bitwise?
|
440
|
+
subclass_responsibility
|
441
|
+
end
|
442
|
+
|
431
443
|
def object_specifiers
|
432
444
|
ObjectSpecifierCollector.new.tap { |collector|
|
433
445
|
self.accept(collector)
|
434
446
|
}.object_specifiers
|
435
447
|
end
|
436
448
|
|
437
|
-
def logical?
|
438
|
-
subclass_responsibility
|
439
|
-
end
|
440
|
-
|
441
449
|
def to_s
|
442
450
|
subclass_responsibility
|
443
451
|
end
|
@@ -461,6 +469,14 @@ module C #:nodoc:
|
|
461
469
|
false
|
462
470
|
end
|
463
471
|
|
472
|
+
def arithmetic?
|
473
|
+
false
|
474
|
+
end
|
475
|
+
|
476
|
+
def bitwise?
|
477
|
+
false
|
478
|
+
end
|
479
|
+
|
464
480
|
def to_s
|
465
481
|
@error_token.value
|
466
482
|
end
|
@@ -471,15 +487,7 @@ module C #:nodoc:
|
|
471
487
|
end
|
472
488
|
end
|
473
489
|
|
474
|
-
class PrimaryExpression < Expression
|
475
|
-
def have_side_effect?
|
476
|
-
false
|
477
|
-
end
|
478
|
-
|
479
|
-
def logical?
|
480
|
-
false
|
481
|
-
end
|
482
|
-
end
|
490
|
+
class PrimaryExpression < Expression; end
|
483
491
|
|
484
492
|
class ObjectSpecifier < PrimaryExpression
|
485
493
|
def initialize(identifier)
|
@@ -493,10 +501,22 @@ module C #:nodoc:
|
|
493
501
|
@identifier.location
|
494
502
|
end
|
495
503
|
|
504
|
+
def have_side_effect?
|
505
|
+
false
|
506
|
+
end
|
507
|
+
|
496
508
|
def logical?
|
497
509
|
false
|
498
510
|
end
|
499
511
|
|
512
|
+
def arithmetic?
|
513
|
+
false
|
514
|
+
end
|
515
|
+
|
516
|
+
def bitwise?
|
517
|
+
false
|
518
|
+
end
|
519
|
+
|
500
520
|
def to_s
|
501
521
|
@identifier.value
|
502
522
|
end
|
@@ -531,10 +551,22 @@ module C #:nodoc:
|
|
531
551
|
@constant.value =~ /'.*'/
|
532
552
|
end
|
533
553
|
|
554
|
+
def have_side_effect?
|
555
|
+
false
|
556
|
+
end
|
557
|
+
|
534
558
|
def logical?
|
535
559
|
false
|
536
560
|
end
|
537
561
|
|
562
|
+
def arithmetic?
|
563
|
+
false
|
564
|
+
end
|
565
|
+
|
566
|
+
def bitwise?
|
567
|
+
false
|
568
|
+
end
|
569
|
+
|
538
570
|
def to_s
|
539
571
|
@constant.value
|
540
572
|
end
|
@@ -561,10 +593,22 @@ module C #:nodoc:
|
|
561
593
|
@literal.value.scan(/\AL/i).first
|
562
594
|
end
|
563
595
|
|
596
|
+
def have_side_effect?
|
597
|
+
false
|
598
|
+
end
|
599
|
+
|
564
600
|
def logical?
|
565
601
|
false
|
566
602
|
end
|
567
603
|
|
604
|
+
def arithmetic?
|
605
|
+
false
|
606
|
+
end
|
607
|
+
|
608
|
+
def bitwise?
|
609
|
+
false
|
610
|
+
end
|
611
|
+
|
568
612
|
def to_s
|
569
613
|
@literal.value
|
570
614
|
end
|
@@ -587,10 +631,22 @@ module C #:nodoc:
|
|
587
631
|
@token.location
|
588
632
|
end
|
589
633
|
|
634
|
+
def have_side_effect?
|
635
|
+
false
|
636
|
+
end
|
637
|
+
|
590
638
|
def logical?
|
591
639
|
false
|
592
640
|
end
|
593
641
|
|
642
|
+
def arithmetic?
|
643
|
+
false
|
644
|
+
end
|
645
|
+
|
646
|
+
def bitwise?
|
647
|
+
false
|
648
|
+
end
|
649
|
+
|
594
650
|
def to_s
|
595
651
|
@token.value
|
596
652
|
end
|
@@ -621,6 +677,14 @@ module C #:nodoc:
|
|
621
677
|
@expression.logical?
|
622
678
|
end
|
623
679
|
|
680
|
+
def arithmetic?
|
681
|
+
@expression.arithmetic?
|
682
|
+
end
|
683
|
+
|
684
|
+
def bitwise?
|
685
|
+
@expression.bitwise?
|
686
|
+
end
|
687
|
+
|
624
688
|
def to_s
|
625
689
|
"(#{expression.to_s})"
|
626
690
|
end
|
@@ -641,10 +705,6 @@ module C #:nodoc:
|
|
641
705
|
def location
|
642
706
|
@operator.location
|
643
707
|
end
|
644
|
-
|
645
|
-
def logical?
|
646
|
-
false
|
647
|
-
end
|
648
708
|
end
|
649
709
|
|
650
710
|
class ArraySubscriptExpression < PostfixExpression
|
@@ -661,6 +721,18 @@ module C #:nodoc:
|
|
661
721
|
@expression.have_side_effect? || @array_subscript.have_side_effect?
|
662
722
|
end
|
663
723
|
|
724
|
+
def logical?
|
725
|
+
false
|
726
|
+
end
|
727
|
+
|
728
|
+
def arithmetic?
|
729
|
+
false
|
730
|
+
end
|
731
|
+
|
732
|
+
def bitwise?
|
733
|
+
false
|
734
|
+
end
|
735
|
+
|
664
736
|
def to_s
|
665
737
|
"#{@expression.to_s}[#{@array_subscript.to_s}]"
|
666
738
|
end
|
@@ -686,6 +758,18 @@ module C #:nodoc:
|
|
686
758
|
true
|
687
759
|
end
|
688
760
|
|
761
|
+
def logical?
|
762
|
+
false
|
763
|
+
end
|
764
|
+
|
765
|
+
def arithmetic?
|
766
|
+
false
|
767
|
+
end
|
768
|
+
|
769
|
+
def bitwise?
|
770
|
+
false
|
771
|
+
end
|
772
|
+
|
689
773
|
def to_s
|
690
774
|
"#{@expression.to_s}(" +
|
691
775
|
@argument_expressions.map { |expr| expr.to_s }.join(",") + ")"
|
@@ -712,6 +796,18 @@ module C #:nodoc:
|
|
712
796
|
@expression.have_side_effect?
|
713
797
|
end
|
714
798
|
|
799
|
+
def logical?
|
800
|
+
false
|
801
|
+
end
|
802
|
+
|
803
|
+
def arithmetic?
|
804
|
+
false
|
805
|
+
end
|
806
|
+
|
807
|
+
def bitwise?
|
808
|
+
false
|
809
|
+
end
|
810
|
+
|
715
811
|
def to_s
|
716
812
|
"#{@expression.to_s}.#{@identifier.value}"
|
717
813
|
end
|
@@ -736,6 +832,18 @@ module C #:nodoc:
|
|
736
832
|
@expression.have_side_effect?
|
737
833
|
end
|
738
834
|
|
835
|
+
def logical?
|
836
|
+
false
|
837
|
+
end
|
838
|
+
|
839
|
+
def arithmetic?
|
840
|
+
false
|
841
|
+
end
|
842
|
+
|
843
|
+
def bitwise?
|
844
|
+
false
|
845
|
+
end
|
846
|
+
|
739
847
|
def to_s
|
740
848
|
"#{@expression.to_s}->#{@identifier.value}"
|
741
849
|
end
|
@@ -760,6 +868,18 @@ module C #:nodoc:
|
|
760
868
|
@expression.have_side_effect?
|
761
869
|
end
|
762
870
|
|
871
|
+
def logical?
|
872
|
+
false
|
873
|
+
end
|
874
|
+
|
875
|
+
def arithmetic?
|
876
|
+
false
|
877
|
+
end
|
878
|
+
|
879
|
+
def bitwise?
|
880
|
+
false
|
881
|
+
end
|
882
|
+
|
763
883
|
def to_s
|
764
884
|
"#{@expression.to_s}.#{@constant.value}"
|
765
885
|
end
|
@@ -784,6 +904,18 @@ module C #:nodoc:
|
|
784
904
|
@expression.have_side_effect?
|
785
905
|
end
|
786
906
|
|
907
|
+
def logical?
|
908
|
+
false
|
909
|
+
end
|
910
|
+
|
911
|
+
def arithmetic?
|
912
|
+
false
|
913
|
+
end
|
914
|
+
|
915
|
+
def bitwise?
|
916
|
+
false
|
917
|
+
end
|
918
|
+
|
787
919
|
def to_s
|
788
920
|
"#{@expression.to_s}->#{@constant.value}"
|
789
921
|
end
|
@@ -795,7 +927,7 @@ module C #:nodoc:
|
|
795
927
|
end
|
796
928
|
|
797
929
|
class PostfixIncrementExpression < PostfixExpression
|
798
|
-
def initialize(
|
930
|
+
def initialize(operator, operand)
|
799
931
|
super(operator)
|
800
932
|
@operand = operand
|
801
933
|
end
|
@@ -806,6 +938,18 @@ module C #:nodoc:
|
|
806
938
|
true
|
807
939
|
end
|
808
940
|
|
941
|
+
def logical?
|
942
|
+
false
|
943
|
+
end
|
944
|
+
|
945
|
+
def arithmetic?
|
946
|
+
true
|
947
|
+
end
|
948
|
+
|
949
|
+
def bitwise?
|
950
|
+
false
|
951
|
+
end
|
952
|
+
|
809
953
|
def to_s
|
810
954
|
"#{@operand.to_s}++"
|
811
955
|
end
|
@@ -817,7 +961,7 @@ module C #:nodoc:
|
|
817
961
|
end
|
818
962
|
|
819
963
|
class PostfixDecrementExpression < PostfixExpression
|
820
|
-
def initialize(
|
964
|
+
def initialize(operator, operand)
|
821
965
|
super(operator)
|
822
966
|
@operand = operand
|
823
967
|
end
|
@@ -828,6 +972,18 @@ module C #:nodoc:
|
|
828
972
|
true
|
829
973
|
end
|
830
974
|
|
975
|
+
def logical?
|
976
|
+
false
|
977
|
+
end
|
978
|
+
|
979
|
+
def arithmetic?
|
980
|
+
true
|
981
|
+
end
|
982
|
+
|
983
|
+
def bitwise?
|
984
|
+
false
|
985
|
+
end
|
986
|
+
|
831
987
|
def to_s
|
832
988
|
"#{@operand.to_s}--"
|
833
989
|
end
|
@@ -852,6 +1008,18 @@ module C #:nodoc:
|
|
852
1008
|
false
|
853
1009
|
end
|
854
1010
|
|
1011
|
+
def logical?
|
1012
|
+
false
|
1013
|
+
end
|
1014
|
+
|
1015
|
+
def arithmetic?
|
1016
|
+
false
|
1017
|
+
end
|
1018
|
+
|
1019
|
+
def bitwise?
|
1020
|
+
false
|
1021
|
+
end
|
1022
|
+
|
855
1023
|
def to_s
|
856
1024
|
"(#{@type_name.to_s}){" +
|
857
1025
|
@initializers.map { |ini| ini.to_s }.join(",") + "}"
|
@@ -877,10 +1045,6 @@ module C #:nodoc:
|
|
877
1045
|
@operator.location
|
878
1046
|
end
|
879
1047
|
|
880
|
-
def have_side_effect?
|
881
|
-
@operand.have_side_effect?
|
882
|
-
end
|
883
|
-
|
884
1048
|
def to_s
|
885
1049
|
@operator.value + @operand.to_s
|
886
1050
|
end
|
@@ -899,6 +1063,14 @@ module C #:nodoc:
|
|
899
1063
|
def logical?
|
900
1064
|
false
|
901
1065
|
end
|
1066
|
+
|
1067
|
+
def arithmetic?
|
1068
|
+
true
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
def bitwise?
|
1072
|
+
false
|
1073
|
+
end
|
902
1074
|
end
|
903
1075
|
|
904
1076
|
class PrefixDecrementExpression < UnaryExpression
|
@@ -909,31 +1081,87 @@ module C #:nodoc:
|
|
909
1081
|
def logical?
|
910
1082
|
false
|
911
1083
|
end
|
1084
|
+
|
1085
|
+
def arithmetic?
|
1086
|
+
true
|
1087
|
+
end
|
1088
|
+
|
1089
|
+
def bitwise?
|
1090
|
+
false
|
1091
|
+
end
|
912
1092
|
end
|
913
1093
|
|
914
1094
|
class AddressExpression < UnaryExpression
|
1095
|
+
def have_side_effect?
|
1096
|
+
operand.have_side_effect?
|
1097
|
+
end
|
1098
|
+
|
915
1099
|
def logical?
|
916
1100
|
false
|
917
1101
|
end
|
1102
|
+
|
1103
|
+
def arithmetic?
|
1104
|
+
false
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
def bitwise?
|
1108
|
+
false
|
1109
|
+
end
|
918
1110
|
end
|
919
1111
|
|
920
1112
|
class IndirectionExpression < UnaryExpression
|
1113
|
+
def have_side_effect?
|
1114
|
+
operand.have_side_effect?
|
1115
|
+
end
|
1116
|
+
|
921
1117
|
def logical?
|
922
1118
|
false
|
923
1119
|
end
|
1120
|
+
|
1121
|
+
def arithmetic?
|
1122
|
+
false
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
def bitwise?
|
1126
|
+
false
|
1127
|
+
end
|
924
1128
|
end
|
925
1129
|
|
926
1130
|
class UnaryArithmeticExpression < UnaryExpression
|
1131
|
+
def have_side_effect?
|
1132
|
+
operand.have_side_effect?
|
1133
|
+
end
|
1134
|
+
|
927
1135
|
def logical?
|
928
|
-
|
1136
|
+
operator.type == "!"
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
def arithmetic?
|
1140
|
+
false
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
def bitwise?
|
1144
|
+
operator.type == "~"
|
929
1145
|
end
|
930
1146
|
end
|
931
1147
|
|
932
1148
|
class SizeofExpression < UnaryExpression
|
1149
|
+
def have_side_effect?
|
1150
|
+
false
|
1151
|
+
end
|
1152
|
+
|
933
1153
|
def logical?
|
934
1154
|
false
|
935
1155
|
end
|
936
1156
|
|
1157
|
+
def arithmetic?
|
1158
|
+
false
|
1159
|
+
end
|
1160
|
+
|
1161
|
+
def bitwise?
|
1162
|
+
false
|
1163
|
+
end
|
1164
|
+
|
937
1165
|
def to_s
|
938
1166
|
"sizeof(#{@operand.to_s})"
|
939
1167
|
end
|
@@ -948,16 +1176,36 @@ module C #:nodoc:
|
|
948
1176
|
false
|
949
1177
|
end
|
950
1178
|
|
1179
|
+
def arithmetic?
|
1180
|
+
false
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
def bitwise?
|
1184
|
+
false
|
1185
|
+
end
|
1186
|
+
|
951
1187
|
def to_s
|
952
1188
|
"sizeof(#{@operand.to_s})"
|
953
1189
|
end
|
954
1190
|
end
|
955
1191
|
|
956
1192
|
class AlignofExpression < UnaryExpression
|
1193
|
+
def have_side_effect?
|
1194
|
+
false
|
1195
|
+
end
|
1196
|
+
|
957
1197
|
def logical?
|
958
1198
|
false
|
959
1199
|
end
|
960
1200
|
|
1201
|
+
def arithmetic?
|
1202
|
+
false
|
1203
|
+
end
|
1204
|
+
|
1205
|
+
def bitwise?
|
1206
|
+
false
|
1207
|
+
end
|
1208
|
+
|
961
1209
|
def to_s
|
962
1210
|
"alignof(#{@operand.to_s})"
|
963
1211
|
end
|
@@ -972,6 +1220,14 @@ module C #:nodoc:
|
|
972
1220
|
false
|
973
1221
|
end
|
974
1222
|
|
1223
|
+
def arithmetic?
|
1224
|
+
false
|
1225
|
+
end
|
1226
|
+
|
1227
|
+
def bitwise?
|
1228
|
+
false
|
1229
|
+
end
|
1230
|
+
|
975
1231
|
def to_s
|
976
1232
|
"alignof(#{@operand.to_s})"
|
977
1233
|
end
|
@@ -996,7 +1252,15 @@ module C #:nodoc:
|
|
996
1252
|
end
|
997
1253
|
|
998
1254
|
def logical?
|
999
|
-
|
1255
|
+
@operand.logical?
|
1256
|
+
end
|
1257
|
+
|
1258
|
+
def arithmetic?
|
1259
|
+
@operand.arithmetic?
|
1260
|
+
end
|
1261
|
+
|
1262
|
+
def bitwise?
|
1263
|
+
@operand.bitwise?
|
1000
1264
|
end
|
1001
1265
|
|
1002
1266
|
def to_s
|
@@ -1025,10 +1289,6 @@ module C #:nodoc:
|
|
1025
1289
|
@operator.location
|
1026
1290
|
end
|
1027
1291
|
|
1028
|
-
def have_side_effect?
|
1029
|
-
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1030
|
-
end
|
1031
|
-
|
1032
1292
|
def to_s
|
1033
1293
|
"#{@lhs_operand.to_s} #{@operator.value} #{@rhs_operand.to_s}"
|
1034
1294
|
end
|
@@ -1040,51 +1300,147 @@ module C #:nodoc:
|
|
1040
1300
|
end
|
1041
1301
|
|
1042
1302
|
class MultiplicativeExpression < BinaryExpression
|
1303
|
+
def have_side_effect?
|
1304
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1305
|
+
end
|
1306
|
+
|
1043
1307
|
def logical?
|
1044
1308
|
false
|
1045
1309
|
end
|
1310
|
+
|
1311
|
+
def arithmetic?
|
1312
|
+
true
|
1313
|
+
end
|
1314
|
+
|
1315
|
+
def bitwise?
|
1316
|
+
false
|
1317
|
+
end
|
1046
1318
|
end
|
1047
1319
|
|
1048
1320
|
class AdditiveExpression < BinaryExpression
|
1321
|
+
def have_side_effect?
|
1322
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1323
|
+
end
|
1324
|
+
|
1049
1325
|
def logical?
|
1050
1326
|
false
|
1051
1327
|
end
|
1328
|
+
|
1329
|
+
def arithmetic?
|
1330
|
+
true
|
1331
|
+
end
|
1332
|
+
|
1333
|
+
def bitwise?
|
1334
|
+
false
|
1335
|
+
end
|
1052
1336
|
end
|
1053
1337
|
|
1054
1338
|
class ShiftExpression < BinaryExpression
|
1339
|
+
def have_side_effect?
|
1340
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1341
|
+
end
|
1342
|
+
|
1055
1343
|
def logical?
|
1056
1344
|
false
|
1057
1345
|
end
|
1346
|
+
|
1347
|
+
def arithmetic?
|
1348
|
+
false
|
1349
|
+
end
|
1350
|
+
|
1351
|
+
def bitwise?
|
1352
|
+
true
|
1353
|
+
end
|
1058
1354
|
end
|
1059
1355
|
|
1060
1356
|
class RelationalExpression < BinaryExpression
|
1357
|
+
def have_side_effect?
|
1358
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1359
|
+
end
|
1360
|
+
|
1061
1361
|
def logical?
|
1062
1362
|
true
|
1063
1363
|
end
|
1364
|
+
|
1365
|
+
def arithmetic?
|
1366
|
+
false
|
1367
|
+
end
|
1368
|
+
|
1369
|
+
def bitwise?
|
1370
|
+
false
|
1371
|
+
end
|
1064
1372
|
end
|
1065
1373
|
|
1066
1374
|
class EqualityExpression < BinaryExpression
|
1375
|
+
def have_side_effect?
|
1376
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1377
|
+
end
|
1378
|
+
|
1067
1379
|
def logical?
|
1068
1380
|
true
|
1069
1381
|
end
|
1382
|
+
|
1383
|
+
def arithmetic?
|
1384
|
+
false
|
1385
|
+
end
|
1386
|
+
|
1387
|
+
def bitwise?
|
1388
|
+
false
|
1389
|
+
end
|
1070
1390
|
end
|
1071
1391
|
|
1072
1392
|
class AndExpression < BinaryExpression
|
1393
|
+
def have_side_effect?
|
1394
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1395
|
+
end
|
1396
|
+
|
1073
1397
|
def logical?
|
1074
1398
|
false
|
1075
1399
|
end
|
1400
|
+
|
1401
|
+
def arithmetic?
|
1402
|
+
false
|
1403
|
+
end
|
1404
|
+
|
1405
|
+
def bitwise?
|
1406
|
+
true
|
1407
|
+
end
|
1076
1408
|
end
|
1077
1409
|
|
1078
1410
|
class ExclusiveOrExpression < BinaryExpression
|
1411
|
+
def have_side_effect?
|
1412
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1413
|
+
end
|
1414
|
+
|
1079
1415
|
def logical?
|
1080
1416
|
false
|
1081
1417
|
end
|
1418
|
+
|
1419
|
+
def arithmetic?
|
1420
|
+
false
|
1421
|
+
end
|
1422
|
+
|
1423
|
+
def bitwise?
|
1424
|
+
true
|
1425
|
+
end
|
1082
1426
|
end
|
1083
1427
|
|
1084
1428
|
class InclusiveOrExpression < BinaryExpression
|
1429
|
+
def have_side_effect?
|
1430
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1431
|
+
end
|
1432
|
+
|
1085
1433
|
def logical?
|
1086
1434
|
false
|
1087
1435
|
end
|
1436
|
+
|
1437
|
+
def arithmetic?
|
1438
|
+
false
|
1439
|
+
end
|
1440
|
+
|
1441
|
+
def bitwise?
|
1442
|
+
true
|
1443
|
+
end
|
1088
1444
|
end
|
1089
1445
|
|
1090
1446
|
class LogicalAndExpression < BinaryExpression
|
@@ -1104,9 +1460,21 @@ module C #:nodoc:
|
|
1104
1460
|
@lhs_operand.append_sequence_point!
|
1105
1461
|
end
|
1106
1462
|
|
1463
|
+
def have_side_effect?
|
1464
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1465
|
+
end
|
1466
|
+
|
1107
1467
|
def logical?
|
1108
1468
|
true
|
1109
1469
|
end
|
1470
|
+
|
1471
|
+
def arithmetic?
|
1472
|
+
false
|
1473
|
+
end
|
1474
|
+
|
1475
|
+
def bitwise?
|
1476
|
+
false
|
1477
|
+
end
|
1110
1478
|
end
|
1111
1479
|
|
1112
1480
|
class LogicalOrExpression < BinaryExpression
|
@@ -1126,9 +1494,21 @@ module C #:nodoc:
|
|
1126
1494
|
@lhs_operand.append_sequence_point!
|
1127
1495
|
end
|
1128
1496
|
|
1497
|
+
def have_side_effect?
|
1498
|
+
lhs_operand.have_side_effect? || rhs_operand.have_side_effect?
|
1499
|
+
end
|
1500
|
+
|
1129
1501
|
def logical?
|
1130
1502
|
true
|
1131
1503
|
end
|
1504
|
+
|
1505
|
+
def arithmetic?
|
1506
|
+
false
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
def bitwise?
|
1510
|
+
false
|
1511
|
+
end
|
1132
1512
|
end
|
1133
1513
|
|
1134
1514
|
class ConditionalExpression < Expression
|
@@ -1174,6 +1554,14 @@ module C #:nodoc:
|
|
1174
1554
|
@then_expression.logical? || @else_expression.logical?
|
1175
1555
|
end
|
1176
1556
|
|
1557
|
+
def arithmetic?
|
1558
|
+
@then_expression.arithmetic? || @else_expression.arithmetic?
|
1559
|
+
end
|
1560
|
+
|
1561
|
+
def bitwise?
|
1562
|
+
@then_expression.bitwise? || @else_expression.bitwise?
|
1563
|
+
end
|
1564
|
+
|
1177
1565
|
def to_s
|
1178
1566
|
"#{@condition.to_s} ? " +
|
1179
1567
|
"#{@then_expression.to_s} : #{@else_expression.to_s}"
|
@@ -1193,7 +1581,15 @@ module C #:nodoc:
|
|
1193
1581
|
end
|
1194
1582
|
|
1195
1583
|
def logical?
|
1196
|
-
|
1584
|
+
rhs_operand.logical?
|
1585
|
+
end
|
1586
|
+
|
1587
|
+
def arithmetic?
|
1588
|
+
rhs_operand.arithmetic?
|
1589
|
+
end
|
1590
|
+
|
1591
|
+
def bitwise?
|
1592
|
+
rhs_operand.bitwise?
|
1197
1593
|
end
|
1198
1594
|
end
|
1199
1595
|
|
@@ -1205,6 +1601,14 @@ module C #:nodoc:
|
|
1205
1601
|
def logical?
|
1206
1602
|
false
|
1207
1603
|
end
|
1604
|
+
|
1605
|
+
def arithmetic?
|
1606
|
+
["*=", "/=", "%=", "+=", "-="].include?(operator.type)
|
1607
|
+
end
|
1608
|
+
|
1609
|
+
def bitwise?
|
1610
|
+
["<<=", ">>=", "&=", "^=", "|="].include?(operator.type)
|
1611
|
+
end
|
1208
1612
|
end
|
1209
1613
|
|
1210
1614
|
class CommaSeparatedExpression < Expression
|
@@ -1228,6 +1632,14 @@ module C #:nodoc:
|
|
1228
1632
|
@expressions.last.logical?
|
1229
1633
|
end
|
1230
1634
|
|
1635
|
+
def arithmetic?
|
1636
|
+
@expressions.last.arithmetic?
|
1637
|
+
end
|
1638
|
+
|
1639
|
+
def bitwise?
|
1640
|
+
@expressions.last.bitwise?
|
1641
|
+
end
|
1642
|
+
|
1231
1643
|
def to_s
|
1232
1644
|
@expressions.map { |expr| expr.to_s }.join(",")
|
1233
1645
|
end
|