From 0fd4b828f2721f16e392ef2d5c0944ce2b9bffd2 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sat, 19 May 2012 09:16:21 -0600 Subject: [PATCH 1/2] Fix some minor issues found by clang's static analyzer --- include/chaiscript/language/chaiscript_parser.hpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/include/chaiscript/language/chaiscript_parser.hpp b/include/chaiscript/language/chaiscript_parser.hpp index fd58ef2..0e186e3 100644 --- a/include/chaiscript/language/chaiscript_parser.hpp +++ b/include/chaiscript/language/chaiscript_parser.hpp @@ -1459,12 +1459,9 @@ namespace chaiscript * Reads a switch statement from input */ bool Switch() { - bool retval = false; - size_t prev_stack_top = m_match_stack.size(); if (Keyword("switch")) { - retval = true; if (!Char('(')) { throw exception::eval_error("Incomplete 'switch' expression", File_Position(m_line, m_col), *m_filename); @@ -1477,8 +1474,6 @@ namespace chaiscript while (Eol()) {} if (Char('{')) { - retval = true; - while (Eol()) {} while (Case()) { @@ -1496,9 +1491,12 @@ namespace chaiscript } build_match(AST_NodePtr(new eval::Switch_AST_Node()), prev_stack_top); + return true; + + } else { + return false; } - return retval; } /** @@ -1971,7 +1969,6 @@ namespace chaiscript bool saw_eol = true; while (has_more) { - has_more = false; int prev_line = m_line; int prev_col = m_col; if (Def()) { From 804de05a0a6aaebbe76593a7900f647fd4bbe88a Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sat, 19 May 2012 09:50:49 -0600 Subject: [PATCH 2/2] Fix object_lifetime_test which was broken by last perfomance fix --- .../chaiscript/dispatchkit/dispatchkit.hpp | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index 489d77f..58e1053 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -377,7 +377,7 @@ namespace chaiscript struct State { std::map > m_functions; - std::map m_function_objects; + std::map m_function_objects; std::map m_global_objects; Type_Name_Map m_types; std::set m_reserved_words; @@ -645,16 +645,16 @@ namespace chaiscript { chaiscript::detail::threading::shared_lock l(m_mutex); - const std::map &funs = get_function_objects_int(); + const std::map &funs = get_function_objects_int(); - std::map::const_iterator itr = funs.find(t_name); + std::map::const_iterator itr = funs.find(t_name); if (itr != funs.end()) { - return itr->second; + return const_var(itr->second); } else { throw std::range_error("Object not found: " + t_name); - } + } } /** @@ -704,7 +704,18 @@ namespace chaiscript { chaiscript::detail::threading::shared_lock l(m_mutex); - return get_function_objects_int(); + const std::map &funs = get_function_objects_int(); + + std::map objs; + + for (std::map::const_iterator itr = funs.begin(); + itr != funs.end(); + ++itr) + { + objs.insert(std::make_pair(itr->first, const_var(itr->second))); + } + + return objs; } @@ -898,12 +909,12 @@ namespace chaiscript return *(m_stack_holder->stacks.back()); } - const std::map &get_function_objects_int() const + const std::map &get_function_objects_int() const { return m_state.m_function_objects; } - std::map &get_function_objects_int() + std::map &get_function_objects_int() { return m_state.m_function_objects; } @@ -1039,7 +1050,7 @@ namespace chaiscript std::map >::iterator itr = funcs.find(t_name); - std::map &func_objs = get_function_objects_int(); + std::map &func_objs = get_function_objects_int(); if (itr != funcs.end()) { @@ -1056,12 +1067,12 @@ namespace chaiscript vec.push_back(t_f); std::stable_sort(vec.begin(), vec.end(), &function_less_than); - func_objs[t_name] = Boxed_Value(Const_Proxy_Function(new Dispatch_Function(vec))); + func_objs[t_name] = Proxy_Function(new Dispatch_Function(vec)); } else { std::vector vec; vec.push_back(t_f); funcs.insert(std::make_pair(t_name, vec)); - func_objs[t_name] = const_var(t_f); + func_objs[t_name] = t_f; }