cast 0.1.0 → 0.2.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.
@@ -1,19 +1,15 @@
1
- ###
2
- ### ##################################################################
3
- ###
4
- ### All those Node classes.
5
- ###
6
- ### ##################################################################
7
- ###
1
+ ######################################################################
2
+ #
3
+ # All those Node classes.
4
+ #
5
+ ######################################################################
8
6
 
9
7
  module C
10
- ###
11
- ### ==================================================================
12
- ###
13
- ### Class declarations
14
- ###
15
- ### ==================================================================
16
- ###
8
+
9
+ # ------------------------------------------------------------------
10
+ # Class declarations
11
+ # ------------------------------------------------------------------
12
+
17
13
  class Statement < Node ; abstract; end
18
14
  class Label < Node ; abstract; end
19
15
  class Expression < Node ; abstract; end
@@ -55,6 +51,7 @@ module C
55
51
  class Comma < Expression ; end
56
52
  class Conditional < Expression ; end
57
53
  class Variable < Expression ; end
54
+ class BlockExpression < Expression ; end
58
55
 
59
56
  class Index < PostfixExpression ; end
60
57
  class Call < PostfixExpression ; end
@@ -128,30 +125,19 @@ module C
128
125
  class Complex < PrimitiveType ; end
129
126
  class Imaginary < PrimitiveType ; end
130
127
 
131
- ###
132
- ### ==================================================================
133
- ###
134
- ### Class implementations
135
- ###
136
- ### ==================================================================
137
- ###
138
-
139
- ###
140
- ### Node
141
- ###
128
+ # ------------------------------------------------------------------
129
+ # Class implementations
130
+ # ------------------------------------------------------------------
131
+
142
132
  class Node
143
133
  initializer
144
134
  end
145
- ###
146
- ### TranslationUnit
147
- ###
135
+
148
136
  class TranslationUnit
149
137
  child :entities, lambda{NodeChain.new}
150
138
  initializer :entities
151
139
  end
152
- ###
153
- ### Declaration
154
- ###
140
+
155
141
  class Declaration
156
142
  field :storage
157
143
  child :type
@@ -174,9 +160,7 @@ module C
174
160
  storage.equal? :register
175
161
  end
176
162
  end
177
- ###
178
- ### Declarator
179
- ###
163
+
180
164
  class Declarator
181
165
  child :indirect_type
182
166
  field :name
@@ -186,10 +170,10 @@ module C
186
170
  def declaration
187
171
  parent and parent.parent
188
172
  end
189
- ###
190
- ### Return (a copy of) the type of the variable this Declarator
191
- ### declares.
192
- ###
173
+ #
174
+ # Return (a copy of) the type of the variable this Declarator
175
+ # declares.
176
+ #
193
177
  def type
194
178
  if indirect_type
195
179
  ret = indirect_type.clone
@@ -200,9 +184,7 @@ module C
200
184
  end
201
185
  end
202
186
  end
203
- ###
204
- ### FunctionDef
205
- ###
187
+
206
188
  class FunctionDef
207
189
  field :storage
208
190
  field :inline?
@@ -217,65 +199,51 @@ module C
217
199
  def static?
218
200
  storage.equal? :static
219
201
  end
220
- def prototype= val
202
+ def prototype=(val)
221
203
  self.no_prototype = !val
222
204
  end
223
205
  def prototype?
224
206
  !no_prototype?
225
207
  end
226
208
  end
227
- ###
228
- ### Parameter
229
- ###
209
+
230
210
  class Parameter
231
211
  field :register?
232
212
  child :type
233
213
  field :name
234
214
  initializer :type, :name
235
215
  end
236
- ###
237
- ### Enumerator
238
- ###
216
+
239
217
  class Enumerator
240
218
  field :name
241
219
  child :val
242
220
  initializer :name, :val
243
221
  end
244
- ###
245
- ### MemberInit
246
- ###
222
+
247
223
  class MemberInit
