icode: iroutine knows its local registers
[nit.git] / src / icode / icode_builder.nit
index 2d75813..d1dd617 100644 (file)
@@ -184,7 +184,9 @@ class ICodeBuilder
        # Get a new register
        fun new_register(s: MMType): IRegister
        do
-               return new IRegister(s)
+               var r = new IRegister(s)
+               iroutine.registers.add(r)
+               return r
        end
 
        # The module where classes and types are extracted
@@ -235,16 +237,16 @@ redef class MMSignature
        end
 
        # Create an empty IClosureDef that match the signature
-       fun generate_empty_iclosuredef: IClosureDef
+       fun generate_empty_iclosuredef(icb: ICodeBuilder): IClosureDef
        do
                var args = new Array[IRegister]
                for i in [0..arity[ do
-                       args.add(new IRegister(self[i]))
+                       args.add(icb.new_register(self[i]))
                end
                var res: nullable IRegister = null
                var rtype = return_type
                if rtype != null then
-                       res = new IRegister(rtype)
+                       res = icb.new_register(rtype)
                end
                var iroutine = new IClosureDef(args, res)
                var clos: nullable Array[IClosureDecl] = null