| Index: src/messages.cc
|
| diff --git a/src/messages.cc b/src/messages.cc
|
| index cc6349d73c52cfa15b5fb7aa96250ea84ef9b549..af052124316f17a1dd4ade8c29d52390f1f9e942 100644
|
| --- a/src/messages.cc
|
| +++ b/src/messages.cc
|
| @@ -211,14 +211,6 @@ Handle<Object> JSStackFrame::GetFunctionName() {
|
| return isolate_->factory()->null_value();
|
| }
|
|
|
| -Handle<Object> JSStackFrame::GetScriptNameOrSourceUrl() {
|
| - if (!HasScript()) return isolate_->factory()->null_value();
|
| - Handle<Script> script = GetScript();
|
| - Object* source_url = script->source_url();
|
| - return (source_url->IsString()) ? handle(source_url, isolate_)
|
| - : handle(script->name(), isolate_);
|
| -}
|
| -
|
| namespace {
|
|
|
| bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
|
| @@ -238,8 +230,19 @@ bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
|
| return false;
|
| }
|
|
|
| +Handle<Object> ScriptNameOrSourceUrl(Handle<Script> script, Isolate* isolate) {
|
| + Object* name_or_url = script->source_url();
|
| + if (!name_or_url->IsString()) name_or_url = script->name();
|
| + return handle(name_or_url, isolate);
|
| +}
|
| +
|
| } // namespace
|
|
|
| +Handle<Object> JSStackFrame::GetScriptNameOrSourceUrl() {
|
| + if (!HasScript()) return isolate_->factory()->null_value();
|
| + return ScriptNameOrSourceUrl(GetScript(), isolate_);
|
| +}
|
| +
|
| Handle<Object> JSStackFrame::GetMethodName() {
|
| if (receiver_->IsNull(isolate_) || receiver_->IsUndefined(isolate_)) {
|
| return isolate_->factory()->null_value();
|
| @@ -455,7 +458,7 @@ bool IsNonEmptyString(Handle<Object> object) {
|
| return (object->IsString() && String::cast(*object)->length() > 0);
|
| }
|
|
|
| -void AppendFileLocation(Isolate* isolate, JSStackFrame* call_site,
|
| +void AppendFileLocation(Isolate* isolate, StackFrameBase* call_site,
|
| IncrementalStringBuilder* builder) {
|
| if (call_site->IsNative()) {
|
| builder->AppendCString("native");
|
| @@ -667,6 +670,72 @@ Handle<Object> WasmStackFrame::Null() const {
|
| return isolate_->factory()->null_value();
|
| }
|
|
|
| +Handle<Object> AsmJsWasmStackFrame::GetReceiver() const {
|
| + return isolate_->global_object();
|
| +}
|
| +
|
| +Handle<Object> AsmJsWasmStackFrame::GetFunction() const {
|
| + // TODO(clemensh): Return lazily created JSFunction.
|
| + return Null();
|
| +}
|
| +
|
| +Handle<Object> AsmJsWasmStackFrame::GetFileName() {
|
| + Handle<Script> script =
|
| + wasm::GetAsmWasmScript(Handle<JSObject>::cast(wasm_obj_));
|
| + return handle(script->name(), isolate_);
|
| +}
|
| +
|
| +Handle<Object> AsmJsWasmStackFrame::GetFunctionName() {
|
| + return wasm::GetWasmFunctionNameOrNull(isolate_, wasm_obj_, wasm_func_index_);
|
| +}
|
| +
|
| +Handle<Object> AsmJsWasmStackFrame::GetScriptNameOrSourceUrl() {
|
| + Handle<Script> script =
|
| + wasm::GetAsmWasmScript(Handle<JSObject>::cast(wasm_obj_));
|
| + return ScriptNameOrSourceUrl(script, isolate_);
|
| +}
|
| +
|
| +int AsmJsWasmStackFrame::GetPosition() const {
|
| + DCHECK_LE(0, offset_);
|
| + int byte_offset = code_->SourcePosition(offset_);
|
| + return wasm::GetAsmWasmSourcePosition(Handle<JSObject>::cast(wasm_obj_),
|
| + wasm_func_index_, byte_offset);
|
| +}
|
| +
|
| +int AsmJsWasmStackFrame::GetLineNumber() {
|
| + DCHECK_LE(0, GetPosition());
|
| + Handle<Script> script =
|
| + wasm::GetAsmWasmScript(Handle<JSObject>::cast(wasm_obj_));
|
| + return Script::GetLineNumber(script, GetPosition()) + 1;
|
| +}
|
| +
|
| +int AsmJsWasmStackFrame::GetColumnNumber() {
|
| + DCHECK_LE(0, GetPosition());
|
| + Handle<Script> script =
|
| + wasm::GetAsmWasmScript(Handle<JSObject>::cast(wasm_obj_));
|
| + return Script::GetColumnNumber(script, GetPosition()) + 1;
|
| +}
|
| +
|
| +MaybeHandle<String> AsmJsWasmStackFrame::ToString() {
|
| + // The string should look exactly as the respective javascript frame string.
|
| + // Keep this method in line to JSStackFrame::ToString().
|
| +
|
| + IncrementalStringBuilder builder(isolate_);
|
| +
|
| + Handle<Object> function_name = GetFunctionName();
|
| +
|
| + if (IsNonEmptyString(function_name)) {
|
| + builder.AppendString(Handle<String>::cast(function_name));
|
| + builder.AppendCString(" (");
|
| + }
|
| +
|
| + AppendFileLocation(isolate_, this, &builder);
|
| +
|
| + if (IsNonEmptyString(function_name)) builder.AppendCString(")");
|
| +
|
| + RETURN_RESULT(isolate_, builder.Finish(), String);
|
| +}
|
| +
|
| FrameArrayIterator::FrameArrayIterator(Isolate* isolate,
|
| Handle<FrameArray> array, int frame_ix)
|
| : isolate_(isolate), array_(array), next_frame_ix_(frame_ix) {}
|
| @@ -684,10 +753,14 @@ StackFrameBase* FrameArrayIterator::Frame() {
|
| if (is_js_frame) {
|
| js_frame_.FromFrameArray(isolate_, array_, next_frame_ix_);
|
| return &js_frame_;
|
| - } else {
|
| - wasm_frame_.FromFrameArray(isolate_, array_, next_frame_ix_);
|
| - return &wasm_frame_;
|
| }
|
| + const bool is_asm_wasm_frame = (flags & FrameArray::kIsAsmWasmFrame) != 0;
|
| + if (is_asm_wasm_frame) {
|
| + asm_wasm_frame_.FromFrameArray(isolate_, array_, next_frame_ix_);
|
| + return &asm_wasm_frame_;
|
| + }
|
| + wasm_frame_.FromFrameArray(isolate_, array_, next_frame_ix_);
|
| + return &wasm_frame_;
|
| }
|
|
|
| namespace {
|
|
|