248
- ## member is a _NodeList_ of:
249
- ## -- Member (for struct/union members)
250
- ## -- Expression (for array members)
224
+ # member is a _NodeList_ of:
225
+ # -- Member (for struct/union members)
226
+ # -- Expression (for array members)
251
227
  child :member
252
228
  child :init
253
229
  initializer :member, :init
254
230
  end
255
- ###
256
- ### Member
257
- ###
231
+
258
232
  class Member
259
233
  field :name
260
234
  initializer :name
261
235
  end
262
236
 
263
- ###
264
- ### ----------------------------------------------------------------
265
- ### Statements
266
- ### ----------------------------------------------------------------
237
+ # ------------------------------------------------------------------
238
+ # Statements
239
+ # ------------------------------------------------------------------
267
240
 
268
- ###
269
- ### Block
270
- ###
271
241
  class Block
272
242
  child :labels, lambda{NodeArray.new}
273
243
  child :stmts, lambda{NodeChain.new}
274
244
  initializer :stmts
275
245
  end
276
- ###
277
- ### If
278
- ###
246
+
279
247
  class If
280
248
  child :labels, lambda{NodeArray.new}
281
249
  child :cond
@@ -283,18 +251,14 @@ module C
283
251
  child :else
284
252
  initializer :cond, :then, :else
285
253
  end
286
- ###
287
- ### Switch
288
- ###
254
+
289
255
  class Switch
290
256
  child :labels, lambda{NodeArray.new}
291
257
  child :cond
292
258
  child :stmt
293
259
  initializer :cond, :stmt
294
260
  end
295
- ###
296
- ### While
297
- ###
261
+
298
262
  class While
299
263
  child :labels, lambda{NodeArray.new}
300
264
  field :do?
@@ -302,9 +266,7 @@ module C
302
266
  child :stmt
303
267
  initializer :cond, :stmt, :do?
304
268
  end
305
- ###
306
- ### For
307
- ###
269
+
308
270
  class For
309
271
  child :labels, lambda{NodeArray.new}
310
272
  child :init
@@ -313,406 +275,302 @@ module C
313
275
  child :stmt
314
276
  initializer :init, :cond, :iter, :stmt
315
277
  end
316
- ###
317
- ### Goto
318
- ###
278
+
319
279
  class Goto
320
280
  child :labels, lambda{NodeArray.new}
321
281
  field :target
322
282
  initializer :target
323
283
  end
324
- ###
325
- ### Continue
326
- ###
284
+
327
285
  class Continue
328
286
  child :labels, lambda{NodeArray.new}
329
287
  end
330
- ###
331
- ### Break
332
- ###
288
+
333
289
  class Break
334
290
  child :labels, lambda{NodeArray.new}
335
291
  end
336
- ###
337
- ### Return
338
- ###
292
+
339
293
  class Return
340
294
  child :labels, lambda{NodeArray.new}
341
295
  child :expr
342
296
  initializer :expr
343
297
  end
344
- ###
345
- ### ExpressionStatement
346
- ###
298
+
347
299
  class ExpressionStatement
348
300
  child :labels, lambda{NodeArray.new}
349
301
  child :expr
350
302
  initializer :expr
351
303
  end
352
304
 
353
- ###
354
- ### ----------------------------------------------------------------
355
- ### Labels
356
- ### ----------------------------------------------------------------
357
- ###
305
+ # ------------------------------------------------------------------
306
+ # Labels
307
+ # ------------------------------------------------------------------
358
308
 
359
- ###
360
- ### PlainLabel
361
- ###
362
309
  class PlainLabel
363
310
  field :name
364
311
  initializer :name
365
312
  end
366
313
 
367
- ###
368
- ### Default
369
- ###
370
314
  class Default
371
315
  end
372
316
 
373
- ###
374
- ### Case
375
- ###
376
317
  class Case
377
318
  child :expr
378
319
  initializer :expr
379
320
  end
