/// <summary> /// Finds a best matched constructor and uses it to create a native object instance /// </summary> /// <param name="visitor">Execution visitor</param> /// <param name="parameters">Parameters for a constructor</param> /// <returns>A newly created native object</returns> object CreateInstance(Jint.Expressions.IJintVisitor visitor, JsInstance[] parameters) { ConstructorImpl impl = m_overloads.ResolveOverload(parameters, null); if (impl == null) { throw new JintException( String.Format("No matching overload found {0}({1})", reflectedType.FullName, String.Join(",", Array.ConvertAll <JsInstance, string>(parameters, p => p.ToString())) ) ); } return(impl(visitor.Global, parameters)); }
/// <summary> /// Peforms a construction of a CLR instance inside the specified /// </summary> /// <param name="visitor"></param> /// <param name="that"></param> /// <param name="parameters"></param> /// <returns></returns> public override JsInstance Execute(Jint.Expressions.IJintVisitor visitor, JsDictionaryObject that, JsInstance[] parameters) { if (that == null || that == JsUndefined.Instance || that == JsNull.Instance || (that as IGlobal) == visitor.Global) { throw new JintException("A constructor '" + reflectedType.FullName + "' should be applied to the object"); } if (that.Value != null) { throw new JintException("Can't apply the constructor '" + reflectedType.FullName + "' to already initialized '" + that.Value.ToString() + "'"); } that.Value = CreateInstance(visitor, parameters); SetupNativeProperties(that); ((JsObject)that).Indexer = m_indexer; return(that); }
/// <summary> /// Creates a new native object and wraps it with a JsObject. /// </summary> /// <remarks> /// This method is overriden to delegate a container creation to the <see cref="Wrap"/> method. /// </remarks> /// <param name="parameters">a constructor arguments</param> /// <param name="genericArgs">Ignored since this class represents a non-generic types</param> /// <param name="visitor">Execution visitor</param> /// <returns>A newly created js object</returns> public override JsObject Construct(JsInstance[] parameters, Type[] genericArgs, Jint.Expressions.IJintVisitor visitor) { return((JsObject)Wrap(CreateInstance(visitor, parameters))); }