示例#1
0
        /// <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));
        }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <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)));
 }