public override Type MakeGenericType(params Type[] args) { if (!IsGenericTypeDefinition) { throw new InvalidOperationException(); } var typeArgs = Braille.JavaScript.Array.New(); for (var i = 0; i < args.Length; i++) { typeArgs[i] = ((RuntimeType)args[i]).ctor; } var openType = Marshal.ObjectLookup(ctor.Assembly, FullName); var closedType = Marshal.Apply(openType, null, typeArgs); return(GetInstance(UnsafeCast <constructor>(closedType))); }