380
321
 
381
- ###
382
- ### ----------------------------------------------------------------
383
- ### Expressions
384
- ### ----------------------------------------------------------------
385
- ###
322
+ # ------------------------------------------------------------------
323
+ # Expressions
324
+ # ------------------------------------------------------------------
386
325
 
387
- ###
388
- ### Comma
389
- ###
390
326
  class Comma
391
327
  child :exprs, lambda{NodeArray.new}
392
328
  initializer :exprs
393
329
  end
394
- ###
395
- ### Conditional
396
- ###
330
+
397
331
  class Conditional
398
332
  child :cond
399
333
  child :then
400
334
  child :else
401
335
  initializer :cond, :then, :else
402
336
  end
403
- ###
404
- ### Variable
405
- ###
337
+
406
338
  class Variable
407
339
  field :name
408
340
  initializer :name
409
341
  end
410
342
 
411
- ###
412
- ### ----------------------------------------------------------------
413
- ### PrefixExpressions
414
- ### ----------------------------------------------------------------
415
- ###
343
+ class BlockExpression
344
+ child :block, lambda{Block.new}
345
+ initializer :block
346
+ end
347
+
348
+ # ------------------------------------------------------------------
349
+ # PrefixExpressions
350
+ # ------------------------------------------------------------------
416
351
 
417
- ###
418
- ### Cast
419
- ###
420
352
  class Cast
421
353
  child :type
422
354
  child :expr
423
355
  initializer :type, :expr
424
356
  end
425
- ###
426
- ### Address
427
- ###
357
+
428
358
  class Address
429
359
  child :expr
430
360
  initializer :expr
431
361
  end
432
- ###
433
- ### Dereference
434
- ###
362
+
435
363
  class Dereference
436
364
  child :expr
437
365
  initializer :expr
438
366
  end
439
- ###
440
- ### Sizeof
441
- ###
367
+
442
368
  class Sizeof
443
369
  child :expr
444
370
  initializer :expr
445
371
  end
446
- ###
447
- ### Positive
448
- ###
372
+
449
373
  class Positive
450
374
  child :expr
451
375
  initializer :expr
452
376
  end
453
- ###
454
- ### Negative
455
- ###
377
+
456
378
  class Negative
457
379
  child :expr
458
380
  initializer :expr
459
381
  end
460
- ###
461
- ### PreInc
462
- ###
382
+
463
383
  class PreInc
464
384
  child :expr
465
385
  initializer :expr
466
386
  end
467
- ###
468
- ### PreDec
469
- ###
387
+
470
388
  class PreDec
471
389
  child :expr
472
390
  initializer :expr
473
391
  end
474
- ###
475
- ### BitNot
476
- ###
392
+
477
393
  class BitNot
478
394
  child :expr
479
395
  initializer :expr
480
396
  end
481
- ###
482
- ### Not
483
- ###
397
+
484
398
  class Not
485
399
  child :expr
486
400
  initializer :expr
487
401
  end
488
402
 
489
- ###
490
- ### ----------------------------------------------------------------
491
- ### PostfixExpressions
492
- ### ----------------------------------------------------------------
493
- ###
403
+ # ------------------------------------------------------------------
404
+ # PostfixExpressions
405
+ # ------------------------------------------------------------------
494
406
 
495
- ###
496
- ### Index
497
- ###
498
407
  class Index
499
408
  child :expr
500
409
  child :index
501
410
  initializer :expr, :index
502
411
  end
503
- ###
504
- ### Call
505
- ###
412
+
506
413
  class Call
507
414
  child :expr
508
415
  child :args, lambda{NodeArray.new}
509
416
  initializer :expr, :args
510
417
  end
511
- ###
512
- ### Dot
513
- ###
418
+
514
419
  class Dot
515
420
  child :expr
516
421
  child :member
517
422
  initializer :expr, :member
518
423
  end
519
- ###
520
- ### Arrow
521
- ###
424
+
522
425
  class Arrow
