{"action":"created","comment":{"url":"https://api.github.com/repos/diffblue/cbmc/pulls/comments/99490384","pull_request_review_id":20169523,"id":99490384,"diff_hunk":"@@ -0,0 +1,1347 @@\n+/*******************************************************************\\\n+\n+Module: Preprocess a goto-programs so that calls to the java String\n+        library are recognized by the string solver\n+\n+Author: Romain Brenguier\n+\n+Date:   September 2016\n+\n+\\*******************************************************************/\n+\n+#include \"string_refine_preprocess.h\"\n+\n+#include <util/std_expr.h>\n+#include <util/symbol_table.h>\n+#include <util/pointer_offset_size.h>\n+#include <util/prefix.h>\n+#include <solvers/refinement/string_expr.h>\n+\n+/*******************************************************************\\\n+\n+Function: string_refine_preprocesst::new_tmp_symbol\n+\n+  Inputs: a name and a type\n+\n+ Outputs: a new symbol\n+\n+ Purpose: add a temporary symbol with the given name and type to the\n+          symbol table and returns it\n+\n+\\*******************************************************************/\n+\n+symbol_exprt string_refine_preprocesst::new_tmp_symbol(\n+  const std::string &name, const typet &type)\n+{\n+  auxiliary_symbolt tmp_symbol;\n+  // TODO: add a prefix to the name to avoid clashing with other\n+  // variables of the program\n+  tmp_symbol.base_name=name;\n+  tmp_symbol.is_static_lifetime=false;\n+  tmp_symbol.mode=ID_java;\n+  tmp_symbol.name=name;\n+  tmp_symbol.type=type;\n+  symbol_table.add(tmp_symbol);\n+  return symbol_exprt(name, type);\n+}\n+\n+/*******************************************************************\\\n+\n+Function: string_refine_preprocesst::new_tmp_symbol\n+\n+  Inputs: a name and a type\n+\n+ Outputs: a new symbol\n+\n+ Purpose: add a symbol with the given name and type to the symbol table\n+          and returns it\n+\n+\\*******************************************************************/\n+\n+symbol_exprt string_refine_preprocesst::new_symbol(\n+  const std::string &prefix, const typet &type, bool static_lifetime)\n+{\n+  symbolt tmp_symbol;\n+  // TODO: add a prefix to the name to avoid clashing with other\n+  // variables of the program\n+  std::ostringstream buf;\n+  buf << prefix << \"_\" << (next_symbol_id++);\n+  std::string name = buf.str();\n+  tmp_symbol.base_name=name;\n+  tmp_symbol.is_static_lifetime=static_lifetime;\n+  tmp_symbol.is_state_var=static_lifetime;\n+  tmp_symbol.is_type=false;\n+  tmp_symbol.is_lvalue=static_lifetime; // not sure about that\n+  tmp_symbol.mode=ID_java;\n+  tmp_symbol.name=name;\n+  tmp_symbol.type=type;\n+  symbol_table.add(tmp_symbol);\n+  return symbol_exprt(name,type);\n+}\n+\n+/*******************************************************************\\\n+\n+Function: string_refine_preprocesst::declare_function\n+\n+  Inputs: a name and a type\n+\n+ Purpose: declare a function with the given name and type\n+\n+\\*******************************************************************/\n+\n+void string_refine_preprocesst::declare_function(\n+  irep_idt function_name, const typet &type)\n+{\n+  auxiliary_symbolt func_symbol;\n+  func_symbol.base_name=function_name;\n+  func_symbol.is_static_lifetime=false;\n+  func_symbol.mode=ID_java;\n+  func_symbol.name=function_name;\n+  func_symbol.type=type;\n+  symbol_table.add(func_symbol);\n+  goto_functions.function_map[function_name];\n+}\n+\n+static bool is_java_string_type(const typet& type)\n+{\n+  if(type.id()==ID_symbol)\n+  {\n+    irep_idt tag=to_symbol_type(type).get_identifier();\n+    return (tag==irep_idt(\"java::java.lang.String\"));\n+  }\n+  else if(type.id()==ID_struct)\n+  {\n+    irep_idt tag=to_struct_type(type).get_tag();\n+    return (tag==irep_idt(\"java.lang.String\"));\n+  }\n+  else\n+    return false;\n+}\n+\n+static bool is_java_string_pointer_type(const typet& type)\n+{\n+  if(type.id()==ID_pointer)\n+  {\n+    pointer_typet pt=to_pointer_type(type);\n+    typet subtype=pt.subtype();\n+    return is_java_string_type(subtype);\n+  }\n+  else return false;\n+}\n+\n+/*******************************************************************    \\\n+\n+Function: string_refine_preprocesst::replace_string_pointer\n+\n+  Inputs: an expression\n+\n+ Outputs: an expression\n+\n+ Purpose: replace string pointers by expressions as expected by the string refinement;\n+          should only be used in arguments of __CPROVER_uninterpreted functions.\n+\n+\\*******************************************************************/\n+\n+exprt string_refine_preprocesst::replace_string_pointer(const exprt& in)\n+{\n+  if(is_java_string_pointer_type(in.type()))\n+  {\n+    exprt clsid=\n+      symbol_exprt(\"java::java.lang.String\", string_typet());\n+    // TODO: we should use a function which is not currently in the code base\n+    // to get the class identifier in this way:\n+    // get_class_identifier_field(in, symbol_typet(\"java::java.lang.Object\"), ns);\n+    auto it=hidden_strings.find(in.op0());\n+    if(in.id()==ID_typecast && it!=hidden_strings.end())\n+\treturn it->second;\n+    else\n+      return string_exprt(in, clsid, true);\n+  }\n+  else return in;\n+}\n+\n+/*******************************************************************\\\n+\n+Function: string_refine_preprocesst::make_cprover_string_assign\n+\n+  Inputs: a goto_program, a position in this program, an expression and a\n+          location\n+\n+ Outputs: an expression\n+\n+ Purpose: Introduce a temporary variable for cprover strings;\n+          returns the cprover_string corresponding to rhs if it is a string\n+          pointer and the original rhs otherwise.\n+\n+\\*******************************************************************/\n+\n+exprt string_refine_preprocesst::make_cprover_string_assign(\n+  goto_programt & goto_program,\n+  goto_programt::instructionst::iterator & i_it,\n+  const exprt & rhs,\n+  source_locationt location)\n+{\n+  if(is_java_string_pointer_type(rhs.type()))\n+  {\n+    auto it=java_to_cprover_strings.find(rhs);\n+    if(it!=java_to_cprover_strings.end())\n+      return it->second;\n+    else\n+    {\n+      debug() << \"string_refine_preprocesst::make_cprover_string_assign \"\n+              << rhs.id() << eom;\n+      exprt clsid=symbol_exprt(\"java::java.lang.String\",string_typet());\n+      // get_class_identifier_field(rhs, symbol_typet(\"java::java.lang.Object\"), ns);\n+      string_exprt new_rhs(rhs, clsid, true);\n+      symbol_exprt lhs=new_symbol(\"cprover_string\", new_rhs.type());\n+      symbol_exprt array_lhs = new_symbol(\n+        \"cprover_string_array\", new_rhs.content().type());\n+      exprt content=new_rhs.content();\n+      // This does not look nice:\n+      new_rhs.op1()=array_lhs;\n+      code_assignt array_assignment(array_lhs, content);\n+      code_typet deref_type;\n+      deref_type.return_type()=array_lhs.type();\n+      code_assignt assignment(lhs, new_rhs);\n+      java_to_cprover_strings[rhs] = lhs;\n+\n+      lhs.add_source_location() = location;\n+      assignment.add_source_location() = location;\n+      array_assignment.add_source_location() = location;\n+      i_it->make_assignment();\n+      i_it->code=array_assignment;\n+      i_it=goto_program.insert_after(i_it);\n+      i_it->make_assignment();\n+      i_it->code=assignment;\n+      i_it=goto_program.insert_after(i_it);\n+      return lhs;\n+    }\n+  }\n+  else return rhs;\n+}\n+\n+/*******************************************************************\\\n+\n+Function: string_refine_preprocesst::make_normal_assign\n+\n+  Inputs: a goto_program, a position in this program, an expression lhs,\n+          a function type, a function name, a vector of arguments, a location\n+          and a signature\n+\n+ Purpose: replace the current instruction by:\n+          > lhs = function_name(arguments) : return_type @ location\n+          If given, signature can force String conversion of given arguments.\n+          The convention for signature is one character by argument\n+          and 'S' denotes string.\n+\n+\\*******************************************************************/\n+\n+void string_refine_preprocesst::make_normal_assign(\n+  goto_programt & goto_program,\n+  goto_programt::instructionst::iterator & i_it,","path":"src/goto-programs/string_refine_preprocess.cpp","position":241,"original_position":241,"commit_id":"2cd801de0ce1580a8386adaa36a207cd3c87eec1","original_commit_id":"2cd801de0ce1580a8386adaa36a207cd3c87eec1","user":{"login":"peterschrammel","id":4222448,"avatar_url":"https://avatars.githubusercontent.com/u/4222448?v=3","gravatar_id":"","url":"https://api.github.com/users/peterschrammel","html_url":"https://github.com/peterschrammel","followers_url":"https://api.github.com/users/peterschrammel/followers","following_url":"https://api.github.com/users/peterschrammel/following{/other_user}","gists_url":"https://api.github.com/users/peterschrammel/gists{/gist_id}","starred_url":"https://api.github.com/users/peterschrammel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/peterschrammel/subscriptions","organizations_url":"https://api.github.com/users/peterschrammel/orgs","repos_url":"https://api.github.com/users/peterschrammel/repos","events_url":"https://api.github.com/users/peterschrammel/events{/privacy}","received_events_url":"https://api.github.com/users/peterschrammel/received_events","type":"User","site_admin":false},"body":"Why do you pass a reference to an iterator when you are not modifying the iterator but only the object where it is pointing to?","created_at":"2017-02-05T14:29:05Z","updated_at":"2017-02-05T14:39:03Z","html_url":"https://github.com/diffblue/cbmc/pull/378#discussion_r99490384","pull_request_url":"https://api.github.com/repos/diffblue/cbmc/pulls/378","_links":{"self":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/comments/99490384"},"html":{"href":"https://github.com/diffblue/cbmc/pull/378#discussion_r99490384"},"pull_request":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/378"}}},"pull_request":{"url":"https://api.github.com/repos/diffblue/cbmc/pulls/378","id":99804022,"html_url":"https://github.com/diffblue/cbmc/pull/378","diff_url":"https://github.com/diffblue/cbmc/pull/378.diff","patch_url":"https://github.com/diffblue/cbmc/pull/378.patch","issue_url":"https://api.github.com/repos/diffblue/cbmc/issues/378","number":378,"state":"open","locked":false,"title":"String refine preprocessing","user":{"login":"romainbrenguier","id":11854194,"avatar_url":"https://avatars.githubusercontent.com/u/11854194?v=3","gravatar_id":"","url":"https://api.github.com/users/romainbrenguier","html_url":"https://github.com/romainbrenguier","followers_url":"https://api.github.com/users/romainbrenguier/followers","following_url":"https://api.github.com/users/romainbrenguier/following{/other_user}","gists_url":"https://api.github.com/users/romainbrenguier/gists{/gist_id}","starred_url":"https://api.github.com/users/romainbrenguier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/romainbrenguier/subscriptions","organizations_url":"https://api.github.com/users/romainbrenguier/orgs","repos_url":"https://api.github.com/users/romainbrenguier/repos","events_url":"https://api.github.com/users/romainbrenguier/events{/privacy}","received_events_url":"https://api.github.com/users/romainbrenguier/received_events","type":"User","site_admin":false},"body":"Preprocessing of goto-programs for the string refinement. \r\nThis pull request includes the changes from https://github.com/diffblue/cbmc/pull/374 which should be merged before.","created_at":"2016-12-31T12:33:41Z","updated_at":"2017-02-05T14:39:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"08e58deb43c630c28f462c376a510792e384f097","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/diffblue/cbmc/pulls/378/commits","review_comments_url":"https://api.github.com/repos/diffblue/cbmc/pulls/378/comments","review_comment_url":"https://api.github.com/repos/diffblue/cbmc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/diffblue/cbmc/issues/378/comments","statuses_url":"https://api.github.com/repos/diffblue/cbmc/statuses/2cd801de0ce1580a8386adaa36a207cd3c87eec1","head":{"label":"romainbrenguier:string-refine-preprocessing","ref":"string-refine-preprocessing","sha":"2cd801de0ce1580a8386adaa36a207cd3c87eec1","user":{"login":"romainbrenguier","id":11854194,"avatar_url":"https://avatars.githubusercontent.com/u/11854194?v=3","gravatar_id":"","url":"https://api.github.com/users/romainbrenguier","html_url":"https://github.com/romainbrenguier","followers_url":"https://api.github.com/users/romainbrenguier/followers","following_url":"https://api.github.com/users/romainbrenguier/following{/other_user}","gists_url":"https://api.github.com/users/romainbrenguier/gists{/gist_id}","starred_url":"https://api.github.com/users/romainbrenguier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/romainbrenguier/subscriptions","organizations_url":"https://api.github.com/users/romainbrenguier/orgs","repos_url":"https://api.github.com/users/romainbrenguier/repos","events_url":"https://api.github.com/users/romainbrenguier/events{/privacy}","received_events_url":"https://api.github.com/users/romainbrenguier/received_events","type":"User","site_admin":false},"repo":{"id":64766217,"name":"cbmc","full_name":"romainbrenguier/cbmc","owner":{"login":"romainbrenguier","id":11854194,"avatar_url":"https://avatars.githubusercontent.com/u/11854194?v=3","gravatar_id":"","url":"https://api.github.com/users/romainbrenguier","html_url":"https://github.com/romainbrenguier","followers_url":"https://api.github.com/users/romainbrenguier/followers","following_url":"https://api.github.com/users/romainbrenguier/following{/other_user}","gists_url":"https://api.github.com/users/romainbrenguier/gists{/gist_id}","starred_url":"https://api.github.com/users/romainbrenguier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/romainbrenguier/subscriptions","organizations_url":"https://api.github.com/users/romainbrenguier/orgs","repos_url":"https://api.github.com/users/romainbrenguier/repos","events_url":"https://api.github.com/users/romainbrenguier/events{/privacy}","received_events_url":"https://api.github.com/users/romainbrenguier/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/romainbrenguier/cbmc","description":"C Bounded Model Checker","fork":true,"url":"https://api.github.com/repos/romainbrenguier/cbmc","forks_url":"https://api.github.com/repos/romainbrenguier/cbmc/forks","keys_url":"https://api.github.com/repos/romainbrenguier/cbmc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/romainbrenguier/cbmc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/romainbrenguier/cbmc/teams","hooks_url":"https://api.github.com/repos/romainbrenguier/cbmc/hooks","issue_events_url":"https://api.github.com/repos/romainbrenguier/cbmc/issues/events{/number}","events_url":"https://api.github.com/repos/romainbrenguier/cbmc/events","assignees_url":"https://api.github.com/repos/romainbrenguier/cbmc/assignees{/user}","branches_url":"https://api.github.com/repos/romainbrenguier/cbmc/branches{/branch}","tags_url":"https://api.github.com/repos/romainbrenguier/cbmc/tags","blobs_url":"https://api.github.com/repos/romainbrenguier/cbmc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/romainbrenguier/cbmc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/romainbrenguier/cbmc/git/refs{/sha}","trees_url":"https://api.github.com/repos/romainbrenguier/cbmc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/romainbrenguier/cbmc/statuses/{sha}","languages_url":"https://api.github.com/repos/romainbrenguier/cbmc/languages","stargazers_url":"https://api.github.com/repos/romainbrenguier/cbmc/stargazers","contributors_url":"https://api.github.com/repos/romainbrenguier/cbmc/contributors","subscribers_url":"https://api.github.com/repos/romainbrenguier/cbmc/subscribers","subscription_url":"https://api.github.com/repos/romainbrenguier/cbmc/subscription","commits_url":"https://api.github.com/repos/romainbrenguier/cbmc/commits{/sha}","git_commits_url":"https://api.github.com/repos/romainbrenguier/cbmc/git/commits{/sha}","comments_url":"https://api.github.com/repos/romainbrenguier/cbmc/comments{/number}","issue_comment_url":"https://api.github.com/repos/romainbrenguier/cbmc/issues/comments{/number}","contents_url":"https://api.github.com/repos/romainbrenguier/cbmc/contents/{+path}","compare_url":"https://api.github.com/repos/romainbrenguier/cbmc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/romainbrenguier/cbmc/merges","archive_url":"https://api.github.com/repos/romainbrenguier/cbmc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/romainbrenguier/cbmc/downloads","issues_url":"https://api.github.com/repos/romainbrenguier/cbmc/issues{/number}","pulls_url":"https://api.github.com/repos/romainbrenguier/cbmc/pulls{/number}","milestones_url":"https://api.github.com/repos/romainbrenguier/cbmc/milestones{/number}","notifications_url":"https://api.github.com/repos/romainbrenguier/cbmc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/romainbrenguier/cbmc/labels{/name}","releases_url":"https://api.github.com/repos/romainbrenguier/cbmc/releases{/id}","deployments_url":"https://api.github.com/repos/romainbrenguier/cbmc/deployments","created_at":"2016-08-02T14:57:13Z","updated_at":"2016-12-21T12:22:11Z","pushed_at":"2017-02-03T16:23:44Z","git_url":"git://github.com/romainbrenguier/cbmc.git","ssh_url":"git@github.com:romainbrenguier/cbmc.git","clone_url":"https://github.com/romainbrenguier/cbmc.git","svn_url":"https://github.com/romainbrenguier/cbmc","homepage":"http://www.cprover.org/cbmc","size":23150,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"string-solver-experiments"}},"base":{"label":"diffblue:master","ref":"master","sha":"da0b0d55815c2a3e54a9366b1c837658c8ed6f64","user":{"login":"diffblue","id":17216098,"avatar_url":"https://avatars.githubusercontent.com/u/17216098?v=3","gravatar_id":"","url":"https://api.github.com/users/diffblue","html_url":"https://github.com/diffblue","followers_url":"https://api.github.com/users/diffblue/followers","following_url":"https://api.github.com/users/diffblue/following{/other_user}","gists_url":"https://api.github.com/users/diffblue/gists{/gist_id}","starred_url":"https://api.github.com/users/diffblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/diffblue/subscriptions","organizations_url":"https://api.github.com/users/diffblue/orgs","repos_url":"https://api.github.com/users/diffblue/repos","events_url":"https://api.github.com/users/diffblue/events{/privacy}","received_events_url":"https://api.github.com/users/diffblue/received_events","type":"Organization","site_admin":false},"repo":{"id":51877056,"name":"cbmc","full_name":"diffblue/cbmc","owner":{"login":"diffblue","id":17216098,"avatar_url":"https://avatars.githubusercontent.com/u/17216098?v=3","gravatar_id":"","url":"https://api.github.com/users/diffblue","html_url":"https://github.com/diffblue","followers_url":"https://api.github.com/users/diffblue/followers","following_url":"https://api.github.com/users/diffblue/following{/other_user}","gists_url":"https://api.github.com/users/diffblue/gists{/gist_id}","starred_url":"https://api.github.com/users/diffblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/diffblue/subscriptions","organizations_url":"https://api.github.com/users/diffblue/orgs","repos_url":"https://api.github.com/users/diffblue/repos","events_url":"https://api.github.com/users/diffblue/events{/privacy}","received_events_url":"https://api.github.com/users/diffblue/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/diffblue/cbmc","description":"C Bounded Model Checker","fork":false,"url":"https://api.github.com/repos/diffblue/cbmc","forks_url":"https://api.github.com/repos/diffblue/cbmc/forks","keys_url":"https://api.github.com/repos/diffblue/cbmc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/diffblue/cbmc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/diffblue/cbmc/teams","hooks_url":"https://api.github.com/repos/diffblue/cbmc/hooks","issue_events_url":"https://api.github.com/repos/diffblue/cbmc/issues/events{/number}","events_url":"https://api.github.com/repos/diffblue/cbmc/events","assignees_url":"https://api.github.com/repos/diffblue/cbmc/assignees{/user}","branches_url":"https://api.github.com/repos/diffblue/cbmc/branches{/branch}","tags_url":"https://api.github.com/repos/diffblue/cbmc/tags","blobs_url":"https://api.github.com/repos/diffblue/cbmc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/diffblue/cbmc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/diffblue/cbmc/git/refs{/sha}","trees_url":"https://api.github.com/repos/diffblue/cbmc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/diffblue/cbmc/statuses/{sha}","languages_url":"https://api.github.com/repos/diffblue/cbmc/languages","stargazers_url":"https://api.github.com/repos/diffblue/cbmc/stargazers","contributors_url":"https://api.github.com/repos/diffblue/cbmc/contributors","subscribers_url":"https://api.github.com/repos/diffblue/cbmc/subscribers","subscription_url":"https://api.github.com/repos/diffblue/cbmc/subscription","commits_url":"https://api.github.com/repos/diffblue/cbmc/commits{/sha}","git_commits_url":"https://api.github.com/repos/diffblue/cbmc/git/commits{/sha}","comments_url":"https://api.github.com/repos/diffblue/cbmc/comments{/number}","issue_comment_url":"https://api.github.com/repos/diffblue/cbmc/issues/comments{/number}","contents_url":"https://api.github.com/repos/diffblue/cbmc/contents/{+path}","compare_url":"https://api.github.com/repos/diffblue/cbmc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/diffblue/cbmc/merges","archive_url":"https://api.github.com/repos/diffblue/cbmc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/diffblue/cbmc/downloads","issues_url":"https://api.github.com/repos/diffblue/cbmc/issues{/number}","pulls_url":"https://api.github.com/repos/diffblue/cbmc/pulls{/number}","milestones_url":"https://api.github.com/repos/diffblue/cbmc/milestones{/number}","notifications_url":"https://api.github.com/repos/diffblue/cbmc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/diffblue/cbmc/labels{/name}","releases_url":"https://api.github.com/repos/diffblue/cbmc/releases{/id}","deployments_url":"https://api.github.com/repos/diffblue/cbmc/deployments","created_at":"2016-02-16T23:03:52Z","updated_at":"2017-01-19T22:11:12Z","pushed_at":"2017-02-05T13:40:54Z","git_url":"git://github.com/diffblue/cbmc.git","ssh_url":"git@github.com:diffblue/cbmc.git","clone_url":"https://github.com/diffblue/cbmc.git","svn_url":"https://github.com/diffblue/cbmc","homepage":"http://www.cprover.org/cbmc","size":16482,"stargazers_count":32,"watchers_count":32,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":39,"mirror_url":null,"open_issues_count":152,"forks":39,"open_issues":152,"watchers":32,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/378"},"html":{"href":"https://github.com/diffblue/cbmc/pull/378"},"issue":{"href":"https://api.github.com/repos/diffblue/cbmc/issues/378"},"comments":{"href":"https://api.github.com/repos/diffblue/cbmc/issues/378/comments"},"review_comments":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/378/comments"},"review_comment":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/diffblue/cbmc/pulls/378/commits"},"statuses":{"href":"https://api.github.com/repos/diffblue/cbmc/statuses/2cd801de0ce1580a8386adaa36a207cd3c87eec1"}}}}
{"actor":{"display_login":"peterschrammel"}}