{"action":"closed","number":789,"pull_request":{"url":"https://api.github.com/repos/Samsung/jerryscript/pulls/789","id":53895348,"html_url":"https://github.com/Samsung/jerryscript/pull/789","diff_url":"https://github.com/Samsung/jerryscript/pull/789.diff","patch_url":"https://github.com/Samsung/jerryscript/pull/789.patch","issue_url":"https://api.github.com/repos/Samsung/jerryscript/issues/789","number":789,"state":"closed","locked":false,"title":"Parser optimizations","user":{"login":"sand1k","id":9209835,"avatar_url":"https://avatars.githubusercontent.com/u/9209835?v=3","gravatar_id":"","url":"https://api.github.com/users/sand1k","html_url":"https://github.com/sand1k","followers_url":"https://api.github.com/users/sand1k/followers","following_url":"https://api.github.com/users/sand1k/following{/other_user}","gists_url":"https://api.github.com/users/sand1k/gists{/gist_id}","starred_url":"https://api.github.com/users/sand1k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sand1k/subscriptions","organizations_url":"https://api.github.com/users/sand1k/orgs","repos_url":"https://api.github.com/users/sand1k/repos","events_url":"https://api.github.com/users/sand1k/events{/privacy}","received_events_url":"https://api.github.com/users/sand1k/received_events","type":"User","site_admin":false},"body":"This pull request is the first one from set of patches aimed to improve frontend of the engine.\r\nIn this patch we greatly optimized parser and bytecode generation, reduced memory consumption and parsing time. Here is the short summary of improvements made within this PR:\r\n- Parser has no recursion\r\n- Higher quality of generated bytecode (generates less instructions)\r\n- Peak memory consumption of parser is 2x times lower on merged *.js files from IoTjs\r\n- ~10x times faster parsing of IoTjs\r\n- Full test262 run takes ~17 mins instead of ~35 mins with previous parser. Our upcoming patch is going to reduce this time even more.\r\n- 14 tests from test262 which failed with OUT_OF_MEMORY and OUT_OF_REGISTERS were fixed, due to much lower memory consumption of parser and better bytecode generation\r\n- Fixed native stack usage\r\n- On SunSpider 1.0.2 we got ~12% lower memory consumption and ~10% faster performance with new parser.\r\n\r\nThis results are not final and will be improved with further patches, which include:\r\n- Performance improvement of literal processing (on test262 ~80% of time is spent in this part)\r\n- Parse-level bytecode optimizations (~30% reduction of generated bytecode)\r\n\r\nDetailed measurements for this patch could be found below.\r\n\r\n__Peaks for iot.js (measured on RPi2):__\r\n// Master\r\n./jr-old_parser_mem_stats --parse-only --mem-stats merged.js\r\n```\r\nHeap stats:\r\n  Heap size = 260096 bytes\r\n  Chunk size = 64 bytes\r\n  Allocated chunks count = 0\r\n  Allocated = 0 bytes\r\n  Waste = 0 bytes\r\n  Peak allocated chunks count = 3372\r\n  Peak allocated = 212251 bytes\r\n  Peak waste = 3557 bytes\r\n```\r\n// Newest (ec059dd63f63639ea153b8b243d60b4c0e7deb55)\r\n// ./jr-new_parser_mem_stats --parse-only --mem-stats merged.js\r\n```\r\nHeap stats:\r\n  Heap size = 260096 bytes\r\n  Chunk size = 64 bytes\r\n  Allocated chunks count = 0\r\n  Allocated = 0 bytes\r\n  Waste = 0 bytes\r\n  Peak allocated chunks count = 1329\r\n  Peak allocated = 76940 bytes\r\n  Peak waste = 10472 bytes\r\n```\r\n__Parsing time for iot.js (measured on RPi2):__\r\ntime ./jr-old_parser --parse-only merged.js\r\n\r\nreal  0m8.460s\r\nuser  0m8.460s\r\nsys 0m0.000s\r\n\r\ntime ./jr-new_parser --parse-only merged.js\r\n\r\nreal  0m0.732s\r\nuser  0m0.728s\r\nsys 0m0.000s\r\n\r\nImprovement: +91%\r\n\r\n__Sunspider results__\r\n\r\nBenchmark| RSS | Perf\r\n------------ | -------------|--------------\r\n                                ./sunspider-1.0.2/3d-cube.js |    128 ->    112 (12.500%) | 1.94833 ->   1.61 (17.365%) | \r\n                    ./sunspider-1.0.2/access-binary-trees.js |     84 ->     84 (0.000%) | 1.03667 -> 1.00167 (3.376%) | \r\n                        ./sunspider-1.0.2/access-fannkuch.js |     48 ->     40 (16.667%) |  4.895 -> 4.81167 (1.702%) | \r\n                           ./sunspider-1.0.2/access-nbody.js |     60 ->     48 (20.000%) |   2.42 -> 2.22667 (7.989%) | \r\n               ./sunspider-1.0.2/bitops-3bit-bits-in-byte.js |     36 ->     32 (11.111%) | 1.29667 -> 1.13333 (12.597%) | \r\n                    ./sunspider-1.0.2/bitops-bits-in-byte.js |     36 ->     32 (11.111%) |  1.755 -> 1.45667 (16.999%) | \r\n                     ./sunspider-1.0.2/bitops-bitwise-and.js |     32 ->     32 (0.000%) | 1.85167 ->   1.63 (11.971%) | \r\n                  ./sunspider-1.0.2/controlflow-recursive.js |    216 ->    220 (-1.852%) | 0.858333 -> 0.786667 (8.349%) | \r\n                            ./sunspider-1.0.2/crypto-sha1.js |    140 ->    132 (5.714%) |   8.24 -> 8.52167 (-3.418%) | \r\n                      ./sunspider-1.0.2/date-format-xparb.js |     92 ->     72 (21.739%) | 1.23667 -> 1.00667 (18.598%) | \r\n                            ./sunspider-1.0.2/math-cordic.js |     44 ->     40 (9.091%) |  1.905 -> 1.63167 (14.348%) | \r\n                      ./sunspider-1.0.2/math-partial-sums.js |     44 ->     32 (27.273%) | 1.12667 -> 0.953333 (15.385%) | \r\n                     ./sunspider-1.0.2/math-spectral-norm.js |     48 ->     40 (16.667%) |   1.13 ->   1.09 (3.540%) | \r\n                           ./sunspider-1.0.2/string-fasta.js |     56 ->     48 (14.286%) |  3.235 -> 3.01667 (6.749%) | \r\n                                              Geometric mean |                         12.1303% |                          9.9108%\r\n\r\n\r\n__Test262 runnting time__\r\nOld parser 35 min\r\nNew parser 17 min\r\n\r\n\r\n__Number of instructions__\r\nIot.js:\r\nOld parser: 10170\r\nNew parser: 9628\r\n\r\nTest262 header files (cth.js sta.js ed.js testBuiltInObject.js testIntl.js):\r\nOld parser: 6542\r\nNew parser: 6063\r\n\r\n\r\n__Fixed tests from Test262__\r\nS11.7.1_A4_T1 \r\nS11.7.1_A4_T2 \r\nS11.7.1_A4_T3 \r\nS11.7.1_A4_T4\r\nS11.7.2_A4_T1 \r\nS11.7.2_A4_T2 \r\nS11.7.2_A4_T3 \r\nS11.7.2_A4_T4 \r\nS11.7.3_A4_T1 \r\nS11.7.3_A4_T2 \r\nS11.7.3_A4_T3 \r\nS11.7.3_A4_T4 \r\nS12.6.4_A5.1 \r\nS12.6.4_A5 ","created_at":"2015-12-16T20:40:32Z","updated_at":"2015-12-23T11:57:04Z","closed_at":"2015-12-23T11:57:03Z","merged_at":"2015-12-23T11:57:03Z","merge_commit_sha":"4ed550168709024a09ce6036b9c3385ea8cb7a4b","assignee":{"login":"egavrin","id":782710,"avatar_url":"https://avatars.githubusercontent.com/u/782710?v=3","gravatar_id":"","url":"https://api.github.com/users/egavrin","html_url":"https://github.com/egavrin","followers_url":"https://api.github.com/users/egavrin/followers","following_url":"https://api.github.com/users/egavrin/following{/other_user}","gists_url":"https://api.github.com/users/egavrin/gists{/gist_id}","starred_url":"https://api.github.com/users/egavrin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/egavrin/subscriptions","organizations_url":"https://api.github.com/users/egavrin/orgs","repos_url":"https://api.github.com/users/egavrin/repos","events_url":"https://api.github.com/users/egavrin/events{/privacy}","received_events_url":"https://api.github.com/users/egavrin/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/Samsung/jerryscript/milestones/4","html_url":"https://github.com/Samsung/jerryscript/milestones/Engine%20optimization%20&%20enhancement","labels_url":"https://api.github.com/repos/Samsung/jerryscript/milestones/4/labels","id":1188990,"number":4,"title":"Engine optimization & enhancement","description":"","creator":{"login":"egavrin","id":782710,"avatar_url":"https://avatars.githubusercontent.com/u/782710?v=3","gravatar_id":"","url":"https://api.github.com/users/egavrin","html_url":"https://github.com/egavrin","followers_url":"https://api.github.com/users/egavrin/followers","following_url":"https://api.github.com/users/egavrin/following{/other_user}","gists_url":"https://api.github.com/users/egavrin/gists{/gist_id}","starred_url":"https://api.github.com/users/egavrin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/egavrin/subscriptions","organizations_url":"https://api.github.com/users/egavrin/orgs","repos_url":"https://api.github.com/users/egavrin/repos","events_url":"https://api.github.com/users/egavrin/events{/privacy}","received_events_url":"https://api.github.com/users/egavrin/received_events","type":"User","site_admin":false},"open_issues":32,"closed_issues":77,"state":"open","created_at":"2015-07-01T13:22:04Z","updated_at":"2015-12-23T11:57:03Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/Samsung/jerryscript/pulls/789/commits","review_comments_url":"https://api.github.com/repos/Samsung/jerryscript/pulls/789/comments","review_comment_url":"https://api.github.com/repos/Samsung/jerryscript/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Samsung/jerryscript/issues/789/comments","statuses_url":"https://api.github.com/repos/Samsung/jerryscript/statuses/50d124bfc32e399c2013b4e3e79265d6b98d073c","head":{"label":"ruben-ayrapetyan:parser-optimizations","ref":"parser-optimizations","sha":"50d124bfc32e399c2013b4e3e79265d6b98d073c","user":{"login":"ruben-ayrapetyan","id":11939769,"avatar_url":"https://avatars.githubusercontent.com/u/11939769?v=3","gravatar_id":"","url":"https://api.github.com/users/ruben-ayrapetyan","html_url":"https://github.com/ruben-ayrapetyan","followers_url":"https://api.github.com/users/ruben-ayrapetyan/followers","following_url":"https://api.github.com/users/ruben-ayrapetyan/following{/other_user}","gists_url":"https://api.github.com/users/ruben-ayrapetyan/gists{/gist_id}","starred_url":"https://api.github.com/users/ruben-ayrapetyan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruben-ayrapetyan/subscriptions","organizations_url":"https://api.github.com/users/ruben-ayrapetyan/orgs","repos_url":"https://api.github.com/users/ruben-ayrapetyan/repos","events_url":"https://api.github.com/users/ruben-ayrapetyan/events{/privacy}","received_events_url":"https://api.github.com/users/ruben-ayrapetyan/received_events","type":"User","site_admin":false},"repo":{"id":38338173,"name":"jerryscript","full_name":"ruben-ayrapetyan/jerryscript","owner":{"login":"ruben-ayrapetyan","id":11939769,"avatar_url":"https://avatars.githubusercontent.com/u/11939769?v=3","gravatar_id":"","url":"https://api.github.com/users/ruben-ayrapetyan","html_url":"https://github.com/ruben-ayrapetyan","followers_url":"https://api.github.com/users/ruben-ayrapetyan/followers","following_url":"https://api.github.com/users/ruben-ayrapetyan/following{/other_user}","gists_url":"https://api.github.com/users/ruben-ayrapetyan/gists{/gist_id}","starred_url":"https://api.github.com/users/ruben-ayrapetyan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruben-ayrapetyan/subscriptions","organizations_url":"https://api.github.com/users/ruben-ayrapetyan/orgs","repos_url":"https://api.github.com/users/ruben-ayrapetyan/repos","events_url":"https://api.github.com/users/ruben-ayrapetyan/events{/privacy}","received_events_url":"https://api.github.com/users/ruben-ayrapetyan/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ruben-ayrapetyan/jerryscript","description":"JerryScript","fork":true,"url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript","forks_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/forks","keys_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/teams","hooks_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/hooks","issue_events_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/issues/events{/number}","events_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/events","assignees_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/assignees{/user}","branches_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/branches{/branch}","tags_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/tags","blobs_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/git/refs{/sha}","trees_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/statuses/{sha}","languages_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/languages","stargazers_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/stargazers","contributors_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/contributors","subscribers_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/subscribers","subscription_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/subscription","commits_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/commits{/sha}","git_commits_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/git/commits{/sha}","comments_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/comments{/number}","issue_comment_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/issues/comments{/number}","contents_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/contents/{+path}","compare_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/merges","archive_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/downloads","issues_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/issues{/number}","pulls_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/pulls{/number}","milestones_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/milestones{/number}","notifications_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/labels{/name}","releases_url":"https://api.github.com/repos/ruben-ayrapetyan/jerryscript/releases{/id}","created_at":"2015-06-30T23:22:05Z","updated_at":"2015-09-08T19:09:20Z","pushed_at":"2015-12-23T11:27:50Z","git_url":"git://github.com/ruben-ayrapetyan/jerryscript.git","ssh_url":"git@github.com:ruben-ayrapetyan/jerryscript.git","clone_url":"https://github.com/ruben-ayrapetyan/jerryscript.git","svn_url":"https://github.com/ruben-ayrapetyan/jerryscript","homepage":"","size":7257,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Samsung:master","ref":"master","sha":"4f4407121bb52de99be9b00f980a7802a54dcc53","user":{"login":"Samsung","id":6210390,"avatar_url":"https://avatars.githubusercontent.com/u/6210390?v=3","gravatar_id":"","url":"https://api.github.com/users/Samsung","html_url":"https://github.com/Samsung","followers_url":"https://api.github.com/users/Samsung/followers","following_url":"https://api.github.com/users/Samsung/following{/other_user}","gists_url":"https://api.github.com/users/Samsung/gists{/gist_id}","starred_url":"https://api.github.com/users/Samsung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Samsung/subscriptions","organizations_url":"https://api.github.com/users/Samsung/orgs","repos_url":"https://api.github.com/users/Samsung/repos","events_url":"https://api.github.com/users/Samsung/events{/privacy}","received_events_url":"https://api.github.com/users/Samsung/received_events","type":"Organization","site_admin":false},"repo":{"id":33339660,"name":"jerryscript","full_name":"Samsung/jerryscript","owner":{"login":"Samsung","id":6210390,"avatar_url":"https://avatars.githubusercontent.com/u/6210390?v=3","gravatar_id":"","url":"https://api.github.com/users/Samsung","html_url":"https://github.com/Samsung","followers_url":"https://api.github.com/users/Samsung/followers","following_url":"https://api.github.com/users/Samsung/following{/other_user}","gists_url":"https://api.github.com/users/Samsung/gists{/gist_id}","starred_url":"https://api.github.com/users/Samsung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Samsung/subscriptions","organizations_url":"https://api.github.com/users/Samsung/orgs","repos_url":"https://api.github.com/users/Samsung/repos","events_url":"https://api.github.com/users/Samsung/events{/privacy}","received_events_url":"https://api.github.com/users/Samsung/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Samsung/jerryscript","description":"Ultra-lightweight JavaScript engine for Internet of Things. http://www.jerryscript.net","fork":false,"url":"https://api.github.com/repos/Samsung/jerryscript","forks_url":"https://api.github.com/repos/Samsung/jerryscript/forks","keys_url":"https://api.github.com/repos/Samsung/jerryscript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Samsung/jerryscript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Samsung/jerryscript/teams","hooks_url":"https://api.github.com/repos/Samsung/jerryscript/hooks","issue_events_url":"https://api.github.com/repos/Samsung/jerryscript/issues/events{/number}","events_url":"https://api.github.com/repos/Samsung/jerryscript/events","assignees_url":"https://api.github.com/repos/Samsung/jerryscript/assignees{/user}","branches_url":"https://api.github.com/repos/Samsung/jerryscript/branches{/branch}","tags_url":"https://api.github.com/repos/Samsung/jerryscript/tags","blobs_url":"https://api.github.com/repos/Samsung/jerryscript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Samsung/jerryscript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Samsung/jerryscript/git/refs{/sha}","trees_url":"https://api.github.com/repos/Samsung/jerryscript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Samsung/jerryscript/statuses/{sha}","languages_url":"https://api.github.com/repos/Samsung/jerryscript/languages","stargazers_url":"https://api.github.com/repos/Samsung/jerryscript/stargazers","contributors_url":"https://api.github.com/repos/Samsung/jerryscript/contributors","subscribers_url":"https://api.github.com/repos/Samsung/jerryscript/subscribers","subscription_url":"https://api.github.com/repos/Samsung/jerryscript/subscription","commits_url":"https://api.github.com/repos/Samsung/jerryscript/commits{/sha}","git_commits_url":"https://api.github.com/repos/Samsung/jerryscript/git/commits{/sha}","comments_url":"https://api.github.com/repos/Samsung/jerryscript/comments{/number}","issue_comment_url":"https://api.github.com/repos/Samsung/jerryscript/issues/comments{/number}","contents_url":"https://api.github.com/repos/Samsung/jerryscript/contents/{+path}","compare_url":"https://api.github.com/repos/Samsung/jerryscript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Samsung/jerryscript/merges","archive_url":"https://api.github.com/repos/Samsung/jerryscript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Samsung/jerryscript/downloads","issues_url":"https://api.github.com/repos/Samsung/jerryscript/issues{/number}","pulls_url":"https://api.github.com/repos/Samsung/jerryscript/pulls{/number}","milestones_url":"https://api.github.com/repos/Samsung/jerryscript/milestones{/number}","notifications_url":"https://api.github.com/repos/Samsung/jerryscript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Samsung/jerryscript/labels{/name}","releases_url":"https://api.github.com/repos/Samsung/jerryscript/releases{/id}","created_at":"2015-04-03T01:10:31Z","updated_at":"2015-12-23T05:26:26Z","pushed_at":"2015-12-23T11:57:03Z","git_url":"git://github.com/Samsung/jerryscript.git","ssh_url":"git@github.com:Samsung/jerryscript.git","clone_url":"https://github.com/Samsung/jerryscript.git","svn_url":"https://github.com/Samsung/jerryscript","homepage":"","size":9091,"stargazers_count":1044,"watchers_count":1044,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":92,"mirror_url":null,"open_issues_count":115,"forks":92,"open_issues":115,"watchers":1044,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Samsung/jerryscript/pulls/789"},"html":{"href":"https://github.com/Samsung/jerryscript/pull/789"},"issue":{"href":"https://api.github.com/repos/Samsung/jerryscript/issues/789"},"comments":{"href":"https://api.github.com/repos/Samsung/jerryscript/issues/789/comments"},"review_comments":{"href":"https://api.github.com/repos/Samsung/jerryscript/pulls/789/comments"},"review_comment":{"href":"https://api.github.com/repos/Samsung/jerryscript/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Samsung/jerryscript/pulls/789/commits"},"statuses":{"href":"https://api.github.com/repos/Samsung/jerryscript/statuses/50d124bfc32e399c2013b4e3e79265d6b98d073c"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"ruben-ayrapetyan","id":11939769,"avatar_url":"https://avatars.githubusercontent.com/u/11939769?v=3","gravatar_id":"","url":"https://api.github.com/users/ruben-ayrapetyan","html_url":"https://github.com/ruben-ayrapetyan","followers_url":"https://api.github.com/users/ruben-ayrapetyan/followers","following_url":"https://api.github.com/users/ruben-ayrapetyan/following{/other_user}","gists_url":"https://api.github.com/users/ruben-ayrapetyan/gists{/gist_id}","starred_url":"https://api.github.com/users/ruben-ayrapetyan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruben-ayrapetyan/subscriptions","organizations_url":"https://api.github.com/users/ruben-ayrapetyan/orgs","repos_url":"https://api.github.com/users/ruben-ayrapetyan/repos","events_url":"https://api.github.com/users/ruben-ayrapetyan/events{/privacy}","received_events_url":"https://api.github.com/users/ruben-ayrapetyan/received_events","type":"User","site_admin":false},"comments":17,"review_comments":28,"commits":2,"additions":8605,"deletions":6959,"changed_files":52}}