Class: CType::List

Inherits:
Array
  • Object
show all
Defined in:
lib/caphir/ctype.rb

Overview

Type

Instance Method Summary collapse

Constructor Details

#initialize(proto = false) ⇒ List

Returns a new instance of List.



553
554
555
556
557
558
# File 'lib/caphir/ctype.rb', line 553

def initialize(proto=false)
  super()
  @ellipses = false
  @prototype = proto
  self.freeze if @prototype
end

Instance Method Details

#ellipses?Boolean

Returns:

  • (Boolean)


576
577
578
# File 'lib/caphir/ctype.rb', line 576

def ellipses?
  @ellipses
end

#finalizeObject



580
581
582
583
584
585
586
587
588
# File 'lib/caphir/ctype.rb', line 580

def finalize
  if self.length == 1 and self[0].to_s == 'void'
    self.pop # get rid of (void)
  end
  # self.freeze causes problems with K & R function definitions,
  # since the list must be modified after it is "finalized" to
  # add the argument types.
  self
end

#lookup(ident) ⇒ Object



565
566
567
# File 'lib/caphir/ctype.rb', line 565

def lookup(ident)
  self.find { |p| p.identifier == ident }
end

#prototype?Boolean

check if K & R style prototype: main();

Returns:

  • (Boolean)


561
562
563
# File 'lib/caphir/ctype.rb', line 561

def prototype?
  @prototype
end

#to_sObject



590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
# File 'lib/caphir/ctype.rb', line 590

def to_s
  if self.length == 0
    if prototype?
      ''
    else
      'void'
    end
  else
    if ellipses?
      [self, '...']
    else
      self
    end.join(', ')
  end
end

#with_ellipsesObject



569
570
571
572
573
574
# File 'lib/caphir/ctype.rb', line 569

def with_ellipses()
  #raise "already has ellipses #{self}" if ellipses?
  #raise "prototype with ellipses?" if prototype?
  @ellipses = true
  self
end