adlint 1.10.0 → 1.12.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 +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
|