code: function (value) {
                  shared.utils.dassert(shared.utils.isObjectOrArray(value));
                  var t = shared.tracker.getTrackerUnsafe(value);
                  if(t === null) {
                      if(value._pid === undefined) {
                          // Recurse into props of new object
                          var keys = Object.keys(value);
                          for(var k = 0; k < keys.length; k++) {
                              var key = keys[k];
                              if(shared.utils.isObjectOrArray(value[key])) {
                                  this.valueId(value[key]);
                              }
                          }
                          // Record this as new object
                          Object.defineProperty(value, '_pid', {
                              value: shared.utils.UID()
                          });
                          this._mtx.nset.push({
                              id: value._pid,
                              obj: value
                          });
                      }
                      return value._pid;
                  } else {
                      if(t.tc() !== this) {
                          shared.utils.defaultLogger().fatal('Objects can not be used in multiple stores');
                      }
                      return value._tracker.id();
                  }
              }
docs: /*
  Obtain an id for any object. If passed an untracked object an id
  will be assigned to it although the object will not be tracked.
  Objects that are already been tracked by a different cache cause
  an exception.