Commit 6b268bce authored by arv's avatar arv Committed by Commit bot

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
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_chromium_rel_ng;tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1194173004

Cr-Commit-Position: refs/heads/master@{#29202}
parent 7ebf6fc9
......@@ -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
......
......@@ -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);
}
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment