/// <summary> /// Returns an object instance to serve as the next object in the prototype chain. /// </summary> /// <param name="engine"> The associated script engine. </param> /// <param name="instance"> The CLR object instance to wrap. </param> /// <returns> The next object in the prototype chain. </returns> private static ObjectInstance GetPrototypeObject(ScriptEngine engine, object instance) { if (engine == null) { throw new ArgumentNullException("engine"); } if (instance == null) { throw new ArgumentNullException("instance"); } return(ClrInstanceTypeWrapper.FromCache(engine, instance.GetType())); }
/// <summary> /// Returns an object instance to serve as the next object in the prototype chain. /// </summary> /// <param name="engine"> The associated script engine. </param> /// <param name="type"> The CLR type to wrap. </param> /// <returns> The next object in the prototype chain. </returns> private static ObjectInstance GetPrototypeObject(ScriptEngine engine, Type type) { if (engine == null) { throw new ArgumentNullException("engine"); } if (type == null) { throw new ArgumentNullException("type"); } if (type.BaseType == null) { return(null); } return(ClrInstanceTypeWrapper.FromCache(engine, type.BaseType)); }
// INITIALIZATION //_________________________________________________________________________________________ /// <summary> /// Retrieves a ClrInstanceTypeWrapper object from the cache, if possible, or creates it /// otherwise. /// </summary> /// <param name="engine"> The associated script engine. </param> /// <param name="type"> The CLR type to wrap. </param> public static ClrInstanceTypeWrapper FromCache(ScriptEngine engine, Type type) { if (!engine.EnableExposedClrTypes) { throw new JavaScriptException(engine, "TypeError", "Unsupported type: CLR types are not supported. Enable CLR types by setting the ScriptEngine's EnableExposedClrTypes property to true."); } ClrInstanceTypeWrapper cachedInstance; if (engine.InstanceTypeWrapperCache.TryGetValue(type, out cachedInstance)) { return(cachedInstance); } var newInstance = new ClrInstanceTypeWrapper(engine, type); engine.InstanceTypeWrapperCache.Add(type, newInstance); return(newInstance); }