| // Contracts support header for -*- C++ -*- |
| |
| // Copyright (C) 1995-2018 Free Software Foundation, Inc. |
| // |
| // This file is part of GCC. |
| // |
| // GCC is free software; you can redistribute it and/or modify |
| // it under the terms of the GNU General Public License as published by |
| // the Free Software Foundation; either version 3, or (at your option) |
| // any later version. |
| // |
| // GCC is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| // |
| // Under Section 7 of GPL version 3, you are granted additional |
| // permissions described in the GCC Runtime Library Exception, version |
| // 3.1, as published by the Free Software Foundation. |
| |
| // You should have received a copy of the GNU General Public License and |
| // a copy of the GCC Runtime Library Exception along with this program; |
| // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
| // <http://www.gnu.org/licenses/>. |
| |
| // FIXME experimental |
| // FIXME string_view vs. freestanding |
| // FIXME remove on_contract_violation? |
| |
| /** @file contract |
| * This is a Standard C++ Library header. |
| */ |
| |
| #ifndef _GLIBCXX_CONTRACT |
| #define _GLIBCXX_CONTRACT 1 |
| |
| #pragma GCC system_header |
| |
| #if __cplusplus >= 201703L |
| |
| #include <bits/c++config.h> |
| #include <string_view> |
| |
| namespace std _GLIBCXX_VISIBILITY(default) |
| { |
| _GLIBCXX_BEGIN_NAMESPACE_VERSION |
| |
| enum class contract_violation_continuation_mode { |
| NEVER_CONTINUE, MAYBE_CONTINUE |
| }; |
| |
| class contract_violation { |
| int _M_line; // FIXME uint_least32_t |
| const char* _M_file; |
| const char* _M_function; |
| const char* _M_comment; |
| const char* _M_level; |
| const char* _M_role; |
| contract_violation_continuation_mode _M_continue; |
| public: |
| contract_violation (int __l, const char* __f, const char* __fn, |
| const char* __c, const char* __lv, const char *__r, |
| contract_violation_continuation_mode __m) |
| : _M_line(__l), _M_file(__f), _M_function(__fn), _M_comment(__c), |
| _M_level(__lv), _M_role(__r), _M_continue(__m) { } |
| int line_number() const noexcept { return _M_line; } |
| string_view file_name() const noexcept { return _M_file; } |
| string_view function_name() const noexcept { return _M_function; } |
| string_view comment() const noexcept { return _M_comment; } |
| string_view assertion_level() const noexcept { return _M_level; } |
| string_view assertion_role() const noexcept { return _M_role; } |
| contract_violation_continuation_mode continuation_mode() const noexcept |
| { return _M_continue; } |
| }; |
| |
| //void handle_contract_violation (const contract_violation &); |
| |
| //int on_contract_violation (bool, int, const char *, const char *, const char *, const char *, const char *, int); |
| |
| _GLIBCXX_END_NAMESPACE_VERSION |
| } // namespace std |
| |
| #endif // C++17 |
| #endif // _GLIBCXX_CONTRACT |