module Rubinius class ConstantTable class Bucket attr_reader :name attr_accessor :constant attr_accessor :visibility attr_reader :next def private? @visibility == :private end def inspect "#<#{self.class}:0x#{object_id.to_s(16)} name=#{@name.inspect} constant=#{@constant.inspect} visibility=#{visibility.inspect}>" end end attr_reader :bins def size @entries end alias_method :length, :size def self.allocate Rubinius.primitive :constant_table_allocate raise PrimitiveFailure, "ConstantTable.allocate primitive failed" end def initialize(hash=nil) return unless hash hash.each do |k, v| self[k] = v end end private :initialize def duplicate Rubinius.primitive :constant_table_duplicate raise PrimitiveFailure, "ConstantTable#duplicate primitive failed" end def dup copy = duplicate Rubinius.privately do copy.initialize_copy self end copy end def name?(name) Rubinius.primitive :constant_table_has_name raise PrimitiveFailure, "ConstantTable#name? primitive failed" end alias_method :has_name?, :name? alias_method :include?, :name? alias_method :member?, :name? def keys Rubinius.primitive :constant_table_keys raise PrimitiveFailure, "ConstantTable#keys primitive failed" end def delete(name) Rubinius.primitive :constant_table_delete raise PrimitiveFailure, "ConstantTable#delete primitive failed" end def each raise LocalJumpError, "no block given" unless block_given? vals = values i = 0 max = @bins while i < max if entry = vals.at(i) while entry yield entry.name, entry.constant, entry.visibility entry = entry.next end end i += 1 end self end def values Rubinius.primitive :constant_table_values raise PrimitiveFailure, "ConstantTable#values primitive failed" end end end