Reviewers: adamk, littledan,
Message:
PTAL
Description:
Fix string HTML methods to call ToString
Before this we were using + which calls valueOf which is not correct
for these methods.
BUG=v8:4222
LOG=N
R=adamk, littledan
Please review this at https://codereview.chromium.org/1194173004/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+51, -13 lines):
M src/string.js
M test/mjsunit/es6/string-html.js
Index: src/string.js
diff --git a/src/string.js b/src/string.js
index
9798846dc7be3e8e74012fa8be23e259857a162d..cf70d40c85b8f165c14216f025ce40da703f4891
100644
--- a/src/string.js
+++ b/src/string.js
@@ -853,91 +853,94 @@ function HtmlEscape(str) {
// ES6 draft, revision 26 (2014-07-18), section B.2.3.2
function StringAnchor(name) {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.anchor");
- return "<a name=\"" + HtmlEscape(name) + "\">" + this + "</a>";
+ return "<a name=\"" + HtmlEscape(name) + "\">" + TO_STRING_INLINE(this) +
+ "</a>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.3
function StringBig() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.big");
- return "<big>" + this + "</big>";
+ return "<big>" + TO_STRING_INLINE(this) + "</big>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.4
function StringBlink() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.blink");
- return "<blink>" + this + "</blink>";
+ return "<blink>" + TO_STRING_INLINE(this) + "</blink>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.5
function StringBold() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.bold");
- return "<b>" + this + "</b>";
+ return "<b>" + TO_STRING_INLINE(this) + "</b>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.6
function StringFixed() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.fixed");
- return "<tt>" + this + "</tt>";
+ return "<tt>" + TO_STRING_INLINE(this) + "</tt>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.7
function StringFontcolor(color) {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontcolor");
- return "<font color=\"" + HtmlEscape(color) + "\">" + this + "</font>";
+ return "<font color=\"" + HtmlEscape(color) + "\">" +
TO_STRING_INLINE(this) +
+ "</font>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.8
function StringFontsize(size) {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontsize");
- return "<font size=\"" + HtmlEscape(size) + "\">" + this + "</font>";
+ return "<font size=\"" + HtmlEscape(size) + "\">" +
TO_STRING_INLINE(this) +
+ "</font>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.9
function StringItalics() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.italics");
- return "<i>" + this + "</i>";
+ return "<i>" + TO_STRING_INLINE(this) + "</i>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.10
function StringLink(s) {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.link");
- return "<a href=\"" + HtmlEscape(s) + "\">" + this + "</a>";
+ return "<a href=\"" + HtmlEscape(s) + "\">" + TO_STRING_INLINE(this)
+ "</a>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.11
function StringSmall() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.small");
- return "<small>" + this + "</small>";
+ return "<small>" + TO_STRING_INLINE(this) + "</small>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.12
function StringStrike() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.strike");
- return "<strike>" + this + "</strike>";
+ return "<strike>" + TO_STRING_INLINE(this) + "</strike>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.13
function StringSub() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.sub");
- return "<sub>" + this + "</sub>";
+ return "<sub>" + TO_STRING_INLINE(this) + "</sub>";
}
// ES6 draft, revision 26 (2014-07-18), section B.2.3.14
function StringSup() {
CHECK_OBJECT_COERCIBLE(this, "String.prototype.sup");
- return "<sup>" + this + "</sup>";
+ return "<sup>" + TO_STRING_INLINE(this) + "</sup>";
}
// ES6 draft 01-20-14, section 21.1.3.13
Index: test/mjsunit/es6/string-html.js
diff --git a/test/mjsunit/es6/string-html.js
b/test/mjsunit/es6/string-html.js
index
4f3feb56dd1f5e7e10b1f3f9a5e153b450b84f15..1c63221c9f7ec6b0c8949628f8ebd4bffadffe9d
100644
--- a/test/mjsunit/es6/string-html.js
+++ b/test/mjsunit/es6/string-html.js
@@ -157,3 +157,38 @@ assertThrows(function() {
String.prototype.sup.call(null);
}, TypeError);
assertEquals(String.prototype.sup.length, 0);
+
+
+(function TestToString() {
+ var calls = 0;
+ var obj = {
+ toString() {
+ calls++;
+ return 'abc';
+ },
+ valueOf() {
+ assertUnreachable();
+ }
+ };
+
+ var methodNames = [
+ 'anchor',
+ 'big',
+ 'blink',
+ 'bold',
+ 'fixed',
+ 'fontcolor',
+ 'fontsize',
+ 'italics',
+ 'link',
+ 'small',
+ 'strike',
+ 'sub',
+ 'sup',
+ ];
+ for (var name of methodNames) {
+ calls = 0;
+ String.prototype[name].call(obj);
+ assertEquals(1, calls);
+ }
+})();
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.