deps: cherry-pick 1f53e42 from v8 upstream
Original commit message: Handle symbols in FrameMirror#invocationText(). Fix a TypeError when putting together the invocationText for a symbol method's stack frame. See https://github.com/nodejs/node/issues/7536. Review-Url: https://codereview.chromium.org/2122793003 Cr-Commit-Position: refs/heads/master@{#37597} Fixes: https://github.com/nodejs/node/issues/7536 PR-URL: https://github.com/nodejs/node/pull/7612 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michaël Zasso <mic.besace@gmail.com>
This commit is contained in:
parent
48c52d765d
commit
5cdbbdf94d
2
deps/v8/include/v8-version.h
vendored
2
deps/v8/include/v8-version.h
vendored
@ -11,7 +11,7 @@
|
|||||||
#define V8_MAJOR_VERSION 5
|
#define V8_MAJOR_VERSION 5
|
||||||
#define V8_MINOR_VERSION 1
|
#define V8_MINOR_VERSION 1
|
||||||
#define V8_BUILD_NUMBER 281
|
#define V8_BUILD_NUMBER 281
|
||||||
#define V8_PATCH_LEVEL 75
|
#define V8_PATCH_LEVEL 76
|
||||||
|
|
||||||
// Use 1 for candidates and 0 otherwise.
|
// Use 1 for candidates and 0 otherwise.
|
||||||
// (Boolean macro values are not supported by all preprocessors.)
|
// (Boolean macro values are not supported by all preprocessors.)
|
||||||
|
10
deps/v8/src/debug/mirrors.js
vendored
10
deps/v8/src/debug/mirrors.js
vendored
@ -1495,6 +1495,12 @@ PropertyMirror.prototype.name = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PropertyMirror.prototype.toText = function() {
|
||||||
|
if (IS_SYMBOL(this.name_)) return %SymbolDescriptiveString(this.name_);
|
||||||
|
return this.name_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
PropertyMirror.prototype.isIndexed = function() {
|
PropertyMirror.prototype.isIndexed = function() {
|
||||||
for (var i = 0; i < this.name_.length; i++) {
|
for (var i = 0; i < this.name_.length; i++) {
|
||||||
if (this.name_[i] < '0' || '9' < this.name_[i]) {
|
if (this.name_[i] < '0' || '9' < this.name_[i]) {
|
||||||
@ -2027,10 +2033,10 @@ FrameMirror.prototype.invocationText = function() {
|
|||||||
if (display_receiver) {
|
if (display_receiver) {
|
||||||
result += '.';
|
result += '.';
|
||||||
}
|
}
|
||||||
result += property.name();
|
result += property.toText();
|
||||||
} else {
|
} else {
|
||||||
result += '[';
|
result += '[';
|
||||||
result += property.name();
|
result += property.toText();
|
||||||
result += ']';
|
result += ']';
|
||||||
}
|
}
|
||||||
// Also known as - if the name in the function doesn't match the name
|
// Also known as - if the name in the function doesn't match the name
|
||||||
|
80
deps/v8/test/mjsunit/debug-backtrace-text.js
vendored
80
deps/v8/test/mjsunit/debug-backtrace-text.js
vendored
@ -35,7 +35,8 @@ function Point(x, y) {
|
|||||||
|
|
||||||
Point.prototype.distanceTo = function(p) {
|
Point.prototype.distanceTo = function(p) {
|
||||||
debugger;
|
debugger;
|
||||||
return Math.sqrt(Math.pow(Math.abs(this.x - p.x), 2) + Math.pow(Math.abs(this.y - p.y), 2))
|
return Math.sqrt(Math.pow(Math.abs(this.x - p.x), 2) +
|
||||||
|
Math.pow(Math.abs(this.y - p.y), 2))
|
||||||
}
|
}
|
||||||
|
|
||||||
p1 = new Point(1,1);
|
p1 = new Point(1,1);
|
||||||
@ -58,7 +59,7 @@ a=[1,2,distance];
|
|||||||
// Get the Debug object exposed from the debug context global object.
|
// Get the Debug object exposed from the debug context global object.
|
||||||
Debug = debug.Debug
|
Debug = debug.Debug
|
||||||
|
|
||||||
testConstructor = false; // Flag to control which part of the test is run.
|
what = 'constructor'; // Flag to control which part of the test is run.
|
||||||
listenerCalled = false;
|
listenerCalled = false;
|
||||||
exception = false;
|
exception = false;
|
||||||
|
|
||||||
@ -72,30 +73,47 @@ function safeEval(code) {
|
|||||||
|
|
||||||
function listener(event, exec_state, event_data, data) {
|
function listener(event, exec_state, event_data, data) {
|
||||||
try {
|
try {
|
||||||
if (event == Debug.DebugEvent.Break)
|
if (event == Debug.DebugEvent.Break) {
|
||||||
{
|
if (what == 'constructor') {
|
||||||
if (!testConstructor) {
|
// The expected backtrace is
|
||||||
// The expected backtrace is
|
// 0: Call distance on Point where distance is a prototype property
|
||||||
// 0: Call distance on Point where distance is a property on the prototype
|
// 1: Call distance on Point where distance is a direct property
|
||||||
// 1: Call distance on Point where distance is a direct property
|
// 2: Call on function an array element 2
|
||||||
// 2: Call on function an array element 2
|
// 3: [anonymous]
|
||||||
// 3: [anonymous]
|
assertEquals("#<Point>.distanceTo(p=#<Point>)",
|
||||||
assertEquals("#<Point>.distanceTo(p=#<Point>)", exec_state.frame(0).invocationText());
|
exec_state.frame(0).invocationText());
|
||||||
assertEquals("#<Point>.distanceTo(p=#<Point>)", exec_state.frame(1).invocationText());
|
assertEquals("#<Point>.distanceTo(p=#<Point>)",
|
||||||
assertEquals("#<Array>[2](aka distance)(p=#<Point>, q=#<Point>)", exec_state.frame(2).invocationText());
|
exec_state.frame(1).invocationText());
|
||||||
assertEquals("[anonymous]()", exec_state.frame(3).invocationText());
|
assertEquals("#<Array>[2](aka distance)(p=#<Point>, q=#<Point>)",
|
||||||
listenerCalled = true;
|
exec_state.frame(2).invocationText());
|
||||||
} else {
|
assertEquals("[anonymous]()", exec_state.frame(3).invocationText());
|
||||||
// The expected backtrace is
|
listenerCalled = true;
|
||||||
// 0: Call Point constructor
|
} else if (what == 'breakpoint') {
|
||||||
// 1: Call on global function createPoint
|
// The expected backtrace is
|
||||||
// 2: [anonymous]
|
// 0: Call Point constructor
|
||||||
assertEquals("new Point(x=0, y=0)", exec_state.frame(0).invocationText());
|
// 1: Call on global function createPoint
|
||||||
assertEquals("createPoint(x=0, y=0)", exec_state.frame(1).invocationText());
|
// 2: [anonymous]
|
||||||
assertEquals("[anonymous]()", exec_state.frame(2).invocationText());
|
assertEquals("new Point(x=0, y=0)",
|
||||||
listenerCalled = true;
|
exec_state.frame(0).invocationText());
|
||||||
|
assertEquals("createPoint(x=0, y=0)",
|
||||||
|
exec_state.frame(1).invocationText());
|
||||||
|
assertEquals("[anonymous]()", exec_state.frame(2).invocationText());
|
||||||
|
listenerCalled = true;
|
||||||
|
} else if (what == 'symbol') {
|
||||||
|
// The expected backtrace is
|
||||||
|
// 0: Call Point constructor
|
||||||
|
// 1: Call on symbol method
|
||||||
|
// 2: [anonymous]
|
||||||
|
assertEquals("new Point(x=0, y=0)",
|
||||||
|
exec_state.frame(0).invocationText());
|
||||||
|
assertEquals("#<Object>[Symbol(Das Symbol)](x=0, y=0)",
|
||||||
|
exec_state.frame(1).invocationText());
|
||||||
|
assertEquals("[anonymous]()", exec_state.frame(2).invocationText());
|
||||||
|
listenerCalled = true;
|
||||||
|
} else {
|
||||||
|
assertUnreachable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
exception = e
|
exception = e
|
||||||
};
|
};
|
||||||
@ -112,11 +130,21 @@ assertTrue(listenerCalled);
|
|||||||
assertFalse(exception, "exception in listener")
|
assertFalse(exception, "exception in listener")
|
||||||
|
|
||||||
// Set a break point and call to invoke the debug event listener.
|
// Set a break point and call to invoke the debug event listener.
|
||||||
|
what = 'breakpoint';
|
||||||
listenerCalled = false;
|
listenerCalled = false;
|
||||||
testConstructor = true;
|
|
||||||
Debug.setBreakPoint(Point, 0, 0);
|
Debug.setBreakPoint(Point, 0, 0);
|
||||||
createPoint(0, 0);
|
createPoint(0, 0);
|
||||||
|
|
||||||
// Make sure that the debug event listener vas invoked (again).
|
// Make sure that the debug event listener vas invoked (again).
|
||||||
assertTrue(listenerCalled);
|
assertTrue(listenerCalled);
|
||||||
assertFalse(exception, "exception in listener")
|
assertFalse(exception, "exception in listener")
|
||||||
|
|
||||||
|
what = 'symbol';
|
||||||
|
listenerCalled = false;
|
||||||
|
var S = Symbol('Das Symbol');
|
||||||
|
var o = { [S](x, y) { return new Point(x, y); } };
|
||||||
|
Debug.setBreakPoint(Point, 0, 0);
|
||||||
|
o[S](0, 0);
|
||||||
|
|
||||||
|
assertTrue(listenerCalled);
|
||||||
|
assertFalse(exception, "exception in listener")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user