523
426
  child :expr
524
427
  child :member
525
428
  initializer :expr, :member
526
429
  end
527
- ###
528
- ### PostInc
529
- ###
430
+
530
431
  class PostInc
531
432
  child :expr
532
433
  initializer :expr
533
434
  end
534
- ###
535
- ### PostDec
536
- ###
435
+
537
436
  class PostDec
538
437
  child :expr
539
438
  initializer :expr
540
439
  end
541
440
 
542
- ###
543
- ### ----------------------------------------------------------------
544
- ### BinaryExpressions
545
- ### ----------------------------------------------------------------
546
- ###
441
+ # ------------------------------------------------------------------
442
+ # BinaryExpressions
443
+ # ------------------------------------------------------------------
547
444
 
548
- ###
549
- ### BinaryExpression (abstract)
550
- ###
551
445
  class BinaryExpression
552
446
  class << self
553
- ###
554
- ### The operator (a String) pertaining to the class (e.g.,
555
- ### Add.operator is '+').
556
- ###
447
+ #
448
+ # The operator (a String) pertaining to the class (e.g.,
449
+ # Add.operator is '+').
450
+ #
557
451
  attr_accessor :operator
558
452
  end
559
453
  end
560
- ###
561
- ### Add
562
- ###
454
+
563
455
  class Add
564
456
  child :expr1
565
457
  child :expr2
566
458
  initializer :expr1, :expr2
567
459
  self.operator = '+'
568
460
  end
569
- ###
570
- ### Subtract
571
- ###
461
+
572
462
  class Subtract
573
463
  child :expr1
574
464
  child :expr2
575
465
  initializer :expr1, :expr2
576
466
  self.operator = '-'
577
467
  end
578
- ###
579
- ### Multiply
580
- ###
468
+
581
469
  class Multiply
582
470
  child :expr1
583
471
  child :expr2
584
472
  initializer :expr1, :expr2
585
473
  self.operator = '*'
586
474
  end
587
- ###
588
- ### Divide
589
- ###
475
+
590
476
  class Divide
591
477
  child :expr1
592
478
  child :expr2
593
479
  initializer :expr1, :expr2
594
480
  self.operator = '/'
595
481
  end
596
- ###
597
- ### Mod
598
- ###
482
+
599
483
  class Mod
600
484
  child :expr1
601
485
  child :expr2
602
486
  initializer :expr1, :expr2
603
487
  self.operator = '%'
604
488
  end
605
- ###
606
- ### Equal
607
- ###
489
+
608
490
  class Equal
609
491
  child :expr1
610
492
  child :expr2
611
493
  initializer :expr1, :expr2
612
494
  self.operator = '=='
613
495
  end
614
- ###
615
- ### NotEqual
616
- ###
496
+
617
497
  class NotEqual
618
498
  child :expr1
619
499
  child :expr2
620
500
  initializer :expr1, :expr2
621
501
  self.operator = '!='
622
502
  end
623
- ###
624
- ### Less
625
- ###
503
+
626
504
  class Less
627
505
  child :expr1
628
506
  child :expr2
629
507
  initializer :expr1, :expr2
630
508
  self.operator = '<'
631
509
  end
632
- ###
633
- ### More
634
- ###
510
+
635
511
  class More
636
512
  child :expr1
637
513
  child :expr2
638
514
  initializer :expr1, :expr2
639
515
  self.operator = '>'
640
516
  end
641
- ###
642
- ### LessOrEqual
643
- ###
517
+
644
518
  class LessOrEqual
645
519
  child :expr1
646
520
  child :expr2
647
521
  initializer :expr1, :expr2
648
522
  self.operator = '<='
649
523
  end
650
- ###
651
- ### MoreOrEqual
652
- ###
524
+
653
525
  class MoreOrEqual
654
526
  child :expr1
655
527
  child :expr2
656
528
  initializer :expr1, :expr2
657
529
  self.operator = '>='
