{"action":"created","comment":{"url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/comments/87746943","pull_request_review_id":8345939,"id":87746943,"diff_hunk":"@@ -0,0 +1,232 @@\n+module SS = Set.Make(String)\n+\n+module X86Compiler = \n+  struct\n+  \n+  open Language.Expr\n+  open StackMachine.Compiler\n+\n+  type opnd = S_R of int | R of int | S of int | M of string | L of int\n+\n+  type x86instruction =\n+    | X86Ret\n+    | X86Set              of operation * opnd\n+    | X86Div              of opnd\n+    | X86Mov              of opnd * opnd\n+    | X86Cmp              of opnd * opnd\n+    | X86Push             of opnd\n+    | X86Pop              of opnd\n+    | X86Call             of string\n+    | X86Label            of int\n+    | X86Jump             of string * int\n+    | X86UnaryOperation   of operation * opnd\n+    | X86BinaryOperation  of operation * opnd * opnd\n+\n+  let rec collect_vars statement =\n+    let rec collect_vars_expression expression =\n+      match expression with\n+      | Const           _         -> SS.empty\n+      | Var             s         -> SS.singleton s\n+      | UnaryOperation  (_, x)    -> collect_vars_expression x \n+      | BinaryOperation (_, l, r) -> SS.union (collect_vars_expression l) (collect_vars_expression r)\n+      | Comparison      (_, l, r) -> SS.union (collect_vars_expression l) (collect_vars_expression r)\n+    in\n+    match statement with\n+    | Skip                  -> SS.empty\n+    | Seq     (l, r)        -> SS.union (collect_vars l) (collect_vars r)\n+    | Assign  (x, e)        -> SS.union (SS.singleton x) (collect_vars_expression e)\n+    | Write   e             -> collect_vars_expression e\n+    | Read    x             -> SS.singleton x\n+    | If      (cond, l, r)  -> SS.union (collect_vars_expression cond) (SS.union (collect_vars l) (collect_vars r)) \n+    | While   (cond, l)     -> SS.union (collect_vars_expression cond) (collect_vars l)\n+\n+  let x86regs = [|\"%esp\"; \"%ebp\"; \"%eax\"; \"%edx\"; \"%ecx\"; \"%ebx\"; \"%esi\"; \"%edi\"|]\n+  let x86small_regs = [|\"%al\"; \"%dl\"; \"%bl\"; \"%cl\"|]\n+\n+  let num_of_regs = Array.length x86regs\n+  let num_of_small_regs = Array.length x86small_regs\n+\n+  let word_size = 4\n+\n+  let x86esp = R 0\n+  let x86ebp = R 1\n+  let x86eax = R 2\n+  let x86edx = R 3\n+\n+  let x86al = S_R 0\n+  let x86dl = S_R 1\n+  let x86bl = S_R 2 \n+  let x86cl = S_R 3\n+\n+  let allocate stack =\n+    match stack with\n+    | []                              -> R 4 (* preserve esp, ebp, eax and edx for stuff :) *)\n+    | (S n)::_                        -> S (n+1)\n+    | (R n)::_ when n < num_of_regs-1 -> R (n+1)\n+    | _                               -> S 0\n+\n+  let x86compile : stack_instruction list -> x86instruction list = fun code ->\n+    let x86addStack s =\n+      match s with\n+      | S _ -> [X86BinaryOperation (Sub, L word_size, x86esp)]\n+      | _   -> []\n+    in\n+    \n+    let x86subStack s =\n+      match s with\n+      | S _ -> [X86BinaryOperation (Add, L word_size, x86esp)]\n+      | _   -> []\n+    in\n+\n+    let rec x86compile' stack code =\n+      let compile_comparison operation stack code =\n+        match stack with\n+        | [] | _::[]    -> assert false\n+        | y::x::stack'  ->\n+          let result =\n+            match x with\n+            | R _ -> (x::stack', [X86Cmp (y, x); X86Mov(L 0, x86eax); X86Set (operation, x86al); X86Mov(x86eax, x)] @ x86subStack y)\n+            | _   -> (x::stack', [X86Mov (x, x86eax); X86Cmp (y, x86eax); X86Mov(L 0, x86eax); X86Set (operation, x86al); X86Mov (x86eax, x)] @ x86subStack y)\n+          in result\n+      in\n+\n+      let compile_binary_operation operation stack code = \n+        match stack with\n+        | [] | _::[]    -> assert false\n+        | y::x::stack'  ->  \n+          let result = \n+            match x with\n+            | R _ -> (x::stack', [X86BinaryOperation (operation, y, x)] @ x86subStack y)\n+            | _   -> (x::stack', [X86Mov (x, x86eax); X86BinaryOperation (operation, y, x86eax); X86Mov (x86eax, x)] @ x86subStack y)\n+          in result\n+      in\n+      \n+      let compile_logical operation stack code =\n+        match stack with\n+        | [] | _::[]    -> assert false\n+        | y::x::stack'  ->\n+          let to_bool x = [X86Mov (x, x86eax); X86Cmp (L 0, x86eax); X86Mov(L 0, x86eax); X86Set (Neq, x86al); X86Mov (x86eax, x)] in\n+          let (stack', code') = compile_binary_operation operation stack code in\n+          (stack', to_bool x @ to_bool y @ code')\n+      in\n+\n+      let compile_unary_operation operation stack code =\n+        match stack with\n+        | []        -> assert false\n+        | x::stack' -> (stack, [X86UnaryOperation (operation, x)])\n+      in\n+\n+      match code with\n+      | []       -> []\n+      | i::code' ->\n+        let (stack', x86code) =\n+          match i with\n+          | S_READ     ->\n+            let s = allocate stack in\n+            (s::stack, [X86Call \"read\"; X86Mov (x86eax, s)] @ x86addStack s)\n+          | S_WRITE    ->\n+            let result = \n+              match stack with\n+              | []        -> assert false\n+              | s::stack' -> (stack', [X86Push s; X86Call \"write\"] @ x86subStack (S 0) @ x86subStack s)\n+            in result\n+          | S_PUSH n   ->\n+            let s = allocate stack in\n+            (s::stack, [X86Mov (L n, s)] @ x86addStack s)\n+          | S_LD x     ->\n+            let s = allocate stack in\n+            let result = \n+              match s with\n+              | R _ -> (s::stack, [X86Mov (M x, s)])\n+              | _   -> (s::stack, [X86Mov (M x, x86eax); X86Mov (x86eax, s); X86BinaryOperation (Sub, L word_size, x86esp)])\n+            in result\n+          | S_ST x     ->\n+            let result = \n+              match stack with\n+              | []        -> assert false\n+              | s::stack' ->\n+                let result = \n+                  match s with\n+                  | R _ -> (stack', [X86Mov (s, M x)])\n+                  | _   -> (stack', [X86Mov (s, x86eax); X86Mov(x86eax, M x); X86BinaryOperation (Add, L word_size, x86esp)])\n+                in result\n+            in result\n+          | S_UNARY_OPERATION op    -> compile_unary_operation op stack code\n+          | S_BINARY_OPERATION Div  ->\n+            let result =\n+              match stack with\n+              | [] | _::[]    -> assert false","path":"src/X86.ml","position":158,"original_position":158,"commit_id":"97779db337f81162d3792e0f3bce7eba87f79057","original_commit_id":"97779db337f81162d3792e0f3bce7eba87f79057","user":{"login":"anlun","id":711192,"avatar_url":"https://avatars.githubusercontent.com/u/711192?v=3","gravatar_id":"","url":"https://api.github.com/users/anlun","html_url":"https://github.com/anlun","followers_url":"https://api.github.com/users/anlun/followers","following_url":"https://api.github.com/users/anlun/following{/other_user}","gists_url":"https://api.github.com/users/anlun/gists{/gist_id}","starred_url":"https://api.github.com/users/anlun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anlun/subscriptions","organizations_url":"https://api.github.com/users/anlun/orgs","repos_url":"https://api.github.com/users/anlun/repos","events_url":"https://api.github.com/users/anlun/events{/privacy}","received_events_url":"https://api.github.com/users/anlun/received_events","type":"User","site_admin":false},"body":"`assert false` --- не информативно. Лучше `failwith` с соответствующим комментарием.","created_at":"2016-11-14T07:02:10Z","updated_at":"2016-11-14T07:02:10Z","html_url":"https://github.com/dboulytchev/sample-compiler/pull/54#discussion_r87746943","pull_request_url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54","_links":{"self":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/comments/87746943"},"html":{"href":"https://github.com/dboulytchev/sample-compiler/pull/54#discussion_r87746943"},"pull_request":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54"}}},"pull_request":{"url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54","id":93311044,"html_url":"https://github.com/dboulytchev/sample-compiler/pull/54","diff_url":"https://github.com/dboulytchev/sample-compiler/pull/54.diff","patch_url":"https://github.com/dboulytchev/sample-compiler/pull/54.patch","issue_url":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/54","number":54,"state":"open","locked":false,"title":"Ребрик Юрий. Сделаны 3 первых дз (loops, loops x86)","user":{"login":"Rebryk","id":4231665,"avatar_url":"https://avatars.githubusercontent.com/u/4231665?v=3","gravatar_id":"","url":"https://api.github.com/users/Rebryk","html_url":"https://github.com/Rebryk","followers_url":"https://api.github.com/users/Rebryk/followers","following_url":"https://api.github.com/users/Rebryk/following{/other_user}","gists_url":"https://api.github.com/users/Rebryk/gists{/gist_id}","starred_url":"https://api.github.com/users/Rebryk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rebryk/subscriptions","organizations_url":"https://api.github.com/users/Rebryk/orgs","repos_url":"https://api.github.com/users/Rebryk/repos","events_url":"https://api.github.com/users/Rebryk/events{/privacy}","received_events_url":"https://api.github.com/users/Rebryk/received_events","type":"User","site_admin":false},"body":"К сожалению, много изменений. \r\nТолько вот переехал на native.\r\n@anlun ","created_at":"2016-11-11T10:34:22Z","updated_at":"2016-11-14T07:02:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54/commits","review_comments_url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54/comments","review_comment_url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/54/comments","statuses_url":"https://api.github.com/repos/dboulytchev/sample-compiler/statuses/97779db337f81162d3792e0f3bce7eba87f79057","head":{"label":"Rebryk:master","ref":"master","sha":"97779db337f81162d3792e0f3bce7eba87f79057","user":{"login":"Rebryk","id":4231665,"avatar_url":"https://avatars.githubusercontent.com/u/4231665?v=3","gravatar_id":"","url":"https://api.github.com/users/Rebryk","html_url":"https://github.com/Rebryk","followers_url":"https://api.github.com/users/Rebryk/followers","following_url":"https://api.github.com/users/Rebryk/following{/other_user}","gists_url":"https://api.github.com/users/Rebryk/gists{/gist_id}","starred_url":"https://api.github.com/users/Rebryk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rebryk/subscriptions","organizations_url":"https://api.github.com/users/Rebryk/orgs","repos_url":"https://api.github.com/users/Rebryk/repos","events_url":"https://api.github.com/users/Rebryk/events{/privacy}","received_events_url":"https://api.github.com/users/Rebryk/received_events","type":"User","site_admin":false},"repo":{"id":68366618,"name":"SPbAU-Compilers","full_name":"Rebryk/SPbAU-Compilers","owner":{"login":"Rebryk","id":4231665,"avatar_url":"https://avatars.githubusercontent.com/u/4231665?v=3","gravatar_id":"","url":"https://api.github.com/users/Rebryk","html_url":"https://github.com/Rebryk","followers_url":"https://api.github.com/users/Rebryk/followers","following_url":"https://api.github.com/users/Rebryk/following{/other_user}","gists_url":"https://api.github.com/users/Rebryk/gists{/gist_id}","starred_url":"https://api.github.com/users/Rebryk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rebryk/subscriptions","organizations_url":"https://api.github.com/users/Rebryk/orgs","repos_url":"https://api.github.com/users/Rebryk/repos","events_url":"https://api.github.com/users/Rebryk/events{/privacy}","received_events_url":"https://api.github.com/users/Rebryk/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Rebryk/SPbAU-Compilers","description":"SPbAU Compilers course (Term 5)","fork":true,"url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers","forks_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/forks","keys_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/teams","hooks_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/hooks","issue_events_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/issues/events{/number}","events_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/events","assignees_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/assignees{/user}","branches_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/branches{/branch}","tags_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/tags","blobs_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/git/refs{/sha}","trees_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/statuses/{sha}","languages_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/languages","stargazers_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/stargazers","contributors_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/contributors","subscribers_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/subscribers","subscription_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/subscription","commits_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/commits{/sha}","git_commits_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/git/commits{/sha}","comments_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/comments{/number}","issue_comment_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/issues/comments{/number}","contents_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/contents/{+path}","compare_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/merges","archive_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/downloads","issues_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/issues{/number}","pulls_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/pulls{/number}","milestones_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/milestones{/number}","notifications_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/labels{/name}","releases_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/releases{/id}","deployments_url":"https://api.github.com/repos/Rebryk/SPbAU-Compilers/deployments","created_at":"2016-09-16T09:10:05Z","updated_at":"2016-11-10T23:05:00Z","pushed_at":"2016-11-11T10:30:38Z","git_url":"git://github.com/Rebryk/SPbAU-Compilers.git","ssh_url":"git@github.com:Rebryk/SPbAU-Compilers.git","clone_url":"https://github.com/Rebryk/SPbAU-Compilers.git","svn_url":"https://github.com/Rebryk/SPbAU-Compilers","homepage":"","size":10470,"stargazers_count":0,"watchers_count":0,"language":"Makefile","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dboulytchev:master","ref":"master","sha":"2d05de0291480c0f2d73b364aaca92464b047f27","user":{"login":"dboulytchev","id":483931,"avatar_url":"https://avatars.githubusercontent.com/u/483931?v=3","gravatar_id":"","url":"https://api.github.com/users/dboulytchev","html_url":"https://github.com/dboulytchev","followers_url":"https://api.github.com/users/dboulytchev/followers","following_url":"https://api.github.com/users/dboulytchev/following{/other_user}","gists_url":"https://api.github.com/users/dboulytchev/gists{/gist_id}","starred_url":"https://api.github.com/users/dboulytchev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dboulytchev/subscriptions","organizations_url":"https://api.github.com/users/dboulytchev/orgs","repos_url":"https://api.github.com/users/dboulytchev/repos","events_url":"https://api.github.com/users/dboulytchev/events{/privacy}","received_events_url":"https://api.github.com/users/dboulytchev/received_events","type":"User","site_admin":false},"repo":{"id":67738744,"name":"sample-compiler","full_name":"dboulytchev/sample-compiler","owner":{"login":"dboulytchev","id":483931,"avatar_url":"https://avatars.githubusercontent.com/u/483931?v=3","gravatar_id":"","url":"https://api.github.com/users/dboulytchev","html_url":"https://github.com/dboulytchev","followers_url":"https://api.github.com/users/dboulytchev/followers","following_url":"https://api.github.com/users/dboulytchev/following{/other_user}","gists_url":"https://api.github.com/users/dboulytchev/gists{/gist_id}","starred_url":"https://api.github.com/users/dboulytchev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dboulytchev/subscriptions","organizations_url":"https://api.github.com/users/dboulytchev/orgs","repos_url":"https://api.github.com/users/dboulytchev/repos","events_url":"https://api.github.com/users/dboulytchev/events{/privacy}","received_events_url":"https://api.github.com/users/dboulytchev/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dboulytchev/sample-compiler","description":null,"fork":false,"url":"https://api.github.com/repos/dboulytchev/sample-compiler","forks_url":"https://api.github.com/repos/dboulytchev/sample-compiler/forks","keys_url":"https://api.github.com/repos/dboulytchev/sample-compiler/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dboulytchev/sample-compiler/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dboulytchev/sample-compiler/teams","hooks_url":"https://api.github.com/repos/dboulytchev/sample-compiler/hooks","issue_events_url":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/events{/number}","events_url":"https://api.github.com/repos/dboulytchev/sample-compiler/events","assignees_url":"https://api.github.com/repos/dboulytchev/sample-compiler/assignees{/user}","branches_url":"https://api.github.com/repos/dboulytchev/sample-compiler/branches{/branch}","tags_url":"https://api.github.com/repos/dboulytchev/sample-compiler/tags","blobs_url":"https://api.github.com/repos/dboulytchev/sample-compiler/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dboulytchev/sample-compiler/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dboulytchev/sample-compiler/git/refs{/sha}","trees_url":"https://api.github.com/repos/dboulytchev/sample-compiler/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dboulytchev/sample-compiler/statuses/{sha}","languages_url":"https://api.github.com/repos/dboulytchev/sample-compiler/languages","stargazers_url":"https://api.github.com/repos/dboulytchev/sample-compiler/stargazers","contributors_url":"https://api.github.com/repos/dboulytchev/sample-compiler/contributors","subscribers_url":"https://api.github.com/repos/dboulytchev/sample-compiler/subscribers","subscription_url":"https://api.github.com/repos/dboulytchev/sample-compiler/subscription","commits_url":"https://api.github.com/repos/dboulytchev/sample-compiler/commits{/sha}","git_commits_url":"https://api.github.com/repos/dboulytchev/sample-compiler/git/commits{/sha}","comments_url":"https://api.github.com/repos/dboulytchev/sample-compiler/comments{/number}","issue_comment_url":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/comments{/number}","contents_url":"https://api.github.com/repos/dboulytchev/sample-compiler/contents/{+path}","compare_url":"https://api.github.com/repos/dboulytchev/sample-compiler/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dboulytchev/sample-compiler/merges","archive_url":"https://api.github.com/repos/dboulytchev/sample-compiler/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dboulytchev/sample-compiler/downloads","issues_url":"https://api.github.com/repos/dboulytchev/sample-compiler/issues{/number}","pulls_url":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls{/number}","milestones_url":"https://api.github.com/repos/dboulytchev/sample-compiler/milestones{/number}","notifications_url":"https://api.github.com/repos/dboulytchev/sample-compiler/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dboulytchev/sample-compiler/labels{/name}","releases_url":"https://api.github.com/repos/dboulytchev/sample-compiler/releases{/id}","deployments_url":"https://api.github.com/repos/dboulytchev/sample-compiler/deployments","created_at":"2016-09-08T20:41:59Z","updated_at":"2016-09-08T20:45:43Z","pushed_at":"2016-11-13T15:36:51Z","git_url":"git://github.com/dboulytchev/sample-compiler.git","ssh_url":"git@github.com:dboulytchev/sample-compiler.git","clone_url":"https://github.com/dboulytchev/sample-compiler.git","svn_url":"https://github.com/dboulytchev/sample-compiler","homepage":null,"size":22334,"stargazers_count":0,"watchers_count":0,"language":"Makefile","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"open_issues_count":11,"forks":15,"open_issues":11,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54"},"html":{"href":"https://github.com/dboulytchev/sample-compiler/pull/54"},"issue":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/54"},"comments":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/issues/54/comments"},"review_comments":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54/comments"},"review_comment":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/pulls/54/commits"},"statuses":{"href":"https://api.github.com/repos/dboulytchev/sample-compiler/statuses/97779db337f81162d3792e0f3bce7eba87f79057"}}}}
{"actor":{"display_login":"anlun"}}