ClearScript icon indicating copy to clipboard operation
ClearScript copied to clipboard

Using host object w/ CTOR containing optional parameters stopped working

Open simontom opened this issue 3 years ago • 2 comments

Hey guys, we tried ur shiny new v7.3.2 and found that using optional parameters in CTORs stopped working. Is that an intention? Wrong setup? Or ....?

It actually still works for methods w/ optional parameters.

public class EngineCode
{
    public void Run()
    {
        var engine = new V8ScriptEngine();
        engine.AddHostType(typeof(UsingOptionalParameters));

        engine.Evaluate("const x = new UsingOptionalParameters();");
        // engine.Evaluate("const x = new UsingOptionalParameters('x', 42);");
        // engine.Evaluate(@"
        //      const x = new UsingOptionalParameters('x', 42);
        //      x.SomeMethod();
        // ");
    }
}

public class UsingOptionalParameters
{
    public UsingOptionalParameters(string s = "hovinko", int i = 42)
    {
    }

    public void SomeMethod(string s = "hovinko", int i = 42)
    {
    }
}
Unhandled exception. Microsoft.ClearScript.ScriptEngineException: Error: Parameter count mismatch.
 ---> Microsoft.ClearScript.ScriptEngineException: Error: Parameter count mismatch.
 ---> System.Reflection.TargetParameterCountException: Parameter count mismatch.
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.ClearScript.Util.TypeHelpers.CreateInstance(Type type, Type accessContext, ScriptAccess defaultAccess, Object[] args, Object[] bindArgs)
   at Microsoft.ClearScript.HostItem.InvokeHostMember(String name, BindingFlags invokeFlags, Object[] args, Object[] bindArgs, CultureInfo culture, Boolean& isCacheable)
   at Microsoft.ClearScript.HostItem.InvokeMember(String name, BindingFlags invokeFlags, Object[] args, Object[] bindArgs, CultureInfo culture, Boolean bypassTunneling, Boolean& isCacheable)
   at Microsoft.ClearScript.HostItem.<>c__DisplayClass147_0.<InvokeReflectMember>b__0()
   at Microsoft.ClearScript.ScriptEngine.HostInvoke[T](Func`1 func)
   at Microsoft.ClearScript.HostItem.HostInvoke[T](Func`1 func)
   at Microsoft.ClearScript.HostItem.InvokeReflectMember(String name, BindingFlags invokeFlags, Object[] wrappedArgs, CultureInfo culture, String[] namedParams, Boolean& isCacheable)
   at Microsoft.ClearScript.HostItem.InvokeReflectMember(String name, BindingFlags invokeFlags, Object[] wrappedArgs, CultureInfo culture, String[] namedParams)
   at Microsoft.ClearScript.HostItem.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeFlags, Binder binder, Object invokeTarget, Object[] wrappedArgs, ParameterModifier[] modifiers, CultureInfo culture, String
[] namedParams)
   at Microsoft.ClearScript.HostItem.Microsoft.ClearScript.Util.IDynamic.Invoke(Boolean asConstructor, Object[] args)
   at Microsoft.ClearScript.V8.V8ProxyHelpers.InvokeHostObject(Object obj, Boolean asConstructor, Object[] args)
   at Microsoft.ClearScript.V8.V8ProxyHelpers.InvokeHostObject(IntPtr pObject, Boolean asConstructor, Object[] args)
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyManaged.InvokeHostObject(IntPtr pObject, Boolean asConstructor, Ptr pArgs, Ptr pResult)
   --- End of inner exception stack trace ---
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.ThrowScheduledException()
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.Invoke[T](Func`2 func)
   at Microsoft.ClearScript.V8.SplitProxy.V8ContextProxyImpl.Execute(UniqueDocumentInfo documentInfo, String code, Boolean evaluate)
   at Microsoft.ClearScript.V8.V8ScriptEngine.ExecuteRaw(UniqueDocumentInfo documentInfo, String code, Boolean evaluate)
   at Microsoft.ClearScript.V8.V8ScriptEngine.ExecuteInternal(UniqueDocumentInfo documentInfo, String code, Boolean evaluate)
   at Microsoft.ClearScript.V8.V8ScriptEngine.<>c__DisplayClass118_0.<Execute>b__0()
   at Microsoft.ClearScript.ScriptEngine.ScriptInvokeInternal[T](Func`1 func)
   at Microsoft.ClearScript.V8.V8ScriptEngine.<>c__DisplayClass125_0`1.<ScriptInvoke>b__0()
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyManaged.InvokeHostAction(IntPtr pAction)
   --- Script error details follow ---
   Error: Parameter count mismatch.
       at Script [temp]:1:11 -> const x = new UsingOptionalParameters();
   --- End of inner exception stack trace ---
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.ThrowScheduledException()
   at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.Invoke(Action`1 action)
   at Microsoft.ClearScript.V8.SplitProxy.V8ContextProxyImpl.InvokeWithLock(Action action)
   at Microsoft.ClearScript.V8.V8ScriptEngine.ScriptInvoke[T](Func`1 func)
   at Microsoft.ClearScript.V8.V8ScriptEngine.Execute(UniqueDocumentInfo documentInfo, String code, Boolean evaluate)
   at Microsoft.ClearScript.ScriptEngine.Evaluate(UniqueDocumentInfo documentInfo, String code, Boolean marshalResult)
   at Microsoft.ClearScript.ScriptEngine.Evaluate(DocumentInfo documentInfo, String code)
   at Microsoft.ClearScript.ScriptEngine.Evaluate(String documentName, Boolean discard, String code)
   at Microsoft.ClearScript.ScriptEngine.Evaluate(String documentName, String code)
   at Microsoft.ClearScript.ScriptEngine.Evaluate(String code)
   at V8EngineWorkbench.DynamicBinding.DynamicBindingCode.Run() in PATHTOPROJECT\Workbench\V8ClearScript\DynamicBinding\DynamicBindingCode.cs:line 13
   at V8EngineWorkbench.Program.Main() in PATHTOPROJECT\Workbench\V8ClearScript\Program.cs:line 10
   --- Script error details follow ---
   Error: Parameter count mismatch.
       at Script [temp]:1:11 -> const x = new UsingOptionalParameters();

simontom avatar Sep 19 '22 11:09 simontom

Hi @simontom,

You're right, constructor optional parameters are indeed broken in 7.3.2. Sorry about that!

We'll try to get a fix out ASAP – hopefully sometime next week after V8 10.6 goes stable.

Thanks for reporting!

ClearScriptLib avatar Sep 19 '22 15:09 ClearScriptLib

Gr8! Looking forward to the new version. Best regards

simontom avatar Sep 20 '22 08:09 simontom

Fixed in Version 7.3.3.

ClearScriptLib avatar Sep 28 '22 01:09 ClearScriptLib