658
530
  end
659
- ###
660
- ### BitAnd
661
- ###
531
+
662
532
  class BitAnd
663
533
  child :expr1
664
534
  child :expr2
665
535
  initializer :expr1, :expr2
666
536
  self.operator = '&'
667
537
  end
668
- ###
669
- ### BitOr
670
- ###
538
+
671
539
  class BitOr
672
540
  child :expr1
673
541
  child :expr2
674
542
  initializer :expr1, :expr2
675
543
  self.operator = '|'
676
544
  end
677
- ###
678
- ### BitXor
679
- ###
545
+
680
546
  class BitXor
681
547
  child :expr1
682
548
  child :expr2
683
549
  initializer :expr1, :expr2
684
550
  self.operator = '^'
685
551
  end
686
- ###
687
- ### ShiftLeft
688
- ###
552
+
689
553
  class ShiftLeft
690
554
  child :expr1
691
555
  child :expr2
692
556
  initializer :expr1, :expr2
693
557
  self.operator = '<<'
694
558
  end
695
- ###
696
- ### ShiftRight
697
- ###
559
+
698
560
  class ShiftRight
699
561
  child :expr1
700
562
  child :expr2
701
563
  initializer :expr1, :expr2
702
564
  self.operator = '>>'
703
565
  end
704
- ###
705
- ### And
706
- ###
566
+
707
567
  class And
708
568
  child :expr1
709
569
  child :expr2
710
570
  initializer :expr1, :expr2
711
571
  self.operator = '&&'
712
572
  end
713
- ###
714
- ### Or
715
- ###
573
+
716
574
  class Or
717
575
  child :expr1
718
576
  child :expr2
@@ -720,117 +578,90 @@ module C
720
578
  self.operator = '||'
721
579
  end
722
580
 
723
- ###
724
- ### ----------------------------------------------------------------
725
- ### AssignmentExpressions
726
- ### ----------------------------------------------------------------
727
- ###
581
+ # ------------------------------------------------------------------
582
+ # AssignmentExpressions
583
+ # ------------------------------------------------------------------
728
584
 
729
- ###
730
- ### AssignmentExpression (abstract)
731
- ###
732
585
  class AssignmentExpression
733
586
  class << self
734
- ###
735
- ### The operator (a String) pertaining to the class (e.g.,
736
- ### Assign.operator is '=').
737
- ###
587
+ #
588
+ # The operator (a String) pertaining to the class (e.g.,
589
+ # Assign.operator is '=').
590
+ #
738
591
  attr_accessor :operator
739
592
  end
740
593
  end
741
- ###
742
- ### Assign
743
- ###
594
+
744
595
  class Assign
745
596
  child :lval
746
597
  child :rval
747
598
  initializer :lval, :rval
748
599
  self.operator = '='
749
600
  end
750
- ###
751
- ### MultiplyAssign
752
- ###
601
+
753
602
  class MultiplyAssign
754
603
  child :lval
755
604
  child :rval
756
605
  initializer :lval, :rval
757
606
  self.operator = '*='
758
607
  end
759
- ###
760
- ### DivideAssign
761
- ###
608
+
762
609
  class DivideAssign
763
610
  child :lval
764
611
  child :rval
765
612
  initializer :lval, :rval
766
613
  self.operator = '/='
767
614
  end
768
- ###
769
- ### ModAssign
770
- ###
615
+
771
616
  class ModAssign
772
617
  child :lval
773
618
  child :rval
774
619
  initializer :lval, :rval
775
620
  self.operator = '%='
776
621
  end
777
- ###
778
- ### AddAssign
779
- ###
622
+
780
623
  class AddAssign
781
624
  child :lval
782
625
  child :rval
783
626
  initializer :lval, :rval
784
627
  self.operator = '+='
785
628
  end
786
- ###
787
- ### SubtractAssign
788
- ###
629
+
789
630
  class SubtractAssign
790
631
  child :lval
