Various noexcept additions

This commit is contained in:
Jason Turner 2017-08-10 19:47:03 -06:00
parent e1cf8b9eb1
commit 5d56051532
7 changed files with 25 additions and 19 deletions

View File

@ -102,7 +102,9 @@ namespace chaiscript
void *m_key;
private:
static std::unordered_map<const void*, T> &t()
/// todo: is it valid to make this noexcept? The allocation could fail, but if it
/// does there is no possible way to recover
static std::unordered_map<const void*, T> &t() noexcept
{
thread_local std::unordered_map<const void *, T> my_t;
return my_t;

View File

@ -212,7 +212,7 @@ namespace chaiscript
/// \returns the types of all parameters.
const std::vector<Type_Info> &get_param_types() const noexcept { return m_types; }
virtual bool operator==(const Proxy_Function_Base &) const = 0;
virtual bool operator==(const Proxy_Function_Base &) const noexcept = 0;
virtual bool call_match(const std::vector<Boxed_Value> &vals, const Type_Conversions_State &t_conversions) const = 0;
virtual bool is_attribute_function() const noexcept { return false; }
@ -268,8 +268,9 @@ namespace chaiscript
}
}
virtual bool compare_first_type(const Boxed_Value &bv, const Type_Conversions_State &t_conversions) const
virtual bool compare_first_type(const Boxed_Value &bv, const Type_Conversions_State &t_conversions) const noexcept
{
/// TODO is m_types guaranteed to be at least 2??
return compare_type_to_param(m_types[1], bv, t_conversions);
}
@ -379,7 +380,7 @@ namespace chaiscript
return bool(m_guard);
}
Proxy_Function get_guard() const
Proxy_Function get_guard() const noexcept
{
return m_guard;
}

View File

@ -371,18 +371,18 @@ namespace chaiscript
}
template<typename T>
bool convertable_type() const
bool convertable_type() const noexcept
{
return thread_cache().count(user_type<T>().bare_type_info()) != 0;
}
template<typename To, typename From>
bool converts() const
bool converts() const noexcept
{
return converts(user_type<To>(), user_type<From>());
}
bool converts(const Type_Info &to, const Type_Info &from) const
bool converts(const Type_Info &to, const Type_Info &from) const noexcept
{
const auto &types = thread_cache();
if (types.count(to.bare_type_info()) != 0 && types.count(from.bare_type_info()) != 0)
@ -464,7 +464,7 @@ namespace chaiscript
}
}
Conversion_Saves &conversion_saves() const {
Conversion_Saves &conversion_saves() const noexcept {
return *m_conversion_saves;
}
@ -519,15 +519,15 @@ namespace chaiscript
{
}
const Type_Conversions *operator->() const {
const Type_Conversions *operator->() const noexcept {
return &m_conversions.get();
}
const Type_Conversions *get() const {
const Type_Conversions *get() const noexcept {
return &m_conversions.get();
}
Type_Conversions::Conversion_Saves &saves() const {
Type_Conversions::Conversion_Saves &saves() const noexcept {
return m_saves;
}

View File

@ -36,7 +36,7 @@ namespace chaiscript
invalid
};
static const char *to_string(Opers t_oper) {
static const char *to_string(Opers t_oper) noexcept {
static const char *opers[] = {
"",
"==", "<", ">", "<=", ">=", "!=",

View File

@ -31,16 +31,18 @@ struct AST_Node;
namespace chaiscript
{
struct Name_Validator {
static bool is_reserved_word(const std::string &name)
static bool is_reserved_word(const std::string &name) noexcept
{
static const std::set<std::string> m_reserved_words
static const char *m_reserved_words[]
= {"def", "fun", "while", "for", "if", "else", "&&", "||", ",", "auto",
"return", "break", "true", "false", "class", "attr", "var", "global", "GLOBAL", "_",
"__LINE__", "__FILE__", "__FUNC__", "__CLASS__"};
return m_reserved_words.count(name) > 0;
return std::any_of(std::begin(m_reserved_words), std::end(m_reserved_words),
[&name](const char *str){ return str == name; });
}
static bool valid_object_name(const std::string &name)
static bool valid_object_name(const std::string &name) noexcept
{
return name.find("::") == std::string::npos && !is_reserved_word(name);
}
@ -136,7 +138,7 @@ namespace chaiscript
/// \brief Thrown if an error occurs while attempting to load a binary module
struct load_module_error : std::runtime_error
{
explicit load_module_error(const std::string &t_reason) noexcept
explicit load_module_error(const std::string &t_reason)
: std::runtime_error(t_reason)
{
}
@ -479,7 +481,7 @@ namespace chaiscript
/// Errors generated when loading a file
struct file_not_found_error : std::runtime_error {
explicit file_not_found_error(const std::string &t_filename) noexcept
explicit file_not_found_error(const std::string &t_filename)
: std::runtime_error("File Not Found: " + t_filename)
{ }

View File

@ -741,7 +741,7 @@ namespace chaiscript
return std::move(vec.back());
}
static bool has_guard(const std::vector<AST_Node_Impl_Ptr<T>> &t_children, const std::size_t offset)
static bool has_guard(const std::vector<AST_Node_Impl_Ptr<T>> &t_children, const std::size_t offset) noexcept
{
if ((t_children.size() > 2 + offset) && (t_children[1+offset]->identifier == AST_Node_Type::Arg_List)) {
if (t_children.size() > 3 + offset) {

View File

@ -447,3 +447,4 @@ namespace chaiscript {
#endif