whole_func_string: function(assignment) {
          // This is all about re-creating Assignments
          if (assignment.param.name !== '__command') {
              return;
          }
  
          this._assignments = {};
  
          if (assignment.value) {
              assignment.value.params.forEach(function(param) {
                  this._assignments[param.name] = new Assignment(param, this);
              }, this);
          }
  
          this.assignmentCount = Object.keys(this._assignments).length;
          this._dispatchEvent('commandChange', { command: assignment.value });
      }
func_code_string: function(assignment) {
          // This is all about re-creating Assignments
          if (assignment.param.name !== '__command') {
              return;
          }
  
          this._assignments = {};
  
          if (assignment.value) {
              assignment.value.params.forEach(function(param) {
                  this._assignments[param.name] = new Assignment(param, this);
              }, this);
          }
  
          this.assignmentCount = Object.keys(this._assignments).length;
          this._dispatchEvent('commandChange', { command: assignment.value });
      }
func_documentation_string: When the command changes, we need to keep a bunch of stuff in sync