// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE.chromium file. #include "native_mate/try_catch.h" #include #include "native_mate/converter.h" namespace mate { TryCatch::TryCatch() { } TryCatch::~TryCatch() { } bool TryCatch::HasCaught() { return try_catch_.HasCaught(); } std::string TryCatch::GetStackTrace() { if (!HasCaught()) { return ""; } std::stringstream ss; v8::Local message = try_catch_.Message(); ss << V8ToString(message->Get()) << std::endl << V8ToString(message->GetSourceLine()) << std::endl; v8::Local trace = message->GetStackTrace(); if (trace.IsEmpty()) return ss.str(); int len = trace->GetFrameCount(); for (int i = 0; i < len; ++i) { v8::Local frame = trace->GetFrame(i); ss << V8ToString(frame->GetScriptName()) << ":" << frame->GetLineNumber() << ":" << frame->GetColumn() << ": " << V8ToString(frame->GetFunctionName()) << std::endl; } return ss.str(); } } // namespace mate