engines: handle initializers with an arity!=1
[nit.git] / src / compiler / abstract_compiler.nit
index ef02aec..cf1e0f2 100644 (file)
@@ -1053,16 +1053,21 @@ abstract class AbstractCompilerVisitor
                if not initializers.is_empty then
                        var recv = arguments.first
 
-                       assert initializers.length == arguments.length - 1 else debug("expected {initializers.length}, got {arguments.length - 1}")
                        var i = 1
                        for p in initializers do
                                if p isa MMethod then
-                                       self.send(p, [recv, arguments[i]])
+                                       var args = [recv]
+                                       for x in p.intro.msignature.mparameters do
+                                               args.add arguments[i]
+                                               i += 1
+                                       end
+                                       self.send(p, args)
                                else if p isa MAttribute then
                                        self.write_attribute(p, recv, arguments[i])
+                                       i += 1
                                else abort
-                               i += 1
                        end
+                       assert i == arguments.length
 
                        return self.send(callsite.mproperty, [recv])
                end
@@ -2179,9 +2184,7 @@ redef class AMethPropdef
                        externname = at.arg_as_string(v.compiler.modelbuilder)
                        if externname == null then return false
                else
-                       var nextern = self.n_extern
-                       if nextern == null then return false
-                       externname = nextern.text.substring(1, nextern.text.length-2)
+                       return false
                end
                if location.file != null then
                        var file = location.file.filename
@@ -2216,9 +2219,7 @@ redef class AMethPropdef
                        externname = at.arg_as_string(v.compiler.modelbuilder)
                        if externname == null then return false
                else
-                       var nextern = self.n_extern
-                       if nextern == null then return false
-                       externname = nextern.text.substring(1, nextern.text.length-2)
+                       return false
                end
                if location.file != null then
                        var file = location.file.filename