From 488ca264cf0e91c2cf1550caf25049ab47e7cd4c Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Thu, 22 Feb 2024 15:49:27 +0100 Subject: [PATCH] Removing IntHolder JavaClass argument when using static syntax --- .../node/callable/InvokeMethodNode.java | 16 +++++++++++++++- test/Base_Tests/src/Data/Polyglot_Spec.enso | 5 ++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java index 83d6d4199002..ce7a10e938cb 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java @@ -848,7 +848,21 @@ Object doExtensionMethod( } else { if (symbol.getScope().getMethodForPolyglot(self, symbol.getName(), true) instanceof Function function) { - return invokeFunctionNode.execute(function, frame, state, arguments); + if (function.getSchema().getArgumentsCount() == arguments.length - 1 + && "self".equals(function.getSchema().getArgumentInfos()[0].getName())) { + var lessArgs = Arrays.copyOfRange(arguments, 1, arguments.length); + var lessSchema = + Arrays.copyOfRange( + invokeFunctionNode.getSchema(), 1, invokeFunctionNode.getSchema().length); + var node = + InvokeFunctionNode.build( + lessSchema, + invokeFunctionNode.getDefaultsExecutionMode(), + invokeFunctionNode.getArgumentsExecutionMode()); + return node.execute(function, frame, state, lessArgs); + } else { + return invokeFunctionNode.execute(function, frame, state, arguments); + } } else { throw ctx.raiseAssertionPanic(this, "Error", null); } diff --git a/test/Base_Tests/src/Data/Polyglot_Spec.enso b/test/Base_Tests/src/Data/Polyglot_Spec.enso index 8528e20c7f87..b79feb067b5c 100644 --- a/test/Base_Tests/src/Data/Polyglot_Spec.enso +++ b/test/Base_Tests/src/Data/Polyglot_Spec.enso @@ -75,7 +75,10 @@ add_specs suite_builder = suite_builder.group "Polyglot" group_builder-> foreign js js_meaning = """ return { meaning : 6 * 7 }; -IntHolder.value_plus self add:Integer = self.value+add +IntHolder.value_plus self add = + v1=self.value + v1+add + IntHolder.create n:Integer = IntHolder.new n main =