Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /gin /try_catch.cc
blob: 302f1d1df8802d0bfebd460cc0f41961a0392fc8 [file] [log] [blame] [edit]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include"gin/try_catch.h"
#include<sstream>
#include"gin/converter.h"
#include"v8/include/v8-message.h"
namespace{
v8::Local<v8::String>GetSourceLine(v8::Isolate* isolate,
v8::Local<v8::Message> message){
auto maybe= message->GetSourceLine(isolate->GetCurrentContext());
v8::Local<v8::String> source_line;
return maybe.ToLocal(&source_line)? source_line: v8::String::Empty(isolate);
}
}// namespace
namespace gin{
TryCatch::TryCatch(v8::Isolate* isolate)
: isolate_(isolate), try_catch_(isolate){
}
TryCatch::~TryCatch()=default;
boolTryCatch::HasCaught(){
return try_catch_.HasCaught();
}
std::stringTryCatch::GetStackTrace(){
if(!HasCaught()){
return"";
}
std::stringstream ss;
v8::Local<v8::Message> message= try_catch_.Message();
ss<< V8ToString(isolate_, message->Get())<< std::endl
<< V8ToString(isolate_,GetSourceLine(isolate_, message))<< std::endl;
v8::Local<v8::StackTrace> trace= message->GetStackTrace();
if(trace.IsEmpty())
return ss.str();
int len= trace->GetFrameCount();
for(int i=0; i< len;++i){
v8::Local<v8::StackFrame> frame= trace->GetFrame(isolate_, i);
ss<< V8ToString(isolate_, frame->GetScriptName())<<":"
<< frame->GetLineNumber()<<":"<< frame->GetColumn()<<": "
<< V8ToString(isolate_, frame->GetFunctionName())<< std::endl;
}
return ss.str();
}
}// namespace gin

[8]ページ先頭

©2009-2025 Movatter.jp