{"action":"created","issue":{"url":"https://api.github.com/repos/sq/JSIL/issues/749","labels_url":"https://api.github.com/repos/sq/JSIL/issues/749/labels{/name}","comments_url":"https://api.github.com/repos/sq/JSIL/issues/749/comments","events_url":"https://api.github.com/repos/sq/JSIL/issues/749/events","html_url":"https://github.com/sq/JSIL/pull/749","id":95546861,"number":749,"title":"Object virtual methods","user":{"login":"iskiselev","id":5084964,"avatar_url":"https://avatars.githubusercontent.com/u/5084964?v=3","gravatar_id":"","url":"https://api.github.com/users/iskiselev","html_url":"https://github.com/iskiselev","followers_url":"https://api.github.com/users/iskiselev/followers","following_url":"https://api.github.com/users/iskiselev/following{/other_user}","gists_url":"https://api.github.com/users/iskiselev/gists{/gist_id}","starred_url":"https://api.github.com/users/iskiselev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iskiselev/subscriptions","organizations_url":"https://api.github.com/users/iskiselev/orgs","repos_url":"https://api.github.com/users/iskiselev/repos","events_url":"https://api.github.com/users/iskiselev/events{/privacy}","received_events_url":"https://api.github.com/users/iskiselev/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-07-16T22:44:14Z","updated_at":"2015-07-16T22:50:12Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/sq/JSIL/pulls/749","html_url":"https://github.com/sq/JSIL/pull/749","diff_url":"https://github.com/sq/JSIL/pull/749.diff","patch_url":"https://github.com/sq/JSIL/pull/749.patch"},"body":"Looks like I've found good enough solution for calling virtual object methods (Equals, GetHashCode) on raw JS types (string/int/double and so on).\r\nFor it I've added additional pseudo-calls to `JSReplacement` meta attribute:\r\n- `$explicitThis(method)` - so we can pass information if we should do virtual call\r\n- `$declaringType(method)` - so we can know method declaration type for non-virtual call.\r\n\r\nWith help of this new parameters, I changed instance virtual object methods with calling JSIL special helper functions, that know how to process raw-js object scenarios.\r\n\r\nTest added.\r\n\r\nAfter applying it we can remove hack with adding GetHashCode and Object_Equals method to string prototype - but for simplifying this PR I've not done it here."},"comment":{"url":"https://api.github.com/repos/sq/JSIL/issues/comments/122124855","html_url":"https://github.com/sq/JSIL/pull/749#issuecomment-122124855","issue_url":"https://api.github.com/repos/sq/JSIL/issues/749","id":122124855,"user":{"login":"iskiselev","id":5084964,"avatar_url":"https://avatars.githubusercontent.com/u/5084964?v=3","gravatar_id":"","url":"https://api.github.com/users/iskiselev","html_url":"https://github.com/iskiselev","followers_url":"https://api.github.com/users/iskiselev/followers","following_url":"https://api.github.com/users/iskiselev/following{/other_user}","gists_url":"https://api.github.com/users/iskiselev/gists{/gist_id}","starred_url":"https://api.github.com/users/iskiselev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iskiselev/subscriptions","organizations_url":"https://api.github.com/users/iskiselev/orgs","repos_url":"https://api.github.com/users/iskiselev/repos","events_url":"https://api.github.com/users/iskiselev/events{/privacy}","received_events_url":"https://api.github.com/users/iskiselev/received_events","type":"User","site_admin":false},"created_at":"2015-07-16T22:50:12Z","updated_at":"2015-07-16T22:50:12Z","body":"This should resolve #240 , #241, #446 ."}}