class IDL::AST::BitField
def initialize(_name, _enclosure, params)
def initialize(_name, _enclosure, params) super(_name, _enclosure) @idltype = params[:idltype] @bitset = params[:bitset] @bits = params[:bits] raise "Amount of bits for bitfield #{_name} must <= 64, not #{bits}" if bits > 64 # When no IDL type has been specified for the bitfield in IDL we need to determine # the underlying type based on the number of bits if @idltype.nil? @idltype = IDL::Type::Boolean.new if bits == 1 @idltype = IDL::Type::TinyShort.new if bits.between?(2,8) @idltype = IDL::Type::Short.new if bits.between?(9,16) @idltype = IDL::Type::Long.new if bits.between?(17,32) @idltype = IDL::Type::LongLong.new if bits.between?(33,64) end @bitset.add_bitfield(self) end
def instantiate(instantiation_context, _enclosure)
def instantiate(instantiation_context, _enclosure) # find already instantiated BitSet parent _bitmask = _enclosure.resolve(@bitset.name) raise "Unable to resolve instantiated BitSet scope for bitfield #{@bitset.name}::#{name} instantiation" unless _bitset super(instantiation_context, _enclosure, { bitset: _bitset, bits: @bits }) end
def marshal_dump
def marshal_dump super() << @idltype << @bits << @bitset << @value end
def marshal_load(vars)
def marshal_load(vars) @value = vars.pop @bitset = vars.pop @bits = vars.pop @idltype = vars.pop super(vars) end