791
632
  child :rval
792
633
  initializer :lval, :rval
793
634
  self.operator = '-='
794
635
  end
795
- ###
796
- ### ShiftLeftAssign
797
- ###
636
+
798
637
  class ShiftLeftAssign
799
638
  child :lval
800
639
  child :rval
801
640
  initializer :lval, :rval
802
641
  self.operator = '<<='
803
642
  end
804
- ###
805
- ### ShiftRightAssign
806
- ###
643
+
807
644
  class ShiftRightAssign
808
645
  child :lval
809
646
  child :rval
810
647
  initializer :lval, :rval
811
648
  self.operator = '>>='
812
649
  end
813
- ###
814
- ### BitAndAssign
815
- ###
650
+
816
651
  class BitAndAssign
817
652
  child :lval
818
653
  child :rval
819
654
  initializer :lval, :rval
820
655
  self.operator = '&='
821
656
  end
822
- ###
823
- ### BitXorAssign
824
- ###
657
+
825
658
  class BitXorAssign
826
659
  child :lval
827
660
  child :rval
828
661
  initializer :lval, :rval
829
662
  self.operator = '^='
830
663
  end
831
- ###
832
- ### BitOrAssign
833
- ###
664
+
834
665
  class BitOrAssign
835
666
  child :lval
836
667
  child :rval
@@ -838,42 +669,45 @@ module C
838
669
  self.operator = '|='
839
670
  end
840
671
 
841
- ###
842
- ### ----------------------------------------------------------------
843
- ### Literals
844
- ### ----------------------------------------------------------------
845
- ###
672
+ # ------------------------------------------------------------------
673
+ # Literals
674
+ # ------------------------------------------------------------------
846
675
 
847
- ###
848
- ### StringLiteral
849
- ###
850
676
  class StringLiteral
677
+ field :prefix
851
678
  field :val
852
- field :wide?
853
- initializer :val
679
+ initializer :val, :prefix
680
+ def wide?
681
+ prefix == 'L'
682
+ end
683
+ def wide=(val)
684
+ return if wide? == !!val
685
+ self.prefix = val ? 'L' : nil
686
+ end
854
687
  end
855
- ###
856
- ### CharLiteral
857
- ###
688
+
858
689
  class CharLiteral
690
+ field :prefix
859
691
  field :val
860
- field :wide?
861
- initializer :val
692
+ initializer :val, :prefix
693
+ def wide?
694
+ prefix == 'L'
695
+ end
696
+ def wide=(val)
697
+ return if wide? == !!val
698
+ self.prefix = val ? 'L' : nil
699
+ end
862
700
  end
863
- ###
864
- ### CompoundLiteral
865
- ###
701
+
866
702
  class CompoundLiteral
867
703
  child :type
868
704
  child :member_inits, lambda{NodeArray.new}
869
705
  initializer :type, :member_inits
870
706
  end
871
- ###
872
- ### IntLiteral
873
- ###
707
+
874
708
  class IntLiteral
875
- field :val
876
709
  field :format, :dec
710
+ field :val
877
711
  field :suffix
878
712
  initializer :val
879
713
  def dec?
@@ -886,25 +720,18 @@ module C
886
720
  format.equal? :oct
887
721
  end
888
722
  end
889
- ###
890
- ### FloatLiteral
891
- ###
723
+
892
724
  class FloatLiteral
893
- field :val
894
725
  field :format, :dec
726
+ field :val
895
727
  field :suffix
896
728
  initializer :val
897
729
  end
898
730
 
899
- ###
900
- ### ----------------------------------------------------------------
901
- ### Types
902
- ### ----------------------------------------------------------------
903
- ###
731
+ # ------------------------------------------------------------------
732
+ # Types
733
+ # ------------------------------------------------------------------
904
734
 
905
- ###
906
- ### DirectType (abstract)
907
- ###
908
735
  class DirectType
909
736
  def direct_type
910
737
  self
