Hello everyone,

In lastest i18n draft, Intl.Collator.prototype is defined in section 11.2.1

The value of Intl.Collator.prototype is the built-in Intl.Collator
> prototype object (11.3)


and section 11.3

The Intl.Collator prototype object is itself an Intl.Collator instance as
> specified in 11.4,

whose internal properties are set as if it had been constructed by the
> expression new Intl.Collator().


But this is ambiguous about prototype's [[Prototype]].
Intl.NumberFormat.prototype and Intl.DateTimeFormat.prototype have the same
problem.
For example, I found a curious point in test262 intl tests,
intl402/ch11/11.3/11.3.js.

var testcase = function() {
  "use strict";

  if (!(Intl.Collator.prototype instanceof Intl.Collator)) {
    $ERROR("Intl.Collator's prototype is not an instance of " +
           "Intl.Collator");
  }

  return true;
}
runTestCase(testcase);


If this test case is passed, chain starting from
Intl.Collator.prototype.[[Prototype]] get to Intl.Collator.prototype.
And this is circular reference, so following script

var collator = new Intl.Collator();
collator.toString;  // this is not defined in Intl.Collator.prototype


never stops because of infinite loop of [[Prototype]] resolution in
[[GetProperty]].
intl402/ch12/12.3/12.3.js and intl402/ch13/13.3/13.3.js have the same bug.
This is reported in
https://mail.mozilla.org/pipermail/test262-discuss/2012-April/000098.html
And later I'll file issue to bugs.ecmascript.org.

So, to make it clear, I suggest adding description about [[Prototype]] of
Intl.Collator.protoype like ES5 Array.prototype in section 15.4.4, like

The value of the [[Prototype]] internal property of the Intl.Collator
> prototype object is the standard built-in Object prototype object (15.2.4).


Regards,
Yusuke Suzuki
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to