/** * Copyright 2019-2020 Huawei Technologies Co., Ltd * * 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. */ #ifndef CATCH_HPP_ #define CATCH_HPP_ #include #include #define ERROR_CODE() __catch_error_code #define ERROR_LINE_NO() __catch_error_line_no #define ERROR_PROC() __catch_error_line_no = __LINE__; #define PROC \ uint32_t __catch_error_code = 0x7FFFFFCC; \ uint32_t __catch_error_line_no = 0xFFFFFFFF; \ { #define END_PROC \ } \ __tabErrorCode: #define THROW(errcode) \ { \ __catch_error_code = (errcode); \ ERROR_PROC(); \ goto __tabErrorCode; \ } #define EXEC(func) \ { \ if (0 != (__catch_error_code = (func))) THROW(__catch_error_code) \ } #define EXEC_EX1(func, error_code) \ { \ if (0 != (func)) THROW(error_code) \ } #define EXEC_EX(func, succRet, error_code) \ { \ if (succRet != (__catch_error_code = (func))) THROW(error_code) \ } #define ASSERT_EXEC(func, succRet) \ { \ if (succRet != (__catch_error_code = (func))) /*GO_ASSERT_FALSE();*/ \ THROW(__catch_error_code) \ } \ } #define NEW_ERROR_EXEC(errcode, func, succRet) \ { \ if (succRet != (func)) { \ THROW(errcode) \ } \ } #define JUDGE(errcode, expr) \ { \ if (!(expr)) { \ THROW(errcode) \ } \ } #define ASSERT_JUDGE(errcode, expr) \ { \ if (!(expr)) { /*GO_ASSERT_FALSE();*/ \ THROW(errcode) \ } \ } #define JUDGE_FALSE(errcode, expr) \ { \ if (expr) { \ THROW(errcode) \ } \ } #define JUDGE_CONTINUE(expr) \ { \ if (expr) { \ continue; \ } \ } #define CATCH_ERROR(errcode) if (__catch_error_code == (errcode)) { // ERROR_LOG(); #define CATCH_ALL_ERROR { #define END_CATCH_ERROR } #define FINAL \ __tabFinal: #define END_FINAL /*GO_ASSERT_FALSE()*/ ; #define GOTO_FINAL() goto __tabFinal; #endif // CATCH_HPP_