24: def initialize(k,m,aliaz,&blk)
25: Benelux.ld "%20s: %s#%s" % [self.class, k, m]
26: if Benelux.packed_method? k, m
27: raise SelectableError, "Already defined (#{k} #{m})"
28: end
29: @klass, @meth, @aliaz, @blk = k, m, aliaz, blk
30: @aliaz ||= meth
31: @klass.extend Attic unless @klass.kind_of?(Attic)
32: unless @klass.kind_of?(Benelux)
33: @klass.attic :timeline
34: @klass.send :include, Benelux
35: end
36:
37:
38:
39:
40:
41: thread_id, call_id = Thread.current.object_id.abs, @klass.object_id.abs
42: @methorig = methorig = "__benelux_#{@meth}_#{thread_id}_#{call_id}""__benelux_#{@meth}_#{thread_id}_#{call_id}"
43: Benelux.ld "%20s: %s" % ['Alias', @methorig]
44:
45: @klass.module_eval do
46: Benelux.ld [:def, self, m,
47: MethodPacker.method_defined?(self, m),
48: MethodPacker.class_method_defined?(self, m)].inspect
49: if MethodPacker.method_defined?(self, m)
50: alias_method methorig, m
51: elsif MethodPacker.class_method_defined?(self, m)
52: eval "class << self; alias #{methorig} #{m}; end"
53: else
54: raise BeneluxError, "No such method: #{self}.#{m}"
55: end
56: end
57: install_method
58: self.add_tags :class => @klass.to_s.to_sym,
59: :meth => @meth.to_sym,
60: :kind => self.class.to_s.to_sym
61:
62: Benelux.packed_methods[@klass] ||= {}
63: Benelux.packed_methods[@klass][@meth] = self
64: Benelux.packed_methods[:all] ||= []
65: Benelux.packed_methods[:all] << self
66:
67: end