@@ -913,9 +740,7 @@ module C
913
740
  nil
914
741
  end
915
742
  end
916
- ###
917
- ### IndirectType (abstract)
918
- ###
743
+
919
744
  class IndirectType
920
745
  def direct_type
921
746
  if type.is_a? IndirectType
@@ -924,7 +749,7 @@ module C
924
749
  type
925
750
  end
926
751
  end
927
- def direct_type= val
752
+ def direct_type=(val)
928
753
  if type.is_a? IndirectType
929
754
  type.direct_type = val
930
755
  else
@@ -941,9 +766,7 @@ module C
941
766
  return ret
942
767
  end
943
768
  end
944
- ###
945
- ### Pointer
946
- ###
769
+
947
770
  class Pointer
948
771
  field :const?
949
772
  field :restrict?
@@ -951,9 +774,7 @@ module C
951
774
  child :type
952
775
  initializer :type
953
776
  end
954
- ###
955
- ### Array
956
- ###
777
+
957
778
  class Array
958
779
  field :const?
959
780
  field :restrict?
@@ -962,9 +783,7 @@ module C
962
783
  child :length
963
784
  initializer :type, :length
964
785
  end
965
- ###
966
- ### Function
967
- ###
786
+
968
787
  class Function
969
788
  field :const?
970
789
  field :restrict?
@@ -974,9 +793,7 @@ module C
974
793
  field :var_args?
975
794
  initializer :type, :params
976
795
  end
977
- ###
978
- ### Struct
979
- ###
796
+
980
797
  class Struct
981
798
  field :const?
982
799
  field :restrict?
@@ -985,9 +802,7 @@ module C
985
802
  child :members
986
803
  initializer :name, :members
987
804
  end
988
- ###
989
- ### Union
990
- ###
805
+
991
806
  class Union
992
807
  field :const?
993
808
  field :restrict?
@@ -996,9 +811,7 @@ module C
996
811
  child :members
997
812
  initializer :name, :members
998
813
  end
999
- ###
1000
- ### Enum
1001
- ###
814
+
1002
815
  class Enum
1003
816
  field :const?
1004
817
  field :restrict?
@@ -1007,9 +820,7 @@ module C
1007
820
  child :members
1008
821
  initializer :name, :members
1009
822
  end
1010
- ###
1011
- ### CustomType
1012
- ###
823
+
1013
824
  class CustomType
1014
825
  field :const?
1015
826
  field :restrict?
@@ -1017,17 +828,13 @@ module C
1017
828
  field :name
1018
829
  initializer :name
1019
830
  end
1020
- ###
1021
- ### Void
1022
- ###
831
+
1023
832
  class Void
1024
833
  field :const?
1025
834
  field :restrict?
1026
835
  field :volatile?
1027
836
  end
1028
- ###
1029
- ### Int
1030
- ###
837
+
1031
838
  class Int
1032
839
  field :const?
1033
840
  field :restrict?
@@ -1038,11 +845,11 @@ module C
1038
845
  def signed?
1039
846
  !unsigned?
1040
847
  end
1041
- def signed= val
848
+ def signed=(val)
1042
849
  self.unsigned = !val
1043
850
  end
1044
851
  def short?
1045
- longness.equal? -1
852
+ longness.equal?(-1)
1046
853
  end
1047
854
  def plain?
1048
855
  longness.equal? 0
@@ -1054,9 +861,7 @@ module C
1054
861
  longness.equal? 2
1055
862
  end
1056
863
  end
1057
- ###
1058
- ### Float
1059
- ###
864
+
1060
865
  class Float
1061
866
  field :const?
1062
867
  field :restrict?
@@ -1073,15 +878,13 @@ module C
1073
878
  longness.equal? 2
1074
879
  end
1075
880
  end
1076
- ###
1077
- ### Char
1078
- ###
881
+
1079
882
  class Char
1080
883
  field :const?
1081
884
  field :restrict?
