{"action":"created","comment":{"url":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments/50292685","id":50292685,"diff_hunk":"@@ -345,50 +349,225 @@ module ChapelIO {\n       }\n     }\n  \n+    private\n+    proc skipFieldsAtEnd(reader, inout needsComma:bool) {\n+\n+      var st = reader.styleElement(QIO_STYLE_ELEMENT_AGGREGATE);\n+      var skip_unk = reader.styleElement(QIO_STYLE_ELEMENT_SKIP_UNKNOWN_FIELDS);\n+\n+      if skip_unk != 0 && st == QIO_AGGREGATE_FORMAT_JSON {\n+\n+        while true {\n+          if needsComma {\n+            // read a comma\n+            var comma = new ioLiteral(\",\", true);\n+            reader.readwrite(comma);\n+\n+            if !reader.error() {\n+              needsComma = false; // we read a comma\n+            } else if reader.error() == EFORMAT {\n+              // break out of the loop if we didn't read a comma\n+              // and we're expecting to read one.\n+              // We clear the error since we\n+              // might be at the end (without error)\n+              reader.clearError();\n+              break;\n+            }\n+          }\n+\n+          // Skip an unknown JSON field.\n+          var e:syserr;\n+          reader.skipField(error=e);\n+          if !e {\n+            needsComma = true;\n+          }\n+          reader.setError(e);\n+        }\n+      }\n+    }\n+\n     pragma \"no doc\"\n-    proc readThisFieldsDefaultImpl(reader, type t, ref x, inout first:bool) {\n+    proc readThisFieldsDefaultImpl(reader, type t, ref x,\n+                                   inout needsComma:bool) {\n       param num_fields = __primitive(\"num fields\", t);\n       var isBinary = reader.binary();\n+      var superclass_error : syserr = ENOERR;\n   \n-      //writeln(\"Scanning fields for \", t:string);\n+      //writeln(\"in readThisFieldsDefaultImpl type \", t:string, \" num_fields=\", num_fields, \" needsComma=\", needsComma);\n   \n       if (isClassType(t)) {\n         if t != object {\n           // only write parent fields for subclasses of object\n           // since object has no .super field.\n-          readThisFieldsDefaultImpl(reader, x.super.type, x, first);\n+          type superType = x.super.type;\n+          //writeln(\"super type \", superType:string);\n+          var castTmp:superType = x; // make a copy of the ptr so we\n+                                     // can pass it by ref\n+          readThisFieldsDefaultImpl(reader, superType, castTmp, needsComma);\n+          // Any error reading superclass must be preserved.\n+          superclass_error = reader.error();\n         }\n       }\n   \n+      //writeln(\"in readThisFieldsDefaultImpl after super. type is \", t:string, \" needsComma=\", needsComma);\n+\n       if !isUnionType(t) {\n         // read all fields for classes and records\n-  \n-        for param i in 1..num_fields {\n-          if isType(__primitive(\"field value by num\", x, i)) ||\n-             isParam(__primitive(\"field value by num\", x, i)) {\n-             // do nothing, don't read types or params\n-          } else {\n-            if !isBinary {\n+        if isBinary {\n+          for param i in 1..num_fields {\n+            if isType(__primitive(\"field value by num\", x, i)) ||\n+               isParam(__primitive(\"field value by num\", x, i)) {\n+              // do nothing, don't read types or params\n+            } else {\n+              reader.readwrite(__primitive(\"field value by num\", x, i));\n+            }\n+          }\n+        } else if num_fields > 0 {\n+          // track whether or not we've read all of the fields.\n+\n+          // this tuple helps us not read the same field twice.\n+          var read_field:(num_fields)*bool;\n+          var num_to_read = 0;\n+          var num_read = 0;\n+          for param i in 1..num_fields {\n+            if isType(__primitive(\"field value by num\", x, i)) ||\n+               isParam(__primitive(\"field value by num\", x, i)) {\n+              // do nothing, don't read types or params\n+            } else {\n+              num_to_read += 1;\n+            }\n+          }\n+\n+          // the order should not matter.\n+          while num_read < num_to_read {\n+            //writeln(\"IN LOOP read_field=\", read_field);\n+\n+            if needsComma {\n+              // read a comma\n+\n+              //writeln(\"READING COMMA\");\n               var comma = new ioLiteral(\",\", true);\n-              if !first then reader.readwrite(comma);\n-    \n-              var fname = new ioLiteral(__primitive(\"field num to name\", t, i), true);\n-              reader.readwrite(fname);\n-    \n-              var st = reader.styleElement(QIO_STYLE_ELEMENT_AGGREGATE);\n-              var eq:ioLiteral;\n-              if st == QIO_AGGREGATE_FORMAT_JSON {\n-                eq = new ioLiteral(\":\", true);\n+              reader.readwrite(comma);\n+\n+              if !reader.error() {\n+                needsComma = false; // we read a comma\n+              } else if reader.error() == EFORMAT {\n+                //writeln(\"NO COMMA\");\n+                // break out of the loop if we didn't read a comma\n+                // and we're expecting to read one.\n+                break;\n+              }\n+            }\n+\n+            // find a field name that matches.\n+            // TODO: this is not particularly efficient. If we\n+            // have a lot of fields, this is O(n**2), and there\n+            // are other potential problems with string reallocation.\n+            var st = reader.styleElement(QIO_STYLE_ELEMENT_AGGREGATE);\n+            var skip_unk = reader.styleElement(QIO_STYLE_ELEMENT_SKIP_UNKNOWN_FIELDS);\n+\n+            // the field name\n+            var fname:ioLiteral;\n+\n+            var read_field_name = false;\n+\n+            //writeln(\"BEFORE PARAM FOR type \", t:string, \" num_fields=\", num_fields, \" read_field_name=\", read_field_name);\n+\n+            for param i in 1..num_fields {\n+              if isType(__primitive(\"field value by num\", x, i)) ||\n+                 isParam(__primitive(\"field value by num\", x, i)) {\n+                // do nothing, don't read types or params\n               } else {\n-                eq = new ioLiteral(\"=\", true);\n+\n+                if !read_field_name && !read_field[i] {\n+                  if st == QIO_AGGREGATE_FORMAT_JSON {\n+                    fname = new ioLiteral('\"' +\n+                                          __primitive(\"field num to name\", t, i)\n+                                          + '\"',\n+                                          true);\n+                  } else {\n+                    fname = new ioLiteral(__primitive(\"field num to name\", t, i),\n+                                          true);\n+                  }\n+\n+                  //writeln(\"ERROR IS \", reader.error():int);\n+                  //writeln(\"OFFSET IS \", reader.offset());\n+                  //writeln(\"TRYING TO READ \", fname);\n+                  reader.readwrite(fname);\n+                  //writeln(\"POST FNAME ERROR IS \", reader.error():int);\n+\n+                  if reader.error() == EFORMAT || reader.error() == EEOF {\n+                    // Try reading again with a different union element.\n+                    reader.clearError();\n+                  } else {\n+                    read_field_name = true;\n+                    needsComma = true;\n+\n+                    //writeln(\"DID     FIND \", fname);\n+\n+                    var eq:ioLiteral;\n+                    if st == QIO_AGGREGATE_FORMAT_JSON {\n+                      eq = new ioLiteral(\":\", true);\n+                    } else {\n+                      eq = new ioLiteral(\"=\", true);\n+                    }\n+                    reader.readwrite(eq);\n+\n+                    reader.readwrite(__primitive(\"field value by num\", x, i));\n+                    if !reader.error() {\n+                      //writeln(\"setting read_field[\", i, \"]\");\n+                      read_field[i] = true;\n+                      num_read += 1;\n+                    }\n+                  }\n+                }\n               }\n-              reader.readwrite(eq);\n             }\n-    \n-            reader.readwrite(__primitive(\"field value by num\", x, i));\n-    \n-            first = false;\n+\n+            //writeln(\"AFTER PARAM FOR\");\n+\n+            // Stop with an error if we didn't read a field name\n+            // ... unless we skip unknown fields...\n+            if !read_field_name {\n+              if skip_unk != 0 && st == QIO_AGGREGATE_FORMAT_JSON {\n+\n+                //writeln(\"SKIPPING FIELD\");\n+\n+                // Skip an unknown JSON field.\n+                var e:syserr;\n+                reader.skipField(error=e);\n+                if !e {\n+                  needsComma = true;\n+                }\n+                reader.setError(e);\n+              } else {\n+                //writeln(\"ERROR - MISSING FIELD NAME\");\n+                reader.setError(EFORMAT:syserr);\n+                break;\n+              }\n+            }\n+          }\n+\n+          //writeln(\"POST WHILE ERROR IS \", reader.error():int);\n+\n+          // check that we've read all fields, return error if not.\n+          {\n+            var ok = num_read == num_to_read;\n+            /*for param i in 1..num_fields {","path":"modules/internal/ChapelIO.chpl","position":266,"original_position":266,"commit_id":"e81b07f9fbe3a3a227b49a98b7951bf76ad9220c","original_commit_id":"e81b07f9fbe3a3a227b49a98b7951bf76ad9220c","user":{"login":"lydia-duncan","id":2454710,"avatar_url":"https://avatars.githubusercontent.com/u/2454710?v=3","gravatar_id":"","url":"https://api.github.com/users/lydia-duncan","html_url":"https://github.com/lydia-duncan","followers_url":"https://api.github.com/users/lydia-duncan/followers","following_url":"https://api.github.com/users/lydia-duncan/following{/other_user}","gists_url":"https://api.github.com/users/lydia-duncan/gists{/gist_id}","starred_url":"https://api.github.com/users/lydia-duncan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lydia-duncan/subscriptions","organizations_url":"https://api.github.com/users/lydia-duncan/orgs","repos_url":"https://api.github.com/users/lydia-duncan/repos","events_url":"https://api.github.com/users/lydia-duncan/events{/privacy}","received_events_url":"https://api.github.com/users/lydia-duncan/received_events","type":"User","site_admin":false},"body":"Leftover code to remove?","created_at":"2016-01-20T18:01:22Z","updated_at":"2016-01-20T18:01:22Z","html_url":"https://github.com/chapel-lang/chapel/pull/3134#discussion_r50292685","pull_request_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134","_links":{"self":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments/50292685"},"html":{"href":"https://github.com/chapel-lang/chapel/pull/3134#discussion_r50292685"},"pull_request":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134"}}},"pull_request":{"url":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134","id":56525884,"html_url":"https://github.com/chapel-lang/chapel/pull/3134","diff_url":"https://github.com/chapel-lang/chapel/pull/3134.diff","patch_url":"https://github.com/chapel-lang/chapel/pull/3134.patch","issue_url":"https://api.github.com/repos/chapel-lang/chapel/issues/3134","number":3134,"state":"open","locked":false,"title":"record/class reading and JSON improvements","user":{"login":"mppf","id":3653132,"avatar_url":"https://avatars.githubusercontent.com/u/3653132?v=3","gravatar_id":"","url":"https://api.github.com/users/mppf","html_url":"https://github.com/mppf","followers_url":"https://api.github.com/users/mppf/followers","following_url":"https://api.github.com/users/mppf/following{/other_user}","gists_url":"https://api.github.com/users/mppf/gists{/gist_id}","starred_url":"https://api.github.com/users/mppf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mppf/subscriptions","organizations_url":"https://api.github.com/users/mppf/orgs","repos_url":"https://api.github.com/users/mppf/repos","events_url":"https://api.github.com/users/mppf/events{/privacy}","received_events_url":"https://api.github.com/users/mppf/received_events","type":"User","site_admin":false},"body":"This PR includes:\r\n\r\n* style element to skip unknown fields\r\n* writef/readf format string: ~ means skip unknown fields\r\n* new channel.skipField including C implementation for JSON\r\n* improvements to the default-generated record/class reader\r\n  * reads fields in any order\r\n  * fixes bugs when reading classes with inheritance\r\n  * supports QIO_STYLE_ELEMENT_SKIP_UNKNOWN_FIELDS\r\n* Several improvements to List.chpl, including support for JSON format\r\n* Tests demonstrating the new features\r\n\r\nPassed full local testing.","created_at":"2016-01-19T21:09:47Z","updated_at":"2016-01-20T18:01:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"44022ca3404f8d41da7a09867f294a98872a4651","assignee":{"login":"lydia-duncan","id":2454710,"avatar_url":"https://avatars.githubusercontent.com/u/2454710?v=3","gravatar_id":"","url":"https://api.github.com/users/lydia-duncan","html_url":"https://github.com/lydia-duncan","followers_url":"https://api.github.com/users/lydia-duncan/followers","following_url":"https://api.github.com/users/lydia-duncan/following{/other_user}","gists_url":"https://api.github.com/users/lydia-duncan/gists{/gist_id}","starred_url":"https://api.github.com/users/lydia-duncan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lydia-duncan/subscriptions","organizations_url":"https://api.github.com/users/lydia-duncan/orgs","repos_url":"https://api.github.com/users/lydia-duncan/repos","events_url":"https://api.github.com/users/lydia-duncan/events{/privacy}","received_events_url":"https://api.github.com/users/lydia-duncan/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134/commits","review_comments_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134/comments","review_comment_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments{/number}","comments_url":"https://api.github.com/repos/chapel-lang/chapel/issues/3134/comments","statuses_url":"https://api.github.com/repos/chapel-lang/chapel/statuses/e81b07f9fbe3a3a227b49a98b7951bf76ad9220c","head":{"label":"mppf:json-2","ref":"json-2","sha":"e81b07f9fbe3a3a227b49a98b7951bf76ad9220c","user":{"login":"mppf","id":3653132,"avatar_url":"https://avatars.githubusercontent.com/u/3653132?v=3","gravatar_id":"","url":"https://api.github.com/users/mppf","html_url":"https://github.com/mppf","followers_url":"https://api.github.com/users/mppf/followers","following_url":"https://api.github.com/users/mppf/following{/other_user}","gists_url":"https://api.github.com/users/mppf/gists{/gist_id}","starred_url":"https://api.github.com/users/mppf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mppf/subscriptions","organizations_url":"https://api.github.com/users/mppf/orgs","repos_url":"https://api.github.com/users/mppf/repos","events_url":"https://api.github.com/users/mppf/events{/privacy}","received_events_url":"https://api.github.com/users/mppf/received_events","type":"User","site_admin":false},"repo":{"id":22106313,"name":"chapel","full_name":"mppf/chapel","owner":{"login":"mppf","id":3653132,"avatar_url":"https://avatars.githubusercontent.com/u/3653132?v=3","gravatar_id":"","url":"https://api.github.com/users/mppf","html_url":"https://github.com/mppf","followers_url":"https://api.github.com/users/mppf/followers","following_url":"https://api.github.com/users/mppf/following{/other_user}","gists_url":"https://api.github.com/users/mppf/gists{/gist_id}","starred_url":"https://api.github.com/users/mppf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mppf/subscriptions","organizations_url":"https://api.github.com/users/mppf/orgs","repos_url":"https://api.github.com/users/mppf/repos","events_url":"https://api.github.com/users/mppf/events{/privacy}","received_events_url":"https://api.github.com/users/mppf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mppf/chapel","description":"a Productive Parallel Programming Language","fork":true,"url":"https://api.github.com/repos/mppf/chapel","forks_url":"https://api.github.com/repos/mppf/chapel/forks","keys_url":"https://api.github.com/repos/mppf/chapel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mppf/chapel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mppf/chapel/teams","hooks_url":"https://api.github.com/repos/mppf/chapel/hooks","issue_events_url":"https://api.github.com/repos/mppf/chapel/issues/events{/number}","events_url":"https://api.github.com/repos/mppf/chapel/events","assignees_url":"https://api.github.com/repos/mppf/chapel/assignees{/user}","branches_url":"https://api.github.com/repos/mppf/chapel/branches{/branch}","tags_url":"https://api.github.com/repos/mppf/chapel/tags","blobs_url":"https://api.github.com/repos/mppf/chapel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mppf/chapel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mppf/chapel/git/refs{/sha}","trees_url":"https://api.github.com/repos/mppf/chapel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mppf/chapel/statuses/{sha}","languages_url":"https://api.github.com/repos/mppf/chapel/languages","stargazers_url":"https://api.github.com/repos/mppf/chapel/stargazers","contributors_url":"https://api.github.com/repos/mppf/chapel/contributors","subscribers_url":"https://api.github.com/repos/mppf/chapel/subscribers","subscription_url":"https://api.github.com/repos/mppf/chapel/subscription","commits_url":"https://api.github.com/repos/mppf/chapel/commits{/sha}","git_commits_url":"https://api.github.com/repos/mppf/chapel/git/commits{/sha}","comments_url":"https://api.github.com/repos/mppf/chapel/comments{/number}","issue_comment_url":"https://api.github.com/repos/mppf/chapel/issues/comments{/number}","contents_url":"https://api.github.com/repos/mppf/chapel/contents/{+path}","compare_url":"https://api.github.com/repos/mppf/chapel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mppf/chapel/merges","archive_url":"https://api.github.com/repos/mppf/chapel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mppf/chapel/downloads","issues_url":"https://api.github.com/repos/mppf/chapel/issues{/number}","pulls_url":"https://api.github.com/repos/mppf/chapel/pulls{/number}","milestones_url":"https://api.github.com/repos/mppf/chapel/milestones{/number}","notifications_url":"https://api.github.com/repos/mppf/chapel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mppf/chapel/labels{/name}","releases_url":"https://api.github.com/repos/mppf/chapel/releases{/id}","created_at":"2014-07-22T14:05:45Z","updated_at":"2016-01-11T15:01:10Z","pushed_at":"2016-01-20T15:26:37Z","git_url":"git://github.com/mppf/chapel.git","ssh_url":"git@github.com:mppf/chapel.git","clone_url":"https://github.com/mppf/chapel.git","svn_url":"https://github.com/mppf/chapel","homepage":"http://chapel.cray.com/","size":430985,"stargazers_count":1,"watchers_count":1,"language":"Chapel","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"chapel-lang:master","ref":"master","sha":"8af1d135ccc82ec9663b35fde1eada94ade8d695","user":{"login":"chapel-lang","id":7597261,"avatar_url":"https://avatars.githubusercontent.com/u/7597261?v=3","gravatar_id":"","url":"https://api.github.com/users/chapel-lang","html_url":"https://github.com/chapel-lang","followers_url":"https://api.github.com/users/chapel-lang/followers","following_url":"https://api.github.com/users/chapel-lang/following{/other_user}","gists_url":"https://api.github.com/users/chapel-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/chapel-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapel-lang/subscriptions","organizations_url":"https://api.github.com/users/chapel-lang/orgs","repos_url":"https://api.github.com/users/chapel-lang/repos","events_url":"https://api.github.com/users/chapel-lang/events{/privacy}","received_events_url":"https://api.github.com/users/chapel-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":21663285,"name":"chapel","full_name":"chapel-lang/chapel","owner":{"login":"chapel-lang","id":7597261,"avatar_url":"https://avatars.githubusercontent.com/u/7597261?v=3","gravatar_id":"","url":"https://api.github.com/users/chapel-lang","html_url":"https://github.com/chapel-lang","followers_url":"https://api.github.com/users/chapel-lang/followers","following_url":"https://api.github.com/users/chapel-lang/following{/other_user}","gists_url":"https://api.github.com/users/chapel-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/chapel-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapel-lang/subscriptions","organizations_url":"https://api.github.com/users/chapel-lang/orgs","repos_url":"https://api.github.com/users/chapel-lang/repos","events_url":"https://api.github.com/users/chapel-lang/events{/privacy}","received_events_url":"https://api.github.com/users/chapel-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chapel-lang/chapel","description":"a Productive Parallel Programming Language","fork":false,"url":"https://api.github.com/repos/chapel-lang/chapel","forks_url":"https://api.github.com/repos/chapel-lang/chapel/forks","keys_url":"https://api.github.com/repos/chapel-lang/chapel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chapel-lang/chapel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chapel-lang/chapel/teams","hooks_url":"https://api.github.com/repos/chapel-lang/chapel/hooks","issue_events_url":"https://api.github.com/repos/chapel-lang/chapel/issues/events{/number}","events_url":"https://api.github.com/repos/chapel-lang/chapel/events","assignees_url":"https://api.github.com/repos/chapel-lang/chapel/assignees{/user}","branches_url":"https://api.github.com/repos/chapel-lang/chapel/branches{/branch}","tags_url":"https://api.github.com/repos/chapel-lang/chapel/tags","blobs_url":"https://api.github.com/repos/chapel-lang/chapel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chapel-lang/chapel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chapel-lang/chapel/git/refs{/sha}","trees_url":"https://api.github.com/repos/chapel-lang/chapel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chapel-lang/chapel/statuses/{sha}","languages_url":"https://api.github.com/repos/chapel-lang/chapel/languages","stargazers_url":"https://api.github.com/repos/chapel-lang/chapel/stargazers","contributors_url":"https://api.github.com/repos/chapel-lang/chapel/contributors","subscribers_url":"https://api.github.com/repos/chapel-lang/chapel/subscribers","subscription_url":"https://api.github.com/repos/chapel-lang/chapel/subscription","commits_url":"https://api.github.com/repos/chapel-lang/chapel/commits{/sha}","git_commits_url":"https://api.github.com/repos/chapel-lang/chapel/git/commits{/sha}","comments_url":"https://api.github.com/repos/chapel-lang/chapel/comments{/number}","issue_comment_url":"https://api.github.com/repos/chapel-lang/chapel/issues/comments{/number}","contents_url":"https://api.github.com/repos/chapel-lang/chapel/contents/{+path}","compare_url":"https://api.github.com/repos/chapel-lang/chapel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chapel-lang/chapel/merges","archive_url":"https://api.github.com/repos/chapel-lang/chapel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chapel-lang/chapel/downloads","issues_url":"https://api.github.com/repos/chapel-lang/chapel/issues{/number}","pulls_url":"https://api.github.com/repos/chapel-lang/chapel/pulls{/number}","milestones_url":"https://api.github.com/repos/chapel-lang/chapel/milestones{/number}","notifications_url":"https://api.github.com/repos/chapel-lang/chapel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chapel-lang/chapel/labels{/name}","releases_url":"https://api.github.com/repos/chapel-lang/chapel/releases{/id}","created_at":"2014-07-09T18:15:54Z","updated_at":"2016-01-20T00:46:24Z","pushed_at":"2016-01-20T17:33:09Z","git_url":"git://github.com/chapel-lang/chapel.git","ssh_url":"git@github.com:chapel-lang/chapel.git","clone_url":"https://github.com/chapel-lang/chapel.git","svn_url":"https://github.com/chapel-lang/chapel","homepage":"http://chapel.cray.com/","size":437673,"stargazers_count":197,"watchers_count":197,"language":"Chapel","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":64,"mirror_url":null,"open_issues_count":12,"forks":64,"open_issues":12,"watchers":197,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134"},"html":{"href":"https://github.com/chapel-lang/chapel/pull/3134"},"issue":{"href":"https://api.github.com/repos/chapel-lang/chapel/issues/3134"},"comments":{"href":"https://api.github.com/repos/chapel-lang/chapel/issues/3134/comments"},"review_comments":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134/comments"},"review_comment":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/3134/commits"},"statuses":{"href":"https://api.github.com/repos/chapel-lang/chapel/statuses/e81b07f9fbe3a3a227b49a98b7951bf76ad9220c"}}}}