From: Lucian Grijincu Date: Thu, 17 Nov 2016 19:06:36 +0000 (-0800) Subject: folly: ExceptionWrapper: remove from header X-Git-Tag: v2016.11.21.00~19 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=0bf2bc290b27e5567fcd5d23d02dd6a5c24dcb64 folly: ExceptionWrapper: remove from header Summary: #accept2ship Reviewed By: yfeldblum Differential Revision: D4192095 fbshipit-source-id: eb0cad875bcc24d1c87a99890c51aea31f7024c9 --- diff --git a/folly/ExceptionWrapper.cpp b/folly/ExceptionWrapper.cpp new file mode 100644 index 00000000..3beb92e8 --- /dev/null +++ b/folly/ExceptionWrapper.cpp @@ -0,0 +1,60 @@ +/* + * Copyright 2016 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include + +#include +#include + +namespace folly { + +[[noreturn]] void exception_wrapper::throwException() const { + if (throwfn_) { + throwfn_(item_.get()); + } else if (eptr_) { + std::rethrow_exception(eptr_); + } + std::cerr + << "Cannot use `throwException` with an empty folly::exception_wrapper" + << std::endl; + std::terminate(); +} + +fbstring exception_wrapper::class_name() const { + if (item_) { + auto& i = *item_; + return demangle(typeid(i)); + } else if (eptr_) { + return ename_; + } else { + return fbstring(); + } +} + +fbstring exception_wrapper::what() const { + if (item_) { + return exceptionStr(*item_); + } else if (eptr_) { + return estr_; + } else { + return fbstring(); + } +} + +fbstring exceptionStr(const exception_wrapper& ew) { + return ew.what(); +} + +} // folly diff --git a/folly/ExceptionWrapper.h b/folly/ExceptionWrapper.h index df40f040..a44d3dd7 100644 --- a/folly/ExceptionWrapper.h +++ b/folly/ExceptionWrapper.h @@ -16,11 +16,14 @@ #pragma once -#include #include -#include #include +#include +#include +#include + #include +#include #include namespace folly { @@ -151,17 +154,7 @@ class exception_wrapper { // If the exception_wrapper does not contain an exception, std::terminate() // is invoked to assure the [[noreturn]] behaviour. - [[noreturn]] void throwException() const { - if (throwfn_) { - throwfn_(item_.get()); - } else if (eptr_) { - std::rethrow_exception(eptr_); - } - std::cerr - << "Cannot use `throwException` with an empty folly::exception_wrapper" - << std::endl; - std::terminate(); - } + [[noreturn]] void throwException() const; explicit operator bool() const { return item_ || eptr_; @@ -191,26 +184,8 @@ class exception_wrapper { std::exception* getCopied() { return item_.get(); } const std::exception* getCopied() const { return item_.get(); } - fbstring what() const { - if (item_) { - return exceptionStr(*item_); - } else if (eptr_) { - return estr_; - } else { - return fbstring(); - } - } - - fbstring class_name() const { - if (item_) { - auto& i = *item_; - return demangle(typeid(i)); - } else if (eptr_) { - return ename_; - } else { - return fbstring(); - } - } + fbstring what() const; + fbstring class_name() const; template bool is_compatible_with() const { @@ -378,9 +353,7 @@ exception_wrapper make_exception_wrapper(Args&&... args) { } // For consistency with exceptionStr() functions in String.h -inline fbstring exceptionStr(const exception_wrapper& ew) { - return ew.what(); -} +fbstring exceptionStr(const exception_wrapper& ew); /* * try_and_catch is a simple replacement for try {} catch(){} that allows you to @@ -477,4 +450,5 @@ class try_and_catch<> : public exception_wrapper { fn(); } }; -} + +} // folly diff --git a/folly/Makefile.am b/folly/Makefile.am index c965a587..ba3409b6 100644 --- a/folly/Makefile.am +++ b/folly/Makefile.am @@ -409,6 +409,7 @@ libfolly_la_SOURCES = \ detail/CacheLocality.cpp \ detail/IPAddress.cpp \ dynamic.cpp \ + ExceptionWrapper.cpp \ File.cpp \ FileUtil.cpp \ FingerprintTables.cpp \