docs: function(parent) {
      if (parent === this) {
        throw new Error('parent can not be set to self!');
      }
      enterModifyCurrentAnimationState();
      try {
        if (this._player !== null) {
          this._player.source = null;
          this._player = null;
        }
        if (this.parent !== null) {
          this.remove();
        }
        this._parent = parent;
        // In the case of a AnimationSequence parent, _startTime will be updated
        // by TimingGroup.splice().
        if (this.parent === null || this.parent.type !== 'seq') {
          this._startTime =
              this._stashedStartTime === undefined ? 0.0 : this._stashedStartTime;
          this._stashedStartTime = undefined;
        }
        // In the case of the parent being non-null, _childrenStateModified() will
        // call this via _updateChildInheritedTimes().
        // TODO: Consider optimising this case by skipping this call.
        this._updateTimeMarkers();
      } finally {
        exitModifyCurrentAnimationState(
            Boolean(this.player) ? repeatLastTick : null);
      }
    }