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