1082
885
  field :volatile?
1083
- ## 6.2.5p15: `char', `signed char', and `unsigned char' are
1084
- ## distinct types
886
+ # 6.2.5p15: `char', `signed char', and `unsigned char' are
887
+ # distinct types
1085
888
  field :signed
1086
889
  def signed?
1087
890
  signed.equal? true
@@ -1093,17 +896,13 @@ module C
1093
896
  signed.nil?
1094
897
  end
1095
898
  end
1096
- ###
1097
- ### Bool
1098
- ###
899
+
1099
900
  class Bool
1100
901
  field :const?
1101
902
  field :restrict?
1102
903
  field :volatile?
1103
904
  end
1104
- ###
1105
- ### Complex
1106
- ###
905
+
1107
906
  class Complex
1108
907
  field :const?
1109
908
  field :restrict?
@@ -1120,9 +919,7 @@ module C
1120
919
  longness.equal? 2
1121
920
  end
1122
921
  end
1123
- ###
1124
- ### Imaginary
1125
- ###
922
+
1126
923
  class Imaginary
1127
924
  field :const?
1128
925
  field :restrict?
@@ -1140,26 +937,22 @@ module C
1140
937
  end
1141
938
  end
1142
939
 
1143
- ###
1144
- ### ================================================================
1145
- ###
1146
- ### Tag classes
1147
- ###
1148
- ### ================================================================
1149
- ###
940
+ # ------------------------------------------------------------------
941
+ # Tag classes
942
+ # ------------------------------------------------------------------
1150
943
 
1151
- ## classify the node classes by including modules
944
+ # classify the node classes by including modules
1152
945
  tagger = lambda do |included, *includers|
1153
946
  includers.each{|mod| mod.send(:include, included)}
1154
947
  end
1155
948
 
1156
- ## expression classes
949
+ # expression classes
1157
950
  module ArithmeticExpression; end
1158
951
  module BitwiseExpression ; end
1159
952
  module LogicalExpression ; end
1160
953
  module RelationalExpression; end
1161
954
  module ShiftExpression ; end
1162
- ##
955
+ #
1163
956
  tagger.call(ArithmeticExpression,
1164
957
  PostInc, PostDec, Positive, Negative, PreInc, PreDec, Add,
1165
958
  Subtract, Multiply, Divide, Mod)
@@ -1172,13 +965,9 @@ module C
1172
965
  tagger.call(ShiftExpression,
1173
966
  ShiftLeft, ShiftRight)
1174
967
 
1175
- ###
1176
- ### ================================================================
1177
- ###
1178
- ### CORE_C_NODE_CLASSES
1179
- ###
1180
- ### ================================================================
1181
- ###
968
+ # ------------------------------------------------------------------
969
+ # CORE_C_NODE_CLASSES
970
+ # ------------------------------------------------------------------
1182
971
 
1183
972
  CORE_C_NODE_CLASSES = [
1184
973
  TranslationUnit,
@@ -1208,6 +997,7 @@ module C
1208
997
  Comma,
1209
998
  Conditional,
1210
999
  Variable,
1000
+ BlockExpression,
1211
1001
 
1212
1002
  Index,
1213
1003
  Call,
@@ -1282,7 +1072,7 @@ module C
1282
1072
  Imaginary
1283
1073
  ]
1284
1074
 
1285
- ## check we didn't miss any
1075
+ # check we didn't miss any
1286
1076
  expected_classes = Node.subclasses_recursive.sort_by{|c| c.name}
1287
1077
  expected_classes -= NodeList.subclasses_recursive
1288
1078
  expected_classes -= [NodeList]
@@ -1301,6 +1091,6 @@ module C
1301
1091
  DirectType,
1302
1092
  PrimitiveType
1303
1093
  ]
1304
- ##
1094
+ #
1305
1095
  CORE_C_NODE_CLASSES.sort_by{|c| c.name} == expected_classes or raise
1306
1096
  end