Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(773)

Unified Diff: src/messages.cc

Issue 1909353002: [wasm] Make wasm info available on the stack trace (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-offset-table-3
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/messages.cc
diff --git a/src/messages.cc b/src/messages.cc
index c9b26f2927451fba4cd30b33a5df8dd841e76a53..11bf98e5f44a8c5779c0984ed796854f95770c91 100644
--- a/src/messages.cc
+++ b/src/messages.cc
@@ -8,6 +8,7 @@
#include "src/execution.h"
#include "src/isolate-inl.h"
#include "src/string-builder.h"
+#include "src/wasm/wasm-module.h"
namespace v8 {
namespace internal {
@@ -168,11 +169,24 @@ CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj)
: isolate_(isolate) {
Handle<Object> maybe_function = JSObject::GetDataProperty(
call_site_obj, isolate->factory()->call_site_function_symbol());
- if (!maybe_function->IsJSFunction()) return;
+ Handle<Object> maybe_wasm_func_index;
+ if (maybe_function->IsJSFunction()) {
+ // javascript
+ fun_ = Handle<JSFunction>::cast(maybe_function);
+ receiver_ = JSObject::GetDataProperty(
+ call_site_obj, isolate->factory()->call_site_receiver_symbol());
+ } else if (!(maybe_wasm_func_index = JSObject::GetDataProperty(
Yang 2016/05/03 18:59:08 Please don't do assignments inside an if-expressio
Clemens Hammacher 2016/05/04 09:06:20 Done.
+ call_site_obj,
+ isolate->factory()->call_site_wasm_func_index_symbol()))
+ ->IsUndefined()) {
+ // wasm
+ wasm_obj_ = JSObject::GetDataProperty(
+ call_site_obj, isolate->factory()->call_site_wasm_obj_symbol());
+ CHECK(maybe_wasm_func_index->ToUint32(&wasm_func_index_));
+ } else {
+ return;
+ }
- 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_));
@@ -180,15 +194,22 @@ CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj)
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();
+ Object* script;
+ if (!IsJavaScript() || !(script = fun_->shared()->script())->IsScript())
Yang 2016/05/03 18:59:08 same here. No assignments inside if-expression. An
Clemens Hammacher 2016/05/04 09:06:20 Done.
+ 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
Yang 2016/05/03 18:59:08 That... is really weird and sounds like a hack. Wh
Clemens Hammacher 2016/05/04 09:06:20 See above.
Yang 2016/05/04 12:04:27 So, like above, can we hide this detail (introduce
+ // 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;
@@ -201,19 +222,16 @@ Handle<Object> CallSite::GetFunctionName() {
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();
+ Object* script_obj;
+ if (!IsJavaScript() || !(script_obj = fun_->shared()->script())->IsScript())
Yang 2016/05/03 18:59:08 same as above.
Clemens Hammacher 2016/05/04 09:06:20 Done.
+ 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) {
@@ -233,7 +251,7 @@ bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
Handle<Object> CallSite::GetMethodName() {
- if (receiver_->IsNull() || receiver_->IsUndefined()) {
+ if (!IsJavaScript() || receiver_->IsNull() || receiver_->IsUndefined()) {
return isolate_->factory()->null_value();
}
Handle<JSReceiver> receiver =
@@ -291,7 +309,7 @@ Handle<Object> CallSite::GetMethodName() {
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);
@@ -303,7 +321,7 @@ int CallSite::GetLineNumber() {
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);
@@ -315,6 +333,7 @@ int CallSite::GetColumnNumber() {
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;
@@ -322,12 +341,14 @@ bool CallSite::IsNative() {
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() ==
@@ -336,7 +357,7 @@ bool CallSite::IsEval() {
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());

Powered by Google App Engine
This is Rietveld 408576698