icode: closures are generated within a ICodeBuilder
[nit.git] / src / icode / icode_builder.nit
index 88c3796..c7cfe59 100644 (file)
@@ -94,7 +94,7 @@ class ICodeBuilder
        # Add a localized IAbort
        fun add_abort(s: String...)
        do
-               stmt(new IAbort(s, method, module))
+               stmt(new IAbort(s, module))
        end
 
        # Add an assigment to the iroutine return value
@@ -196,16 +196,12 @@ class ICodeBuilder
        # The current sequence of icodes
        readable writable var _seq: ISeq
 
-       # The method associated to the iroutine (if any)
-       readable var _method: nullable MMMethod
-
-       init(module: MMModule, r: IRoutine, m: nullable MMMethod)
+       init(module: MMModule, r: IRoutine)
        do
                _module = module
                _current_location = r.location
                _iroutine = r
                _seq = r.body
-               _method = m
        end
 
        # New ICodes are set to this location
@@ -239,16 +235,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