ClearScript
                                
                                 ClearScript copied to clipboard
                                
                                    ClearScript copied to clipboard
                            
                            
                            
                        Using host object w/ CTOR containing optional parameters stopped working
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();
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!
Gr8! Looking forward to the new version. Best regards
Fixed in Version 7.3.3.