public JsValue Call(JsValue thisObject, JsValue[] arguments) { // direct calls on a NamespaceReference constructor object is creating a generic type var genericTypes = new Type[arguments.Length]; for (int i = 0; i < arguments.Length; i++) { var genericTypeReference = arguments.At(i); if (genericTypeReference == Undefined.Instance || !genericTypeReference.IsObject() || genericTypeReference.AsObject().Class != "TypeReference") { throw new JavaScriptException(Engine.TypeError, "Invalid generic type parameter"); } genericTypes[i] = arguments.At(0).As<TypeReference>().Type; } var typeReference = GetPath(_path + "`" + arguments.Length.ToString(CultureInfo.InvariantCulture)).As<TypeReference>(); if (typeReference == null) { return Undefined.Instance; } var genericType = typeReference.Type.MakeGenericType(genericTypes); return TypeReference.CreateTypeReference(Engine, genericType); }