Class: YTLJit::ClassClassWrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/ytljit/util.rb

Overview

Singleton class can’t be marshaled. So this class wrap to marshal singleton class

Constant Summary collapse

@@instance_tab =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(clsobj) ⇒ ClassClassWrapper

Returns a new instance of ClassClassWrapper.



70
71
72
73
# File 'lib/ytljit/util.rb', line 70

def initialize(clsobj)
  @klass_object = clsobj
  @value = nil
end

Class Method Details

.instance(clsobj) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/ytljit/util.rb', line 57

def self.instance(clsobj)
  if clsobj.is_a?(ClassClassWrapper)
    clsobj = clsobj.value
  end
  ins = @@instance_tab[clsobj] 
  if ins == nil then
    ins = ClassClassWrapper.new(clsobj)
    @@instance_tab[clsobj] = ins
  end

  ins
end

Instance Method Details

#ancestorsObject



92
93
94
# File 'lib/ytljit/util.rb', line 92

def ancestors
  value.ancestors
end

#marshal_dumpObject



96
97
98
# File 'lib/ytljit/util.rb', line 96

def marshal_dump
  [@klass_object]
end

#marshal_load(obj) ⇒ Object



100
101
102
103
# File 'lib/ytljit/util.rb', line 100

def marshal_load(obj)
  @klass_object = obj
  @value = nil
end

#nameObject



88
89
90
# File 'lib/ytljit/util.rb', line 88

def name
  value.name
end

#superclassObject



105
106
107
108
109
110
111
112
113
# File 'lib/ytljit/util.rb', line 105

def superclass
  sup = value.superclass
  ins = @@instance_tab[sup]
  if ins then
    ins
  else
    sup
  end
end

#to_sObject



75
76
77
# File 'lib/ytljit/util.rb', line 75

def to_s
  "#<Ytljit::ClassClassWrapper type=#{value.inspect}"
end

#valueObject



79
80
81
82
83
84
85
86
# File 'lib/ytljit/util.rb', line 79

def value
  if @value then
    @value
  else
    @value = class << @klass_object; self; end
    @value
  end
end