function ArrayToString() {
  var array;
  var func;
  if (IS_ARRAY(this)) {
    func = this.join;
    if (func === ArrayJoin) {
      return Join(this, this.length, ',', ConvertToString);
    }
    array = this;
  } else {
    array = TO_OBJECT(this);
    func = array.join;
  }
  if (!IS_CALLABLE(func)) {
    return %_Call(ObjectToString, array);
  }
  return %_Call(func, array);
}
function ArrayToString() {
  var array;
  var func;
  if (IS_ARRAY(this)) {
    func = this.join;
    if (func === ArrayJoin) {
      return Join(this, this.length, ',', ConvertToString);
    }
    array = this;
  } else {
    array = TO_OBJECT(this);
    func = array.join;
  }
  if (!IS_CALLABLE(func)) {
    return %_Call(ObjectToString, array);
  }
  return %_Call(func, array);
}
function ArrayToString ( ) { var array ; var func ; if ( IS_ARRAY ( this ) ) { func = this . join ; if ( func === ArrayJoin ) { return Join ( this , this . length , ',' , ConvertToString ) ; } array = this ; } else { array = TO_OBJECT ( this ) ; func = array . join ; } if ( ! IS_CALLABLE ( func ) ) { return % _Call ( ObjectToString , array ) ; } return % _Call ( func , array ) ; }
-------------------------------------------------------------------
-------------------------------------------------------------------