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/messages.cc b/src/messages.cc
index 67ab36f..6e7c495 100644
--- a/src/messages.cc
+++ b/src/messages.cc
@@ -7,11 +7,23 @@
#include "src/api.h"
#include "src/execution.h"
#include "src/isolate-inl.h"
+#include "src/keys.h"
#include "src/string-builder.h"
+#include "src/wasm/wasm-module.h"
namespace v8 {
namespace internal {
+MessageLocation::MessageLocation(Handle<Script> script, int start_pos,
+ int end_pos)
+ : script_(script), start_pos_(start_pos), end_pos_(end_pos) {}
+MessageLocation::MessageLocation(Handle<Script> script, int start_pos,
+ int end_pos, Handle<JSFunction> function)
+ : script_(script),
+ start_pos_(start_pos),
+ end_pos_(end_pos),
+ function_(function) {}
+MessageLocation::MessageLocation() : start_pos_(-1), end_pos_(-1) {}
// If no message listeners have been registered this one is called
// by default.
@@ -158,11 +170,25 @@
: isolate_(isolate) {
Handle<Object> maybe_function = JSObject::GetDataProperty(
call_site_obj, isolate->factory()->call_site_function_symbol());
- if (!maybe_function->IsJSFunction()) return;
+ if (maybe_function->IsJSFunction()) {
+ // javascript
+ fun_ = Handle<JSFunction>::cast(maybe_function);
+ receiver_ = JSObject::GetDataProperty(
+ call_site_obj, isolate->factory()->call_site_receiver_symbol());
+ } else {
+ Handle<Object> maybe_wasm_func_index = JSObject::GetDataProperty(
+ call_site_obj, isolate->factory()->call_site_wasm_func_index_symbol());
+ if (!maybe_wasm_func_index->IsSmi()) {
+ // invalid: neither javascript nor wasm
+ return;
+ }
+ // wasm
+ wasm_obj_ = Handle<JSObject>::cast(JSObject::GetDataProperty(
+ call_site_obj, isolate->factory()->call_site_wasm_obj_symbol()));
+ wasm_func_index_ = Smi::cast(*maybe_wasm_func_index)->value();
+ DCHECK(static_cast<int>(wasm_func_index_) >= 0);
+ }
- fun_ = Handle<JSFunction>::cast(maybe_function);
- receiver_ = JSObject::GetDataProperty(
- call_site_obj, isolate->factory()->call_site_receiver_symbol());
CHECK(JSObject::GetDataProperty(
call_site_obj, isolate->factory()->call_site_position_symbol())
->ToInt32(&pos_));
@@ -170,15 +196,22 @@
Handle<Object> CallSite::GetFileName() {
- Handle<Object> script(fun_->shared()->script(), isolate_);
- if (script->IsScript()) {
- return Handle<Object>(Handle<Script>::cast(script)->name(), isolate_);
- }
- return isolate_->factory()->null_value();
+ if (!IsJavaScript()) return isolate_->factory()->null_value();
+ Object* script = fun_->shared()->script();
+ if (!script->IsScript()) return isolate_->factory()->null_value();
+ return Handle<Object>(Script::cast(script)->name(), isolate_);
}
Handle<Object> CallSite::GetFunctionName() {
+ if (IsWasm()) {
+ if (wasm_obj_->IsUndefined()) return isolate_->factory()->null_value();
+ // wasm_obj_ can be a String if we generate WASM code directly in a test
+ // case.
+ if (wasm_obj_->IsString()) return wasm_obj_;
+ return wasm::GetWasmFunctionName(Handle<JSObject>::cast(wasm_obj_),
+ wasm_func_index_);
+ }
Handle<String> result = JSFunction::GetName(fun_);
if (result->length() != 0) return result;
@@ -191,19 +224,16 @@
return isolate_->factory()->null_value();
}
-
Handle<Object> CallSite::GetScriptNameOrSourceUrl() {
- Handle<Object> script_obj(fun_->shared()->script(), isolate_);
- if (script_obj->IsScript()) {
- Handle<Script> script = Handle<Script>::cast(script_obj);
- Object* source_url = script->source_url();
- if (source_url->IsString()) return Handle<Object>(source_url, isolate_);
- return Handle<Object>(script->name(), isolate_);
- }
- return isolate_->factory()->null_value();
+ if (!IsJavaScript()) return isolate_->factory()->null_value();
+ Object* script_obj = fun_->shared()->script();
+ if (!script_obj->IsScript()) return isolate_->factory()->null_value();
+ Handle<Script> script(Script::cast(script_obj), isolate_);
+ Object* source_url = script->source_url();
+ if (source_url->IsString()) return Handle<Object>(source_url, isolate_);
+ return Handle<Object>(script->name(), isolate_);
}
-
bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
Handle<JSFunction> fun,
LookupIterator::Configuration config) {
@@ -223,7 +253,7 @@
Handle<Object> CallSite::GetMethodName() {
- if (receiver_->IsNull() || receiver_->IsUndefined()) {
+ if (!IsJavaScript() || receiver_->IsNull() || receiver_->IsUndefined()) {
return isolate_->factory()->null_value();
}
Handle<JSReceiver> receiver =
@@ -261,7 +291,8 @@
if (!current->IsJSObject()) break;
Handle<JSObject> current_obj = Handle<JSObject>::cast(current);
if (current_obj->IsAccessCheckNeeded()) break;
- Handle<FixedArray> keys = JSObject::GetEnumPropertyKeys(current_obj);
+ Handle<FixedArray> keys =
+ KeyAccumulator::GetEnumPropertyKeys(isolate_, current_obj);
for (int i = 0; i < keys->length(); i++) {
HandleScope inner_scope(isolate_);
if (!keys->get(i)->IsName()) continue;
@@ -281,7 +312,7 @@
int CallSite::GetLineNumber() {
- if (pos_ >= 0) {
+ if (pos_ >= 0 && IsJavaScript()) {
Handle<Object> script_obj(fun_->shared()->script(), isolate_);
if (script_obj->IsScript()) {
Handle<Script> script = Handle<Script>::cast(script_obj);
@@ -293,7 +324,7 @@
int CallSite::GetColumnNumber() {
- if (pos_ >= 0) {
+ if (pos_ >= 0 && IsJavaScript()) {
Handle<Object> script_obj(fun_->shared()->script(), isolate_);
if (script_obj->IsScript()) {
Handle<Script> script = Handle<Script>::cast(script_obj);
@@ -305,6 +336,7 @@
bool CallSite::IsNative() {
+ if (!IsJavaScript()) return false;
Handle<Object> script(fun_->shared()->script(), isolate_);
return script->IsScript() &&
Handle<Script>::cast(script)->type() == Script::TYPE_NATIVE;
@@ -312,12 +344,14 @@
bool CallSite::IsToplevel() {
+ if (IsWasm()) return false;
return receiver_->IsJSGlobalProxy() || receiver_->IsNull() ||
receiver_->IsUndefined();
}
bool CallSite::IsEval() {
+ if (!IsJavaScript()) return false;
Handle<Object> script(fun_->shared()->script(), isolate_);
return script->IsScript() &&
Handle<Script>::cast(script)->compilation_type() ==
@@ -326,7 +360,7 @@
bool CallSite::IsConstructor() {
- if (!receiver_->IsJSObject()) return false;
+ if (!IsJavaScript() || !receiver_->IsJSObject()) return false;
Handle<Object> constructor =
JSReceiver::GetDataProperty(Handle<JSObject>::cast(receiver_),
isolate_->factory()->constructor_string());