{"action":"created","issue":{"url":"https://api.github.com/repos/Microsoft/WinObjC/issues/903","repository_url":"https://api.github.com/repos/Microsoft/WinObjC","labels_url":"https://api.github.com/repos/Microsoft/WinObjC/issues/903/labels{/name}","comments_url":"https://api.github.com/repos/Microsoft/WinObjC/issues/903/comments","events_url":"https://api.github.com/repos/Microsoft/WinObjC/issues/903/events","html_url":"https://github.com/Microsoft/WinObjC/pull/903","id":172589676,"number":903,"title":"Rewrite NSInvocation to use architecture-specific argument allocators","user":{"login":"DHowett-MSFT","id":14316954,"avatar_url":"https://avatars.githubusercontent.com/u/14316954?v=3","gravatar_id":"","url":"https://api.github.com/users/DHowett-MSFT","html_url":"https://github.com/DHowett-MSFT","followers_url":"https://api.github.com/users/DHowett-MSFT/followers","following_url":"https://api.github.com/users/DHowett-MSFT/following{/other_user}","gists_url":"https://api.github.com/users/DHowett-MSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/DHowett-MSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DHowett-MSFT/subscriptions","organizations_url":"https://api.github.com/users/DHowett-MSFT/orgs","repos_url":"https://api.github.com/users/DHowett-MSFT/repos","events_url":"https://api.github.com/users/DHowett-MSFT/events{/privacy}","received_events_url":"https://api.github.com/users/DHowett-MSFT/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Microsoft/WinObjC/labels/Area-Foundation","name":"Area-Foundation","color":"f9d0c4"},{"url":"https://api.github.com/repos/Microsoft/WinObjC/labels/cla-not-required","name":"cla-not-required","color":"009800"}],"state":"open","locked":false,"assignee":{"login":"bviglietta","id":7670607,"avatar_url":"https://avatars.githubusercontent.com/u/7670607?v=3","gravatar_id":"","url":"https://api.github.com/users/bviglietta","html_url":"https://github.com/bviglietta","followers_url":"https://api.github.com/users/bviglietta/followers","following_url":"https://api.github.com/users/bviglietta/following{/other_user}","gists_url":"https://api.github.com/users/bviglietta/gists{/gist_id}","starred_url":"https://api.github.com/users/bviglietta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bviglietta/subscriptions","organizations_url":"https://api.github.com/users/bviglietta/orgs","repos_url":"https://api.github.com/users/bviglietta/repos","events_url":"https://api.github.com/users/bviglietta/events{/privacy}","received_events_url":"https://api.github.com/users/bviglietta/received_events","type":"User","site_admin":false},"assignees":[{"login":"bviglietta","id":7670607,"avatar_url":"https://avatars.githubusercontent.com/u/7670607?v=3","gravatar_id":"","url":"https://api.github.com/users/bviglietta","html_url":"https://github.com/bviglietta","followers_url":"https://api.github.com/users/bviglietta/followers","following_url":"https://api.github.com/users/bviglietta/following{/other_user}","gists_url":"https://api.github.com/users/bviglietta/gists{/gist_id}","starred_url":"https://api.github.com/users/bviglietta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bviglietta/subscriptions","organizations_url":"https://api.github.com/users/bviglietta/orgs","repos_url":"https://api.github.com/users/bviglietta/repos","events_url":"https://api.github.com/users/bviglietta/events{/privacy}","received_events_url":"https://api.github.com/users/bviglietta/received_events","type":"User","site_admin":false},{"login":"bbowman","id":15642573,"avatar_url":"https://avatars.githubusercontent.com/u/15642573?v=3","gravatar_id":"","url":"https://api.github.com/users/bbowman","html_url":"https://github.com/bbowman","followers_url":"https://api.github.com/users/bbowman/followers","following_url":"https://api.github.com/users/bbowman/following{/other_user}","gists_url":"https://api.github.com/users/bbowman/gists{/gist_id}","starred_url":"https://api.github.com/users/bbowman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bbowman/subscriptions","organizations_url":"https://api.github.com/users/bbowman/orgs","repos_url":"https://api.github.com/users/bbowman/repos","events_url":"https://api.github.com/users/bbowman/events{/privacy}","received_events_url":"https://api.github.com/users/bbowman/received_events","type":"User","site_admin":false},{"login":"PooyaZv","id":16107916,"avatar_url":"https://avatars.githubusercontent.com/u/16107916?v=3","gravatar_id":"","url":"https://api.github.com/users/PooyaZv","html_url":"https://github.com/PooyaZv","followers_url":"https://api.github.com/users/PooyaZv/followers","following_url":"https://api.github.com/users/PooyaZv/following{/other_user}","gists_url":"https://api.github.com/users/PooyaZv/gists{/gist_id}","starred_url":"https://api.github.com/users/PooyaZv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PooyaZv/subscriptions","organizations_url":"https://api.github.com/users/PooyaZv/orgs","repos_url":"https://api.github.com/users/PooyaZv/repos","events_url":"https://api.github.com/users/PooyaZv/events{/privacy}","received_events_url":"https://api.github.com/users/PooyaZv/received_events","type":"User","site_admin":false},{"login":"mnithish","id":18412940,"avatar_url":"https://avatars.githubusercontent.com/u/18412940?v=3","gravatar_id":"","url":"https://api.github.com/users/mnithish","html_url":"https://github.com/mnithish","followers_url":"https://api.github.com/users/mnithish/followers","following_url":"https://api.github.com/users/mnithish/following{/other_user}","gists_url":"https://api.github.com/users/mnithish/gists{/gist_id}","starred_url":"https://api.github.com/users/mnithish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mnithish/subscriptions","organizations_url":"https://api.github.com/users/mnithish/orgs","repos_url":"https://api.github.com/users/mnithish/repos","events_url":"https://api.github.com/users/mnithish/events{/privacy}","received_events_url":"https://api.github.com/users/mnithish/received_events","type":"User","site_admin":false}],"milestone":null,"comments":12,"created_at":"2016-08-23T01:01:59Z","updated_at":"2016-08-25T22:30:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/Microsoft/WinObjC/pulls/903","html_url":"https://github.com/Microsoft/WinObjC/pull/903","diff_url":"https://github.com/Microsoft/WinObjC/pull/903.diff","patch_url":"https://github.com/Microsoft/WinObjC/pull/903.patch"},"body":"This pullrequest:\r\n* Removes the arbitrary 16-argument limit on NSInvocation.\r\n* Adds support for methods that take multiple arguments and return structs.\r\n* Fixes `retainArguments` to also copy `char*` arguments (_yeah, the docs say it does this..._).\r\n* Is a proper base implementation for `forwardInvocation:`, which will work with buffers laid out like the `_NSInvocationCallFrame` internal buffer.\r\n* Adds support for properly passing floating point arguments on ARM (previously, they would all be extended to 64-bit and passed on the stack.)\r\n  * Adds support for passing uniform vfp structures in floating point registers, accounting for their use, and spilling arguments onto the stack (if necessary.)\r\n* Is a source of eternal visceral terror by way of being partially written in assembly.\r\n* Adds some tests that fail on OS X.\r\n\r\nWhat remains to be done:\r\n* Cleanup.\r\n* Investigation of struct alignment requirements w.r.t the stack on ARM and x86.\r\n* Investigation of the ARM frame pointer; it looks like we might be damaging the debugger's ability to walk past the NSInvocation dispatcher.\r\n* Exceptions must be thrown for methods taking unions or variadic arguments: NSInvocation does not officially support either of those.\r\n\r\nThis has passed ARM and x86 UTs, as well as rounds of manually sitting around looking at the argument layouts.\r\n\r\nThe assembly thunks are inspired heavily by those of [libffi](https://github.com/libffi/libffi) (_MIT licensed_), which does all this and more and more than we need.\r\n\r\nI hope for @bviglietta to be especially hard on this one :smile:."},"comment":{"url":"https://api.github.com/repos/Microsoft/WinObjC/issues/comments/242564376","html_url":"https://github.com/Microsoft/WinObjC/pull/903#issuecomment-242564376","issue_url":"https://api.github.com/repos/Microsoft/WinObjC/issues/903","id":242564376,"user":{"login":"rajsesh-msft","id":15148713,"avatar_url":"https://avatars.githubusercontent.com/u/15148713?v=3","gravatar_id":"","url":"https://api.github.com/users/rajsesh-msft","html_url":"https://github.com/rajsesh-msft","followers_url":"https://api.github.com/users/rajsesh-msft/followers","following_url":"https://api.github.com/users/rajsesh-msft/following{/other_user}","gists_url":"https://api.github.com/users/rajsesh-msft/gists{/gist_id}","starred_url":"https://api.github.com/users/rajsesh-msft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rajsesh-msft/subscriptions","organizations_url":"https://api.github.com/users/rajsesh-msft/orgs","repos_url":"https://api.github.com/users/rajsesh-msft/repos","events_url":"https://api.github.com/users/rajsesh-msft/events{/privacy}","received_events_url":"https://api.github.com/users/rajsesh-msft/received_events","type":"User","site_admin":false},"created_at":"2016-08-25T22:30:06Z","updated_at":"2016-08-25T22:30:06Z","body":":clock1:"}}
{"actor":{"display_login":"rajsesh-msft"}}