mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2025-12-08 01:36:54 +08:00
Switched to recursive mutex
Removed namespaces_nested_ref.chai
This commit is contained in:
parent
08abf41dfb
commit
3f299333cc
@ -718,7 +718,7 @@ namespace chaiscript
|
||||
/// \throw std::runtime_error In the case that the namespace name was never registered.
|
||||
void import(const std::string& t_namespace_name)
|
||||
{
|
||||
chaiscript::detail::threading::shared_lock<chaiscript::detail::threading::shared_mutex> l(m_mutex);
|
||||
chaiscript::detail::threading::unique_lock<chaiscript::detail::threading::recursive_mutex> l(m_use_mutex);
|
||||
|
||||
if (m_namespaces.count(t_namespace_name)) {
|
||||
add_namespace(t_namespace_name);
|
||||
@ -737,6 +737,8 @@ namespace chaiscript
|
||||
/// \throw std::runtime_error In the case that the namespace name was already registered.
|
||||
void register_namespace(const std::string& t_namespace_name)
|
||||
{
|
||||
chaiscript::detail::threading::unique_lock<chaiscript::detail::threading::recursive_mutex> l(m_use_mutex);
|
||||
|
||||
if (!m_namespaces.count(t_namespace_name)) {
|
||||
m_namespaces.emplace(std::make_pair(t_namespace_name, dispatch::Dynamic_Object()));
|
||||
}
|
||||
@ -751,6 +753,8 @@ namespace chaiscript
|
||||
/// \throw std::runtime_error In the case that the namespace name was already registered.
|
||||
void register_namespace(const dispatch::Dynamic_Object& t_namespace_object, const std::string& t_namespace_name)
|
||||
{
|
||||
chaiscript::detail::threading::unique_lock<chaiscript::detail::threading::recursive_mutex> l(m_use_mutex);
|
||||
|
||||
if (!m_namespaces.count(t_namespace_name)) {
|
||||
m_namespaces.emplace(std::make_pair(t_namespace_name, t_namespace_object));
|
||||
}
|
||||
@ -765,9 +769,14 @@ namespace chaiscript
|
||||
/// \throw std::runtime_error In the case that the namespace name was already registered.
|
||||
void register_namespace(dispatch::Dynamic_Object&& t_namespace_object, const std::string& t_namespace_name)
|
||||
{
|
||||
chaiscript::detail::threading::unique_lock<chaiscript::detail::threading::recursive_mutex> l(m_use_mutex);
|
||||
|
||||
if (!m_namespaces.count(t_namespace_name)) {
|
||||
m_namespaces.emplace(std::make_pair(t_namespace_name, t_namespace_object));
|
||||
}
|
||||
else {
|
||||
throw std::runtime_error("Namespace: " + t_namespace_name + " was already registered.");
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Registers a namespace generator, which delays generation of the namespace until it is imported, saving memory if it is never used.
|
||||
@ -776,6 +785,8 @@ namespace chaiscript
|
||||
/// \throw std::runtime_error In the case that the namespace name was already registered.
|
||||
void register_namespace(const std::function<dispatch::Dynamic_Object()>& t_namespace_generator, const std::string& t_namespace_name)
|
||||
{
|
||||
chaiscript::detail::threading::unique_lock<chaiscript::detail::threading::recursive_mutex> l(m_use_mutex);
|
||||
|
||||
if (!m_namespaces.count(t_namespace_name)) {
|
||||
std::function<void()> namespace_generator = [=]() { register_namespace(t_namespace_generator(), t_namespace_name); };
|
||||
m_namespace_generators.emplace(std::make_pair(t_namespace_name, namespace_generator));
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
namespace("parent")
|
||||
namespace("child")
|
||||
|
||||
child.x = 3.0
|
||||
parent.child := child
|
||||
parent.child.x = 5.0
|
||||
|
||||
assert_equal(5.0, child.x)
|
||||
assert_equal(5.0, parent.child.x)
|
||||
Loading…
x
Reference in New Issue
Block a user