{"action":"created","comment":{"url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/comments/88496279","pull_request_review_id":9068672,"id":88496279,"diff_hunk":"@@ -84,99 +85,60 @@ class InlineInstances extends Transform {\n       if (errors.nonEmpty) throw new PassExceptions(errors)\n    }\n \n-   def run(c: Circuit, modsToInline: Set[ModuleName], instsToInline: Set[ComponentName]): CircuitState = {\n-      // Check annotations and circuit match up\n-      check(c, modsToInline, instsToInline)\n \n-      // ---- Rename functions/data ----\n-      val renameMap = mutable.HashMap[Named,Seq[Named]]()\n-      // Updates renameMap with new names\n-      def update(name: Named, rename: Named) = {\n-         val existing = renameMap.getOrElse(name, Seq[Named]())\n-         if (!existing.contains(rename)) renameMap(name) = existing.:+(rename)\n+  def run(c: Circuit, modsToInline: Set[ModuleName], instsToInline: Set[ComponentName]): CircuitState = {\n+    def getInstancesOf(c: Circuit, modules: Set[String]): Set[String] =\n+      c.modules.foldLeft(Set[String]()) { (set, d) =>\n+        d match {\n+          case e: ExtModule => set\n+          case m: Module =>\n+            val instances = mutable.HashSet[String]()\n+            def findInstances(s: Statement): Statement = s match {\n+              case WDefInstance(info, instName, moduleName, instTpe) if modules.contains(moduleName) =>\n+                instances += m.name + \".\" + instName\n+                s\n+              case sx => sx map findInstances\n+            }\n+            findInstances(m.body)\n+            instances.toSet ++ set\n+        }\n       }\n-      def set(name: Named, renames: Seq[Named]) = renameMap(name) = renames\n \n-      // ---- Pass functions/data ----\n-      // Contains all unaltered modules\n-      val originalModules = mutable.HashMap[String,DefModule]()\n-      // Contains modules whose direct/indirect children modules have been inlined, and whose tagged instances have been inlined.\n-      val inlinedModules = mutable.HashMap[String,DefModule]()\n-      val cname = CircuitName(c.main)\n+    // Check annotations and circuit match up\n+    check(c, modsToInline, instsToInline)\n+    val flatModules = modsToInline.map(m => m.name)\n+    val flatInstances = instsToInline.map(i => i.module.name + \".\" + i.name) ++ getInstancesOf(c, flatModules)\n+    val moduleMap = c.modules.foldLeft(Map[String, DefModule]()) { (map, m) => map + (m.name -> m) }\n \n-      // Recursive.\n-      def onModule(m: DefModule): DefModule = {\n-         val inlinedInstances = mutable.ArrayBuffer[String]()\n-         // Recursive. Replaces inst.port with inst$port\n-         def onExp(e: Expression): Expression = e match {\n-            case WSubField(WRef(ref, _, _, _), field, tpe, gen) =>\n-              // Relies on instance declaration before any instance references\n-              if (inlinedInstances.contains(ref)) {\n-                 val newName = ref + inlineDelim + field\n-                 set(ComponentName(ref, ModuleName(m.name, cname)), Seq.empty)\n-                 WRef(newName, tpe, WireKind, gen)\n-              }\n-              else e\n-            case ex => ex map onExp\n-         }\n-         // Recursive. Inlines tagged instances\n-         def onStmt(s: Statement): Statement = s match {\n-               case WDefInstance(info, instName, moduleName, instTpe) =>\n-                 def rename(name:String): String = {\n-                    val newName = instName + inlineDelim + name\n-                    update(ComponentName(name, ModuleName(moduleName, cname)), ComponentName(newName, ModuleName(m.name, cname)))\n-                    newName\n-                 }\n-                 // Rewrites references in inlined statements from ref to inst$ref\n-                 def renameStmt(s: Statement): Statement = {\n-                    def renameExp(e: Expression): Expression = {\n-                       e map renameExp match {\n-                          case WRef(name, tpe, kind, gen) => WRef(rename(name), tpe, kind, gen)\n-                          case ex => ex\n-                       }\n-                    }\n-                    s map rename map renameStmt map renameExp\n-                 }\n-                 val shouldInline =\n-                    modsToInline.contains(ModuleName(moduleName, cname)) ||\n-                       instsToInline.contains(ComponentName(instName, ModuleName(m.name, cname)))\n-                 // Used memoized instance if available\n-                 val instModule =\n-                    if (inlinedModules.contains(name)) inlinedModules(name)\n-                    else {\n-                       // Warning - can infinitely recurse if there is an instance loop\n-                       onModule(originalModules(moduleName))\n-                    }\n-                 if (shouldInline) {\n-                    inlinedInstances += instName\n-                    val instInModule = instModule match {\n-                       case m: ExtModule => throw new PassException(\"Cannot inline external module\")\n-                       case m: Module => m\n-                    }\n-                    val stmts = mutable.ArrayBuffer[Statement]()\n-                    for (p <- instInModule.ports) {\n-                       stmts += DefWire(p.info, rename(p.name), p.tpe)\n-                    }\n-                    stmts += renameStmt(instInModule.body)\n-                    Block(stmts.toSeq)\n-                 } else s\n-               case sx => sx map onExp map onStmt\n-            }\n-         m match {\n-            case Module(info, name, ports, body) =>\n-              val mx = Module(info, name, ports, onStmt(body))\n-              inlinedModules(name) = mx\n-              mx\n-            case mx: ExtModule =>\n-              inlinedModules(mx.name) = mx\n-              mx\n-         }\n-      }\n+    def appendNamePrefix(prefix: String)(name:String): String = prefix + name\n+    def appendRefPrefix(prefix: String, currentModule: String)(e: Expression): Expression = e match {\n+      case WSubField(WRef(ref, _, InstanceKind, _), field, tpe, gen) if (flatInstances.contains(currentModule + \".\" + ref)) =>","path":"src/main/scala/firrtl/passes/Inline.scala","position":null,"original_position":136,"commit_id":"ef6208b911b42d5bd6ddb2849291d5315b53bf5a","original_commit_id":"420e902d0f7679e7f2c3f7cf5281f906611c20ba","user":{"login":"azidar","id":5377148,"avatar_url":"https://avatars.githubusercontent.com/u/5377148?v=3","gravatar_id":"","url":"https://api.github.com/users/azidar","html_url":"https://github.com/azidar","followers_url":"https://api.github.com/users/azidar/followers","following_url":"https://api.github.com/users/azidar/following{/other_user}","gists_url":"https://api.github.com/users/azidar/gists{/gist_id}","starred_url":"https://api.github.com/users/azidar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/azidar/subscriptions","organizations_url":"https://api.github.com/users/azidar/orgs","repos_url":"https://api.github.com/users/azidar/repos","events_url":"https://api.github.com/users/azidar/events{/privacy}","received_events_url":"https://api.github.com/users/azidar/received_events","type":"User","site_admin":false},"body":"done","created_at":"2016-11-17T16:55:24Z","updated_at":"2016-11-17T16:55:24Z","html_url":"https://github.com/ucb-bar/firrtl/pull/377#discussion_r88496279","pull_request_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377","_links":{"self":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/comments/88496279"},"html":{"href":"https://github.com/ucb-bar/firrtl/pull/377#discussion_r88496279"},"pull_request":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377"}}},"pull_request":{"url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377","id":93841925,"html_url":"https://github.com/ucb-bar/firrtl/pull/377","diff_url":"https://github.com/ucb-bar/firrtl/pull/377.diff","patch_url":"https://github.com/ucb-bar/firrtl/pull/377.patch","issue_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/377","number":377,"state":"open","locked":false,"title":"Rewrote inline xform to fix quadratic perf. bug","user":{"login":"azidar","id":5377148,"avatar_url":"https://avatars.githubusercontent.com/u/5377148?v=3","gravatar_id":"","url":"https://api.github.com/users/azidar","html_url":"https://github.com/azidar","followers_url":"https://api.github.com/users/azidar/followers","following_url":"https://api.github.com/users/azidar/following{/other_user}","gists_url":"https://api.github.com/users/azidar/gists{/gist_id}","starred_url":"https://api.github.com/users/azidar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/azidar/subscriptions","organizations_url":"https://api.github.com/users/azidar/orgs","repos_url":"https://api.github.com/users/azidar/repos","events_url":"https://api.github.com/users/azidar/events{/privacy}","received_events_url":"https://api.github.com/users/azidar/received_events","type":"User","site_admin":false},"body":"Turns out caching previously inlined modules is not useful\r\n\r\nThe previous algorithm in a module, would flatten an instance's children, then\r\nflatten that instance. This caused all instances to be effectively\r\ninlined the number of times of its depth in the instance hierarchy,\r\nmaking it O(n*d*s), where n is the number of instances, and d is the depth\r\nof the instance, and s is the number of statements in the instance.\r\n\r\nThe new algorithm directly inlines a module by keeping track of the\r\nparents of that instance, making it constant time with the number of\r\ninstantiated instances.","created_at":"2016-11-15T20:28:55Z","updated_at":"2016-11-17T16:55:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"db5c40eec40629851a471275d56c2a4b2720e4a5","assignee":{"login":"chick","id":923223,"avatar_url":"https://avatars.githubusercontent.com/u/923223?v=3","gravatar_id":"","url":"https://api.github.com/users/chick","html_url":"https://github.com/chick","followers_url":"https://api.github.com/users/chick/followers","following_url":"https://api.github.com/users/chick/following{/other_user}","gists_url":"https://api.github.com/users/chick/gists{/gist_id}","starred_url":"https://api.github.com/users/chick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chick/subscriptions","organizations_url":"https://api.github.com/users/chick/orgs","repos_url":"https://api.github.com/users/chick/repos","events_url":"https://api.github.com/users/chick/events{/privacy}","received_events_url":"https://api.github.com/users/chick/received_events","type":"User","site_admin":false},"assignees":[{"login":"chick","id":923223,"avatar_url":"https://avatars.githubusercontent.com/u/923223?v=3","gravatar_id":"","url":"https://api.github.com/users/chick","html_url":"https://github.com/chick","followers_url":"https://api.github.com/users/chick/followers","following_url":"https://api.github.com/users/chick/following{/other_user}","gists_url":"https://api.github.com/users/chick/gists{/gist_id}","starred_url":"https://api.github.com/users/chick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chick/subscriptions","organizations_url":"https://api.github.com/users/chick/orgs","repos_url":"https://api.github.com/users/chick/repos","events_url":"https://api.github.com/users/chick/events{/privacy}","received_events_url":"https://api.github.com/users/chick/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377/commits","review_comments_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377/comments","review_comment_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/377/comments","statuses_url":"https://api.github.com/repos/ucb-bar/firrtl/statuses/ef6208b911b42d5bd6ddb2849291d5315b53bf5a","head":{"label":"ucb-bar:bugfix-inline","ref":"bugfix-inline","sha":"ef6208b911b42d5bd6ddb2849291d5315b53bf5a","user":{"login":"ucb-bar","id":998197,"avatar_url":"https://avatars.githubusercontent.com/u/998197?v=3","gravatar_id":"","url":"https://api.github.com/users/ucb-bar","html_url":"https://github.com/ucb-bar","followers_url":"https://api.github.com/users/ucb-bar/followers","following_url":"https://api.github.com/users/ucb-bar/following{/other_user}","gists_url":"https://api.github.com/users/ucb-bar/gists{/gist_id}","starred_url":"https://api.github.com/users/ucb-bar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucb-bar/subscriptions","organizations_url":"https://api.github.com/users/ucb-bar/orgs","repos_url":"https://api.github.com/users/ucb-bar/repos","events_url":"https://api.github.com/users/ucb-bar/events{/privacy}","received_events_url":"https://api.github.com/users/ucb-bar/received_events","type":"Organization","site_admin":false},"repo":{"id":30780129,"name":"firrtl","full_name":"ucb-bar/firrtl","owner":{"login":"ucb-bar","id":998197,"avatar_url":"https://avatars.githubusercontent.com/u/998197?v=3","gravatar_id":"","url":"https://api.github.com/users/ucb-bar","html_url":"https://github.com/ucb-bar","followers_url":"https://api.github.com/users/ucb-bar/followers","following_url":"https://api.github.com/users/ucb-bar/following{/other_user}","gists_url":"https://api.github.com/users/ucb-bar/gists{/gist_id}","starred_url":"https://api.github.com/users/ucb-bar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucb-bar/subscriptions","organizations_url":"https://api.github.com/users/ucb-bar/orgs","repos_url":"https://api.github.com/users/ucb-bar/repos","events_url":"https://api.github.com/users/ucb-bar/events{/privacy}","received_events_url":"https://api.github.com/users/ucb-bar/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ucb-bar/firrtl","description":"Flexible Intermediate Representation for RTL","fork":false,"url":"https://api.github.com/repos/ucb-bar/firrtl","forks_url":"https://api.github.com/repos/ucb-bar/firrtl/forks","keys_url":"https://api.github.com/repos/ucb-bar/firrtl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ucb-bar/firrtl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ucb-bar/firrtl/teams","hooks_url":"https://api.github.com/repos/ucb-bar/firrtl/hooks","issue_events_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/events{/number}","events_url":"https://api.github.com/repos/ucb-bar/firrtl/events","assignees_url":"https://api.github.com/repos/ucb-bar/firrtl/assignees{/user}","branches_url":"https://api.github.com/repos/ucb-bar/firrtl/branches{/branch}","tags_url":"https://api.github.com/repos/ucb-bar/firrtl/tags","blobs_url":"https://api.github.com/repos/ucb-bar/firrtl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ucb-bar/firrtl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ucb-bar/firrtl/git/refs{/sha}","trees_url":"https://api.github.com/repos/ucb-bar/firrtl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ucb-bar/firrtl/statuses/{sha}","languages_url":"https://api.github.com/repos/ucb-bar/firrtl/languages","stargazers_url":"https://api.github.com/repos/ucb-bar/firrtl/stargazers","contributors_url":"https://api.github.com/repos/ucb-bar/firrtl/contributors","subscribers_url":"https://api.github.com/repos/ucb-bar/firrtl/subscribers","subscription_url":"https://api.github.com/repos/ucb-bar/firrtl/subscription","commits_url":"https://api.github.com/repos/ucb-bar/firrtl/commits{/sha}","git_commits_url":"https://api.github.com/repos/ucb-bar/firrtl/git/commits{/sha}","comments_url":"https://api.github.com/repos/ucb-bar/firrtl/comments{/number}","issue_comment_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/comments{/number}","contents_url":"https://api.github.com/repos/ucb-bar/firrtl/contents/{+path}","compare_url":"https://api.github.com/repos/ucb-bar/firrtl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ucb-bar/firrtl/merges","archive_url":"https://api.github.com/repos/ucb-bar/firrtl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ucb-bar/firrtl/downloads","issues_url":"https://api.github.com/repos/ucb-bar/firrtl/issues{/number}","pulls_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls{/number}","milestones_url":"https://api.github.com/repos/ucb-bar/firrtl/milestones{/number}","notifications_url":"https://api.github.com/repos/ucb-bar/firrtl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ucb-bar/firrtl/labels{/name}","releases_url":"https://api.github.com/repos/ucb-bar/firrtl/releases{/id}","deployments_url":"https://api.github.com/repos/ucb-bar/firrtl/deployments","created_at":"2015-02-13T23:04:44Z","updated_at":"2016-10-24T02:32:20Z","pushed_at":"2016-11-17T16:55:15Z","git_url":"git://github.com/ucb-bar/firrtl.git","ssh_url":"git@github.com:ucb-bar/firrtl.git","clone_url":"https://github.com/ucb-bar/firrtl.git","svn_url":"https://github.com/ucb-bar/firrtl","homepage":"","size":43532,"stargazers_count":21,"watchers_count":21,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":39,"forks":18,"open_issues":39,"watchers":21,"default_branch":"master"}},"base":{"label":"ucb-bar:master","ref":"master","sha":"4b346ea0b6d9fc0867558d7bdd0fe56159489a92","user":{"login":"ucb-bar","id":998197,"avatar_url":"https://avatars.githubusercontent.com/u/998197?v=3","gravatar_id":"","url":"https://api.github.com/users/ucb-bar","html_url":"https://github.com/ucb-bar","followers_url":"https://api.github.com/users/ucb-bar/followers","following_url":"https://api.github.com/users/ucb-bar/following{/other_user}","gists_url":"https://api.github.com/users/ucb-bar/gists{/gist_id}","starred_url":"https://api.github.com/users/ucb-bar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucb-bar/subscriptions","organizations_url":"https://api.github.com/users/ucb-bar/orgs","repos_url":"https://api.github.com/users/ucb-bar/repos","events_url":"https://api.github.com/users/ucb-bar/events{/privacy}","received_events_url":"https://api.github.com/users/ucb-bar/received_events","type":"Organization","site_admin":false},"repo":{"id":30780129,"name":"firrtl","full_name":"ucb-bar/firrtl","owner":{"login":"ucb-bar","id":998197,"avatar_url":"https://avatars.githubusercontent.com/u/998197?v=3","gravatar_id":"","url":"https://api.github.com/users/ucb-bar","html_url":"https://github.com/ucb-bar","followers_url":"https://api.github.com/users/ucb-bar/followers","following_url":"https://api.github.com/users/ucb-bar/following{/other_user}","gists_url":"https://api.github.com/users/ucb-bar/gists{/gist_id}","starred_url":"https://api.github.com/users/ucb-bar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucb-bar/subscriptions","organizations_url":"https://api.github.com/users/ucb-bar/orgs","repos_url":"https://api.github.com/users/ucb-bar/repos","events_url":"https://api.github.com/users/ucb-bar/events{/privacy}","received_events_url":"https://api.github.com/users/ucb-bar/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ucb-bar/firrtl","description":"Flexible Intermediate Representation for RTL","fork":false,"url":"https://api.github.com/repos/ucb-bar/firrtl","forks_url":"https://api.github.com/repos/ucb-bar/firrtl/forks","keys_url":"https://api.github.com/repos/ucb-bar/firrtl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ucb-bar/firrtl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ucb-bar/firrtl/teams","hooks_url":"https://api.github.com/repos/ucb-bar/firrtl/hooks","issue_events_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/events{/number}","events_url":"https://api.github.com/repos/ucb-bar/firrtl/events","assignees_url":"https://api.github.com/repos/ucb-bar/firrtl/assignees{/user}","branches_url":"https://api.github.com/repos/ucb-bar/firrtl/branches{/branch}","tags_url":"https://api.github.com/repos/ucb-bar/firrtl/tags","blobs_url":"https://api.github.com/repos/ucb-bar/firrtl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ucb-bar/firrtl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ucb-bar/firrtl/git/refs{/sha}","trees_url":"https://api.github.com/repos/ucb-bar/firrtl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ucb-bar/firrtl/statuses/{sha}","languages_url":"https://api.github.com/repos/ucb-bar/firrtl/languages","stargazers_url":"https://api.github.com/repos/ucb-bar/firrtl/stargazers","contributors_url":"https://api.github.com/repos/ucb-bar/firrtl/contributors","subscribers_url":"https://api.github.com/repos/ucb-bar/firrtl/subscribers","subscription_url":"https://api.github.com/repos/ucb-bar/firrtl/subscription","commits_url":"https://api.github.com/repos/ucb-bar/firrtl/commits{/sha}","git_commits_url":"https://api.github.com/repos/ucb-bar/firrtl/git/commits{/sha}","comments_url":"https://api.github.com/repos/ucb-bar/firrtl/comments{/number}","issue_comment_url":"https://api.github.com/repos/ucb-bar/firrtl/issues/comments{/number}","contents_url":"https://api.github.com/repos/ucb-bar/firrtl/contents/{+path}","compare_url":"https://api.github.com/repos/ucb-bar/firrtl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ucb-bar/firrtl/merges","archive_url":"https://api.github.com/repos/ucb-bar/firrtl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ucb-bar/firrtl/downloads","issues_url":"https://api.github.com/repos/ucb-bar/firrtl/issues{/number}","pulls_url":"https://api.github.com/repos/ucb-bar/firrtl/pulls{/number}","milestones_url":"https://api.github.com/repos/ucb-bar/firrtl/milestones{/number}","notifications_url":"https://api.github.com/repos/ucb-bar/firrtl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ucb-bar/firrtl/labels{/name}","releases_url":"https://api.github.com/repos/ucb-bar/firrtl/releases{/id}","deployments_url":"https://api.github.com/repos/ucb-bar/firrtl/deployments","created_at":"2015-02-13T23:04:44Z","updated_at":"2016-10-24T02:32:20Z","pushed_at":"2016-11-17T16:55:15Z","git_url":"git://github.com/ucb-bar/firrtl.git","ssh_url":"git@github.com:ucb-bar/firrtl.git","clone_url":"https://github.com/ucb-bar/firrtl.git","svn_url":"https://github.com/ucb-bar/firrtl","homepage":"","size":43532,"stargazers_count":21,"watchers_count":21,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":39,"forks":18,"open_issues":39,"watchers":21,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377"},"html":{"href":"https://github.com/ucb-bar/firrtl/pull/377"},"issue":{"href":"https://api.github.com/repos/ucb-bar/firrtl/issues/377"},"comments":{"href":"https://api.github.com/repos/ucb-bar/firrtl/issues/377/comments"},"review_comments":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377/comments"},"review_comment":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ucb-bar/firrtl/pulls/377/commits"},"statuses":{"href":"https://api.github.com/repos/ucb-bar/firrtl/statuses/ef6208b911b42d5bd6ddb2849291d5315b53bf5a"}}}}
{"actor":{"display_login":"azidar"}}