From 17a1c04c7294fa344d5ab8563d224175da6c56de Mon Sep 17 00:00:00 2001 From: Gene Gleyzer Date: Fri, 26 May 2023 12:18:04 -0400 Subject: [PATCH 1/2] Improve run-time exception text --- .../src/main/java/org/xvm/runtime/template/xException.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/javatools/src/main/java/org/xvm/runtime/template/xException.java b/javatools/src/main/java/org/xvm/runtime/template/xException.java index 9e59a84dfa..30f722f253 100644 --- a/javatools/src/main/java/org/xvm/runtime/template/xException.java +++ b/javatools/src/main/java/org/xvm/runtime/template/xException.java @@ -151,8 +151,9 @@ public static ExceptionHandle invalidType(Frame frame, String sMsg) public static ExceptionHandle mutableObject(Frame frame, TypeConstant type) { - return illegalArgument(frame, "Mutable object of type \" " - + type.removeAccess().getValueString() + type = type.removeAccess(). + resolveGenerics(frame.poolContext(), frame.getGenericsResolver(true)); + return illegalArgument(frame, "Mutable object of type \" " + type.getValueString() + "\" cannot be used for a service call"); } From 48af114095b4e568933f52d6b70aba973c97c8a8 Mon Sep 17 00:00:00 2001 From: Jonathan Knight Date: Sat, 27 May 2023 20:10:38 +0300 Subject: [PATCH 2/2] Fix binding parameters to functions with more than two parameters (#74) --- .../template/_native/reflect/xRTFunction.java | 2 +- manualTests/src/main/x/reflect.x | 28 +++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTFunction.java b/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTFunction.java index db52f089ca..13c219e077 100644 --- a/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTFunction.java +++ b/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTFunction.java @@ -233,7 +233,7 @@ public int invokeBind(Frame frame, FunctionHandle hFunc, ObjectHandle hArg, int ixPrev = ix; if (fAdjust) { - ix--; + ix -= i; } hFuncR = hFuncR.bind(frameCaller, ix, ahValue[i]); } diff --git a/manualTests/src/main/x/reflect.x b/manualTests/src/main/x/reflect.x index b17cf34d3e..f4937c507e 100644 --- a/manualTests/src/main/x/reflect.x +++ b/manualTests/src/main/x/reflect.x @@ -375,23 +375,33 @@ module TestReflection console.print("\n** testBind"); - function void (Int, String) log = - (i, v) -> console.print($"[{i}] {v}"); + function void (Int, String, Boolean) log = + (i, v, f) -> console.print($"[{i}] {v} {f}"); - Parameter param0 = log.params[0].as(Parameter); - Parameter param1 = log.params[1].as(Parameter); + Parameter param0 = log.params[0].as(Parameter); + Parameter param1 = log.params[1].as(Parameter); + Parameter param2 = log.params[2].as(Parameter); // single bind - function void (Int) hello = log.bind(param1, "hello").as(function void (Int)); - hello(0); + function void (Int, Boolean) hello = log.bind(param1, "hello").as(function void (Int, Boolean)); + hello(0, True); - // multi bind + // multi partial bind + Map paramsPartial = new ListMap(); + paramsPartial.put(param0, 1); + paramsPartial.put(param1, "world"); + + function void (Boolean) fnPartial = log.bind(paramsPartial).as(function void (Boolean)); + fnPartial(True); + + // multi full bind Map params = new ListMap(); params.put(param0, 1); params.put(param1, "world"); + params.put(param2, True); - function void () world = log.bind(params); - world(); + function void () fn = log.bind(params); + fn(); } void testChildTypes()