/**
   * Create a new instance of NativeNumber
   *
   * @param owningEnvironment The environment in which this native number was created
   */
  public JSNumberConstructor(Environment owningEnvironment) {
    super(owningEnvironment);

    int fileIndex = FileContextManager.BUILT_IN_FILE_INDEX;
    int offset = Range.Empty.getStartingOffset();

    // get global
    IScope global = owningEnvironment.getGlobal();

    // put self into environment
    global.putPropertyValue(
        "Number", this, fileIndex, Property.DONT_DELETE | Property.DONT_ENUM); // $NON-NLS-1$

    // set Number.[[prototype]]
    IObject function = global.getPropertyValue("Function", fileIndex, offset); // $NON-NLS-1$
    IObject functionPrototype =
        function.getPropertyValue("prototype", fileIndex, offset); // $NON-NLS-1$
    this.setPrototype(functionPrototype);

    // create public prototype object
    IObject prototype = owningEnvironment.createObject(fileIndex, Range.Empty);

    // store our public prototype
    this.putPropertyValue("prototype", prototype, fileIndex); // $NON-NLS-1$
  }
  /** Initialize the properties on this object */
  public void initializeProperties() {
    Environment environment = this.owningEnvironment;
    int attributes = Property.DONT_DELETE | Property.DONT_ENUM;
    int fileIndex = FileContextManager.BUILT_IN_FILE_INDEX;
    int offset = Range.Empty.getStartingOffset();

    // add properties to Number
    this.putPropertyValue(
        "length",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    this.putPropertyValue(
        "MAX_VALUE",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    this.putPropertyValue(
        "MIN_VALUE",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    this.putPropertyValue(
        "NaN",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    this.putPropertyValue(
        "NEGATIVE_INFINITY",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    this.putPropertyValue(
        "POSITIVE_INFINITY",
        environment.createNumber(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$

    // add properties to Number.prototype
    IObject prototype = this.getPropertyValue("prototype", fileIndex, offset); // $NON-NLS-1$

    prototype.putPropertyValue("constructor", this, fileIndex, attributes); // $NON-NLS-1$
    prototype.putPropertyValue(
        "toString",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    prototype.putPropertyValue(
        "toLocaleString",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    prototype.putPropertyValue(
        "valueOf",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    prototype.putPropertyValue(
        "toFixed",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    prototype.putPropertyValue(
        "toExponential",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
    prototype.putPropertyValue(
        "toPrecision",
        environment.createFunction(fileIndex, Range.Empty),
        fileIndex,
        attributes); //$NON-NLS-1$
  }