Merge V8 5.2.361.47 DO NOT MERGE
https://chromium.googlesource.com/v8/v8/+/5.2.361.47
FPIIM-449
Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/js/messages.js b/src/js/messages.js
index f8cb967..b5c4b56 100644
--- a/src/js/messages.js
+++ b/src/js/messages.js
@@ -23,6 +23,10 @@
utils.ImportNow("call_site_position_symbol");
var callSiteStrictSymbol =
utils.ImportNow("call_site_strict_symbol");
+var callSiteWasmObjectSymbol =
+ utils.ImportNow("call_site_wasm_obj_symbol");
+var callSiteWasmFunctionIndexSymbol =
+ utils.ImportNow("call_site_wasm_func_index_symbol");
var Float32x4ToString;
var formattedStackTraceSymbol =
utils.ImportNow("formatted_stack_trace_symbol");
@@ -32,12 +36,10 @@
var Int8x16ToString;
var InternalArray = utils.InternalArray;
var internalErrorSymbol = utils.ImportNow("internal_error_symbol");
-var ObjectDefineProperty;
var ObjectHasOwnProperty;
var ObjectToString = utils.ImportNow("object_to_string");
var Script = utils.ImportNow("Script");
var stackTraceSymbol = utils.ImportNow("stack_trace_symbol");
-var StringCharAt;
var StringIndexOf;
var StringSubstring;
var SymbolToString;
@@ -55,9 +57,7 @@
Int16x8ToString = from.Int16x8ToString;
Int32x4ToString = from.Int32x4ToString;
Int8x16ToString = from.Int8x16ToString;
- ObjectDefineProperty = from.ObjectDefineProperty;
ObjectHasOwnProperty = from.ObjectHasOwnProperty;
- StringCharAt = from.StringCharAt;
StringIndexOf = from.StringIndexOf;
StringSubstring = from.StringSubstring;
SymbolToString = from.SymbolToString;
@@ -255,6 +255,7 @@
return -1;
}
+
/**
* Get information on a specific source position.
* @param {number} position The source position
@@ -272,7 +273,7 @@
var line_ends = this.line_ends;
var start = line == 0 ? 0 : line_ends[line - 1] + 1;
var end = line_ends[line];
- if (end > 0 && %_Call(StringCharAt, this.source, end - 1) == '\r') {
+ if (end > 0 && %_StringCharAt(this.source, end - 1) === '\r') {
end--;
}
var column = position - start;
@@ -556,7 +557,9 @@
// Error implementation
function CallSite(receiver, fun, pos, strict_mode) {
- if (!IS_FUNCTION(fun)) {
+ // For wasm frames, receiver is the wasm object and fun is the function index
+ // instead of an actual function.
+ if (!IS_FUNCTION(fun) && !IS_NUMBER(fun)) {
throw MakeTypeError(kCallSiteExpectsFunction, typeof fun);
}
@@ -564,14 +567,19 @@
return new CallSite(receiver, fun, pos, strict_mode);
}
- SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
- SET_PRIVATE(this, callSiteFunctionSymbol, fun);
+ if (IS_FUNCTION(fun)) {
+ SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
+ SET_PRIVATE(this, callSiteFunctionSymbol, fun);
+ } else {
+ SET_PRIVATE(this, callSiteWasmObjectSymbol, receiver);
+ SET_PRIVATE(this, callSiteWasmFunctionIndexSymbol, TO_UINT32(fun));
+ }
SET_PRIVATE(this, callSitePositionSymbol, TO_INT32(pos));
SET_PRIVATE(this, callSiteStrictSymbol, TO_BOOLEAN(strict_mode));
}
function CheckCallSite(obj, name) {
- if (!IS_RECEIVER(obj) || !HAS_PRIVATE(obj, callSiteFunctionSymbol)) {
+ if (!IS_RECEIVER(obj) || !HAS_PRIVATE(obj, callSitePositionSymbol)) {
throw MakeTypeError(kCallSiteMethod, name);
}
}
@@ -622,6 +630,12 @@
function CallSiteGetFunctionName() {
// See if the function knows its own name
CheckCallSite(this, "getFunctionName");
+ if (HAS_PRIVATE(this, callSiteWasmObjectSymbol)) {
+ var wasm = GET_PRIVATE(this, callSiteWasmObjectSymbol);
+ var func_index = GET_PRIVATE(this, callSiteWasmFunctionIndexSymbol);
+ if (IS_UNDEFINED(wasm)) return "<WASM>";
+ return %WasmGetFunctionName(wasm, func_index);
+ }
return %CallSiteGetFunctionNameRT(this);
}
@@ -638,6 +652,9 @@
}
function CallSiteGetLineNumber() {
+ if (HAS_PRIVATE(this, callSiteWasmObjectSymbol)) {
+ return GET_PRIVATE(this, callSiteWasmFunctionIndexSymbol);
+ }
CheckCallSite(this, "getLineNumber");
return %CallSiteGetLineNumberRT(this);
}
@@ -658,6 +675,13 @@
}
function CallSiteToString() {
+ if (HAS_PRIVATE(this, callSiteWasmObjectSymbol)) {
+ var funName = this.getFunctionName();
+ var funcIndex = GET_PRIVATE(this, callSiteWasmFunctionIndexSymbol);
+ var pos = this.getPosition();
+ return funName + " (<WASM>:" + funcIndex + ":" + pos + ")";
+ }
+
var fileName;
var fileLocation = "";
if (this.isNative()) {
@@ -795,14 +819,19 @@
function GetStackFrames(raw_stack) {
+ var internal_raw_stack = new InternalArray();
+ %MoveArrayContents(raw_stack, internal_raw_stack);
var frames = new InternalArray();
- var sloppy_frames = raw_stack[0];
- for (var i = 1; i < raw_stack.length; i += 4) {
- var recv = raw_stack[i];
- var fun = raw_stack[i + 1];
- var code = raw_stack[i + 2];
- var pc = raw_stack[i + 3];
- var pos = %_IsSmi(code) ? code : %FunctionGetPositionForOffset(code, pc);
+ var sloppy_frames = internal_raw_stack[0];
+ for (var i = 1; i < internal_raw_stack.length; i += 4) {
+ var recv = internal_raw_stack[i];
+ var fun = internal_raw_stack[i + 1];
+ var code = internal_raw_stack[i + 2];
+ var pc = internal_raw_stack[i + 3];
+ // For traps in wasm, the bytecode offset is passed as (-1 - offset).
+ // Otherwise, lookup the position from the pc.
+ var pos = IS_NUMBER(fun) && pc < 0 ? (-1 - pc) :
+ %FunctionGetPositionForOffset(code, pc);
sloppy_frames--;
frames.push(new CallSite(recv, fun, pos, (sloppy_frames < 0)));
}
@@ -879,7 +908,7 @@
if (IS_UNDEFINED(stack_trace)) {
// Neither formatted nor structured stack trace available.
// Look further up the prototype chain.
- holder = %_GetPrototype(holder);
+ holder = %object_get_prototype_of(holder);
continue;
}
formatted_stack_trace = FormatStackTrace(holder, stack_trace);
@@ -995,9 +1024,9 @@
// Define actual captureStackTrace function after everything has been set up.
captureStackTrace = function captureStackTrace(obj, cons_opt) {
// Define accessors first, as this may fail and throw.
- ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter,
- set: StackTraceSetter,
- configurable: true });
+ %object_define_property(obj, 'stack', { get: StackTraceGetter,
+ set: StackTraceSetter,
+ configurable: true });
%CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace);
};