class Metasm::C::BaseType

Attributes

name[RW]
specifier[RW]

Public Class Methods

new(name, *specs) click to toggle source
# File metasm/parse_c.rb, line 168
def initialize(name, *specs)
        @name = name
        specs.each { |s|
                case s
                when :const, :volatile; (@qualifier ||= []) << s
                when :signed, :unsigned; @specifier = s
                when nil
                else raise "internal error, got #{name.inspect} #{specs.inspect}"
                end
        }
end

Public Instance Methods

==(o) click to toggle source
# File metasm/parse_c.rb, line 180
def ==(o)
        o.object_id == self.object_id or
        (o.class == self.class and o.name == self.name and o.specifier == self.specifier and o.attributes == self.attributes)
end
align(parser) click to toggle source
# File metasm/parse_c.rb, line 166
def align(parser) @name == :double ? 4 : parser.typesize[@name] end
arithmetic?() click to toggle source
# File metasm/parse_c.rb, line 160
def arithmetic? ; @name != :void end
dump(scope, r=[CRenderString.new], dep=[]) click to toggle source
# File metasm/parse_c.rb, line 3646
def dump(scope, r=[CRenderString.new], dep=[])
        r.last << @qualifier.map { |q| q.to_s << ' ' }.join if qualifier
        r.last << @specifier.to_s << ' ' if specifier and @name != :ptr
        r.last << case @name
        when :longlong; 'long long'
        when :longdouble; 'long double'
        when :ptr; specifier == :unsigned ? 'uintptr_t' : 'intptr_t'
        else @name.to_s
        end
        [r, dep]
end
float?() click to toggle source
# File metasm/parse_c.rb, line 164
def float? ; [:float, :double, :longdouble].include? @name end
integral?() click to toggle source
# File metasm/parse_c.rb, line 161
def integral? ; [:char, :short, :int, :long, :longlong, :ptr,
        :__int8, :__int16, :__int32, :__int64].include? @name end
signed?() click to toggle source
# File metasm/parse_c.rb, line 163
def signed? ; specifier != :unsigned end
void?() click to toggle source
# File metasm/parse_c.rb, line 165
def void? ; @name == :void end