code: func (self *Script) unmarshalBinary(data []byte) error {
  	decoder := gob.NewDecoder(bytes.NewReader(data))
  	err := decoder.Decode(&self.version)
  	if err != nil {
  		goto error
  	}
  	if self.version != scriptVersion {
  		err = ErrVersion
  		goto error
  	}
  	err = decoder.Decode(&self.program)
  	if err != nil {
  		goto error
  	}
  	err = decoder.Decode(&self.filename)
  	if err != nil {
  		goto error
  	}
  	err = decoder.Decode(&self.src)
  	if err != nil {
  		goto error
  	}
  	return nil
  error:
  	self.version = ""
  	self.program = nil
  	self.filename = ""
  	self.src = ""
  	return err
  }
docs: // UnmarshalBinary will vivify a marshalled script into something usable. If the script was
  // originally marshalled on a different version of the otto runtime, then this method
  // will return an error.
  //
  // The binary format can change at any time and should be considered unspecified and opaque.
  //