protected override object InnerInvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target,
                                                    object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
        {
            object result;
            object processedTarget = TypeMappingHelpers.MapToHostType(target);

            object[] processedArgs = TypeMappingHelpers.MapToHostType(args);

            if (name == SpecialMemberName.Default && processedTarget is Delegate)
            {
                var del = (Delegate)processedTarget;
                result = InvokeDelegate(del, processedArgs);
            }
            else
            {
                result = InvokeStandardMember(name, invokeAttr, binder, processedTarget,
                                              processedArgs, modifiers, culture, namedParameters);
            }

            return(TypeMappingHelpers.MapToScriptType(result, _engineMode));
        }
        protected override object InnerInvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target,
                                                    object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
        {
            object[] processedArgs = TypeMappingHelpers.MapToHostType(args);
            object   result;

            if (name == SpecialMemberName.Default && invokeAttr.HasFlag(BindingFlags.CreateInstance))
            {
                if (_engineMode != JsEngineMode.Classic && processedArgs.Length > 0)
                {
                    processedArgs = processedArgs.Skip(1).ToArray();
                }

                result = Activator.CreateInstance(_type, processedArgs);
            }
            else
            {
                result = InvokeStandardMember(name, invokeAttr, binder, target,
                                              processedArgs, modifiers, culture, namedParameters);
            }

            return(TypeMappingHelpers.MapToScriptType(result, _engineMode));
        }
Beispiel #3
0
 /// <summary>
 /// Makes a mapping of array items from the script type to a host type
 /// </summary>
 /// <param name="args">The source array</param>
 /// <returns>The mapped array</returns>
 private object[] MapToHostType(object[] args)
 {
     return(TypeMappingHelpers.MapToHostType(args));
 }
Beispiel #4
0
 /// <summary>
 /// Makes a mapping of value from the script type to a host type
 /// </summary>
 /// <param name="value">The source value</param>
 /// <returns>The mapped value</returns>
 private object MapToHostType(object value)
 {
     return(TypeMappingHelpers.MapToHostType(value));
 }
Beispiel #5
0
 /// <summary>
 /// Makes a mapping of array items from the host type to a script type
 /// </summary>
 /// <param name="args">The source array</param>
 /// <returns>The mapped array</returns>
 private object[] MapToScriptType(object[] args)
 {
     return(TypeMappingHelpers.MapToScriptType(args, _engineMode));
 }
Beispiel #6
0
 /// <summary>
 /// Makes a mapping of value from the host type to a script type
 /// </summary>
 /// <param name="value">The source value</param>
 /// <returns>The mapped value</returns>
 private object MapToScriptType(object value)
 {
     return(TypeMappingHelpers.MapToScriptType(value, _engineMode));
 }