Remove vestiges of object caching from dispatch kit

This commit is contained in:
Jason Turner 2010-11-14 22:28:05 +00:00
parent a758c86ba5
commit 97081b1f33

View File

@ -311,7 +311,7 @@ namespace chaiscript
public: public:
typedef std::map<std::string, chaiscript::Type_Info> Type_Name_Map; typedef std::map<std::string, chaiscript::Type_Info> Type_Name_Map;
typedef std::map<std::string, Boxed_Value> Scope; typedef std::map<std::string, Boxed_Value> Scope;
typedef boost::tuples::tuple<std::map<std::string, Boxed_Value>, std::deque<Scope>, bool> StackData; typedef std::deque<Scope> StackData;
typedef boost::shared_ptr<StackData> Stack; typedef boost::shared_ptr<StackData> Stack;
struct State struct State
@ -347,9 +347,6 @@ namespace chaiscript
bool add(const Proxy_Function &f, const std::string &name) bool add(const Proxy_Function &f, const std::string &name)
{ {
validate_object_name(name); validate_object_name(name);
StackData &stack = get_stack_data();
stack.get<0>().erase(name);
return add_function(f, name); return add_function(f, name);
} }
@ -362,13 +359,12 @@ namespace chaiscript
validate_object_name(name); validate_object_name(name);
StackData &stack = get_stack_data(); StackData &stack = get_stack_data();
for (int i = static_cast<int>(stack.get<1>().size())-1; i >= 0; --i) for (int i = static_cast<int>(stack.size())-1; i >= 0; --i)
{ {
std::map<std::string, Boxed_Value>::const_iterator itr = (stack.get<1>())[i].find(name); std::map<std::string, Boxed_Value>::const_iterator itr = stack[i].find(name);
if (itr != (stack.get<1>())[i].end()) if (itr != stack[i].end())
{ {
stack.get<0>().erase(name); stack[i][name] = obj;
(stack.get<1>())[i][name] = obj;
return; return;
} }
} }
@ -383,8 +379,7 @@ namespace chaiscript
{ {
StackData &stack = get_stack_data(); StackData &stack = get_stack_data();
validate_object_name(name); validate_object_name(name);
stack.get<0>().erase(name); stack.back()[name] = obj;
stack.get<1>().back()[name] = obj;
} }
/** /**
@ -392,15 +387,12 @@ namespace chaiscript
*/ */
void add_global_const(const Boxed_Value &obj, const std::string &name) void add_global_const(const Boxed_Value &obj, const std::string &name)
{ {
StackData &stack = get_stack_data();
validate_object_name(name); validate_object_name(name);
if (!obj.is_const()) if (!obj.is_const())
{ {
throw global_non_const(); throw global_non_const();
} }
stack.get<0>().erase(name);
#ifndef CHAISCRIPT_NO_THREADS #ifndef CHAISCRIPT_NO_THREADS
boost::unique_lock<boost::shared_mutex> l(m_global_object_mutex); boost::unique_lock<boost::shared_mutex> l(m_global_object_mutex);
#endif #endif
@ -414,7 +406,7 @@ namespace chaiscript
void new_scope() void new_scope()
{ {
StackData &stack = get_stack_data(); StackData &stack = get_stack_data();
stack.get<1>().push_back(Scope()); stack.push_back(Scope());
} }
/** /**
@ -423,16 +415,9 @@ namespace chaiscript
void pop_scope() void pop_scope()
{ {
StackData &stack = get_stack_data(); StackData &stack = get_stack_data();
if (stack.get<1>().size() > 1) if (stack.size() > 1)
{ {
Scope &scope(stack.get<1>().back()); stack.pop_back();
for (Scope::const_iterator itr = scope.begin();
itr != scope.end();
++itr)
{
stack.get<0>().erase(itr->first);
}
stack.get<1>().pop_back();
} else { } else {
throw std::range_error("Unable to pop global stack"); throw std::range_error("Unable to pop global stack");
} }
@ -453,8 +438,7 @@ namespace chaiscript
Stack new_stack() const Stack new_stack() const
{ {
Stack s(new Stack::element_type()); Stack s(new Stack::element_type());
s->get<1>().push_back(Scope()); s->push_back(Scope());
s->get<2>() = false;
return s; return s;
} }
@ -479,10 +463,10 @@ namespace chaiscript
StackData &stack = get_stack_data(); StackData &stack = get_stack_data();
// Is it in the stack? // Is it in the stack?
for (int i = static_cast<int>(stack.get<1>().size())-1; i >= 0; --i) for (int i = static_cast<int>(stack.size())-1; i >= 0; --i)
{ {
std::map<std::string, Boxed_Value>::const_iterator stackitr = (stack.get<1>())[i].find(name); std::map<std::string, Boxed_Value>::const_iterator stackitr = stack[i].find(name);
if (stackitr != (stack.get<1>())[i].end()) if (stackitr != stack[i].end())
{ {
return stackitr->second; return stackitr->second;
} }
@ -867,8 +851,7 @@ namespace chaiscript
Stack_Holder() Stack_Holder()
: stack(new StackData()) : stack(new StackData())
{ {
stack->get<1>().push_back(Scope()); stack->push_back(Scope());
stack->get<2>() = true;
} }
Stack stack; Stack stack;