Change soft-fail to use the config, rather than env
[rbx.git] / kernel / core / delegated_method.rb
blob23980376cf27caadcac62a2900cf4ba824e5e51e
1 # depends on: class.rb
3 ##
4 # DelegatedMethod is used to implement Module#define_method
6 class DelegatedMethod < RuntimePrimitive
8   Receiver = 5
9   UseSelf = 6
11   self.instance_fields = 7
13   def name= n; @name = n end
14   def name; @name end
15   def receiver
16     at(Receiver)
17   end
19   def self.build(sym, receiver, pass_self)
20     obj = allocate()
21     obj.name = "<delegated to: #{receiver.to_s}>"
22     obj.put RuntimePrimitive::PrimitiveIndex, :dispatch_as_method
23     obj.put RuntimePrimitive::RequiredArguments, -1
24     obj.put RuntimePrimitive::SerialNumber, 0
25     obj.put RuntimePrimitive::ByteCodes, sym
26     obj.put Receiver, receiver
27     obj.put UseSelf, pass_self # If true, first argument will be 'self'
28     return obj
29   end
31   def activate(recv, mod, args)
32     sz = args.total
34     out = Rubinius.asm(recv, mod, args, sz) do |r,m,a,s|
35       run a
36       push_array
37       push :nil
38       push :nil
39       run s
40       run m
41       push :self
42       run r
43       activate_method 0
44     end
46     return out
47   end
48 end