From 9b59d5f3c5b03681bab566e3b82cb35dae79dc9c Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 29 Sep 2014 15:37:08 -0400 Subject: [PATCH] engines: handle initializers with an arity!=1 Signed-off-by: Jean Privat --- src/compiler/abstract_compiler.nit | 11 ++++++++--- src/interpreter/naive_interpreter.nit | 12 +++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 5251f34..cf1e0f2 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -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 diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index d4c9173..5b79f0c 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -407,18 +407,24 @@ private class NaiveInterpreter do var initializers = callsite.mpropdef.initializers if not initializers.is_empty then - assert initializers.length == arguments.length - 1 else debug("expected {initializers.length} got {arguments.length - 1}") var recv = arguments.first 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 assert recv isa MutableInstance recv.attributes[p] = arguments[i] + i += 1 else abort - i += 1 end + assert i == arguments.length + return send(callsite.mproperty, [recv]) end return send(callsite.mproperty, arguments) -- 1.7.9.5