mirror of
https://github.com/mistergibson/gxg-web-client.git
synced 2026-08-15 03:26:00 -07:00
97 lines
2.1 KiB
Ruby
97 lines
2.1 KiB
Ruby
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
|