Address sign promotion warnings, add todo test
This commit is contained in:
parent
645377e191
commit
d4f02b5e67
@ -38,4 +38,5 @@ compilers:
|
|||||||
- name: custom_check
|
- name: custom_check
|
||||||
commands:
|
commands:
|
||||||
- ./contrib/check_for_tabs.rb
|
- ./contrib/check_for_tabs.rb
|
||||||
|
- ./contrib/check_for_todos.rb
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ else()
|
|||||||
add_definitions(-Wall -Wextra -Wconversion -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wcast-qual -Wunused -Woverloaded-virtual -pedantic ${CPP11_FLAG})
|
add_definitions(-Wall -Wextra -Wconversion -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wcast-qual -Wunused -Woverloaded-virtual -pedantic ${CPP11_FLAG})
|
||||||
|
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
add_definitions(-Weverything -Wno-c++98-compat-pedantic -Wno-c++98-compat -Wno-documentation -Wno-switch-enum -Wno-weak-vtables -Wno-sign-conversion -Wno-missing-prototypes -Wno-padded -Wno-missing-noreturn -Wno-exit-time-destructors -Wno-documentation-unknown-command)
|
add_definitions(-Weverything -Wno-c++98-compat-pedantic -Wno-c++98-compat -Wno-documentation -Wno-switch-enum -Wno-weak-vtables -Wno-missing-prototypes -Wno-padded -Wno-missing-noreturn -Wno-exit-time-destructors -Wno-documentation-unknown-command)
|
||||||
else()
|
else()
|
||||||
add_definitions(-Wnoexcept)
|
add_definitions(-Wnoexcept)
|
||||||
endif()
|
endif()
|
||||||
|
11
contrib/check_for_todos.rb
Executable file
11
contrib/check_for_todos.rb
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'json'
|
||||||
|
|
||||||
|
`grep -rPIHni 'todo' src/* include/* samples/*`.lines { |line|
|
||||||
|
if /(?<filename>.+(hpp|cpp|chai)):(?<linenumber>[0-9]+):(?<restofline>.+)/ =~ line
|
||||||
|
puts(JSON.dump({:line => linenumber, :filename => filename, :tool => "todo_checker", :message => "todo: #{restofline.strip}", :messagetype => "info"}))
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -113,6 +113,12 @@ namespace chaiscript {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Iter, typename Distance>
|
||||||
|
Iter advance_copy(Iter iter, Distance distance) {
|
||||||
|
std::advance(iter, static_cast<typename std::iterator_traits<Iter>::difference_type>(distance));
|
||||||
|
return iter;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -248,13 +248,17 @@ namespace chaiscript
|
|||||||
m->add(
|
m->add(
|
||||||
fun(
|
fun(
|
||||||
[](ContainerType &c, int index) -> typename ContainerType::reference {
|
[](ContainerType &c, int index) -> typename ContainerType::reference {
|
||||||
return c.at(index);
|
/// \todo we are prefering to keep the key as 'int' to avoid runtime conversions
|
||||||
|
/// during dispatch. reevaluate
|
||||||
|
return c.at(static_cast<typename ContainerType::size_type>(index));
|
||||||
}), "[]");
|
}), "[]");
|
||||||
|
|
||||||
m->add(
|
m->add(
|
||||||
fun(
|
fun(
|
||||||
[](const ContainerType &c, int index) -> typename ContainerType::const_reference {
|
[](const ContainerType &c, int index) -> typename ContainerType::const_reference {
|
||||||
return c.at(index);
|
/// \todo we are prefering to keep the key as 'int' to avoid runtime conversions
|
||||||
|
/// during dispatch. reevaluate
|
||||||
|
return c.at(static_cast<typename ContainerType::size_type>(index));
|
||||||
}), "[]");
|
}), "[]");
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
@ -1445,7 +1445,7 @@ namespace chaiscript
|
|||||||
static typename Container::const_iterator find_keyed_value(const Container &t_c, const Key &t_key, const size_t t_hint)
|
static typename Container::const_iterator find_keyed_value(const Container &t_c, const Key &t_key, const size_t t_hint)
|
||||||
{
|
{
|
||||||
if (t_c.size() > t_hint && t_c[t_hint].first == t_key) {
|
if (t_c.size() > t_hint && t_c[t_hint].first == t_key) {
|
||||||
return t_c.begin() + t_hint;
|
return advance_copy(t_c.begin(), t_hint);
|
||||||
} else {
|
} else {
|
||||||
return find_keyed_value(t_c, t_key);
|
return find_keyed_value(t_c, t_key);
|
||||||
}
|
}
|
||||||
|
@ -32,11 +32,11 @@ namespace chaiscript
|
|||||||
CHAISCRIPT_CONSTEXPR Type_Info(bool t_is_const, bool t_is_reference, bool t_is_pointer, bool t_is_void,
|
CHAISCRIPT_CONSTEXPR Type_Info(bool t_is_const, bool t_is_reference, bool t_is_pointer, bool t_is_void,
|
||||||
bool t_is_arithmetic, const std::type_info *t_ti, const std::type_info *t_bare_ti)
|
bool t_is_arithmetic, const std::type_info *t_ti, const std::type_info *t_bare_ti)
|
||||||
: m_type_info(t_ti), m_bare_type_info(t_bare_ti),
|
: m_type_info(t_ti), m_bare_type_info(t_bare_ti),
|
||||||
m_flags((t_is_const << is_const_flag)
|
m_flags((static_cast<unsigned int>(t_is_const) << is_const_flag)
|
||||||
+ (t_is_reference << is_reference_flag)
|
+ (static_cast<unsigned int>(t_is_reference) << is_reference_flag)
|
||||||
+ (t_is_pointer << is_pointer_flag)
|
+ (static_cast<unsigned int>(t_is_pointer) << is_pointer_flag)
|
||||||
+ (t_is_void << is_void_flag)
|
+ (static_cast<unsigned int>(t_is_void) << is_void_flag)
|
||||||
+ (t_is_arithmetic << is_arithmetic_flag))
|
+ (static_cast<unsigned int>(t_is_arithmetic) << is_arithmetic_flag))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -505,10 +505,10 @@ namespace chaiscript
|
|||||||
|
|
||||||
// Let's see if this is a link that we should expand
|
// Let's see if this is a link that we should expand
|
||||||
std::vector<char> buf(2048);
|
std::vector<char> buf(2048);
|
||||||
const size_t pathlen = readlink(dllpath.c_str(), &buf.front(), buf.size());
|
const auto pathlen = readlink(dllpath.c_str(), &buf.front(), buf.size());
|
||||||
if (pathlen > 0 && pathlen < buf.size())
|
if (pathlen > 0 && static_cast<size_t>(pathlen) < buf.size())
|
||||||
{
|
{
|
||||||
dllpath = std::string(&buf.front(), pathlen);
|
dllpath = std::string(&buf.front(), static_cast<size_t>(pathlen));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_module_paths.insert(m_module_paths.begin(), dllpath+"/");
|
m_module_paths.insert(m_module_paths.begin(), dllpath+"/");
|
||||||
|
@ -147,7 +147,7 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t remaining() const {
|
size_t remaining() const {
|
||||||
return std::distance(m_pos, m_end);
|
return static_cast<size_t>(std::distance(m_pos, m_end));
|
||||||
}
|
}
|
||||||
|
|
||||||
char operator*() const {
|
char operator*() const {
|
||||||
@ -2213,8 +2213,8 @@ namespace chaiscript
|
|||||||
|
|
||||||
switch (m_operators[t_precedence]) {
|
switch (m_operators[t_precedence]) {
|
||||||
case(AST_Node_Type::Ternary_Cond) :
|
case(AST_Node_Type::Ternary_Cond) :
|
||||||
m_match_stack.erase(m_match_stack.begin() + m_match_stack.size() - 2,
|
m_match_stack.erase(advance_copy(m_match_stack.begin(), m_match_stack.size() - 2),
|
||||||
m_match_stack.begin() + m_match_stack.size() - 1);
|
advance_copy(m_match_stack.begin(), m_match_stack.size() - 1));
|
||||||
if (Symbol(":")) {
|
if (Symbol(":")) {
|
||||||
if (!Operator(t_precedence+1)) {
|
if (!Operator(t_precedence+1)) {
|
||||||
throw exception::eval_error("Incomplete "
|
throw exception::eval_error("Incomplete "
|
||||||
@ -2239,7 +2239,8 @@ namespace chaiscript
|
|||||||
case(AST_Node_Type::Bitwise_Or) :
|
case(AST_Node_Type::Bitwise_Or) :
|
||||||
case(AST_Node_Type::Comparison) :
|
case(AST_Node_Type::Comparison) :
|
||||||
assert(m_match_stack.size() > 1);
|
assert(m_match_stack.size() > 1);
|
||||||
m_match_stack.erase(m_match_stack.begin() + m_match_stack.size() - 2, m_match_stack.begin() + m_match_stack.size() - 1);
|
m_match_stack.erase(advance_copy(m_match_stack.begin(), m_match_stack.size() - 2),
|
||||||
|
advance_copy(m_match_stack.begin(), m_match_stack.size() - 1));
|
||||||
build_match<eval::Binary_Operator_AST_Node>(prev_stack_top, oper->text);
|
build_match<eval::Binary_Operator_AST_Node>(prev_stack_top, oper->text);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
12
src/main.cpp
12
src/main.cpp
@ -88,24 +88,24 @@ std::vector<std::string> default_search_paths()
|
|||||||
std::vector<char> buf(2048);
|
std::vector<char> buf(2048);
|
||||||
ssize_t size = -1;
|
ssize_t size = -1;
|
||||||
|
|
||||||
if ((size = readlink("/proc/self/exe", &buf.front(), buf.size())) != -1)
|
if ((size = readlink("/proc/self/exe", &buf.front(), buf.size())) >= 0)
|
||||||
{
|
{
|
||||||
exepath = std::string(&buf.front(), size);
|
exepath = std::string(&buf.front(), static_cast<size_t>(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exepath.empty())
|
if (exepath.empty())
|
||||||
{
|
{
|
||||||
if ((size = readlink("/proc/curproc/file", &buf.front(), buf.size())) != -1)
|
if ((size = readlink("/proc/curproc/file", &buf.front(), buf.size())) >= 0)
|
||||||
{
|
{
|
||||||
exepath = std::string(&buf.front(), size);
|
exepath = std::string(&buf.front(), static_cast<size_t>(size));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exepath.empty())
|
if (exepath.empty())
|
||||||
{
|
{
|
||||||
if ((size = readlink("/proc/self/path/a.out", &buf.front(), buf.size())) != -1)
|
if ((size = readlink("/proc/self/path/a.out", &buf.front(), buf.size())) >= 0)
|
||||||
{
|
{
|
||||||
exepath = std::string(&buf.front(), size);
|
exepath = std::string(&buf.front(), static_cast<size_t>(size));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ int expected_value(int num_iters)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_work(chaiscript::ChaiScript &c, int id)
|
void do_work(chaiscript::ChaiScript &c, const size_t id)
|
||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
@ -67,23 +67,23 @@ int main()
|
|||||||
std::vector<std::shared_ptr<std::thread> > threads;
|
std::vector<std::shared_ptr<std::thread> > threads;
|
||||||
|
|
||||||
// Ensure at least two, but say only 7 on an 8 core processor
|
// Ensure at least two, but say only 7 on an 8 core processor
|
||||||
int num_threads = std::max(static_cast<int>(std::thread::hardware_concurrency()) - 1, 2);
|
size_t num_threads = static_cast<size_t>(std::max(static_cast<int>(std::thread::hardware_concurrency()) - 1, 2));
|
||||||
|
|
||||||
std::cout << "Num threads: " << num_threads << '\n';
|
std::cout << "Num threads: " << num_threads << '\n';
|
||||||
|
|
||||||
for (int i = 0; i < num_threads; ++i)
|
for (size_t i = 0; i < num_threads; ++i)
|
||||||
{
|
{
|
||||||
threads.push_back(std::make_shared<std::thread>(do_work, std::ref(chai), i));
|
threads.push_back(std::make_shared<std::thread>(do_work, std::ref(chai), i));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < num_threads; ++i)
|
for (size_t i = 0; i < num_threads; ++i)
|
||||||
{
|
{
|
||||||
threads[i]->join();
|
threads[i]->join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < num_threads; ++i)
|
for (size_t i = 0; i < num_threads; ++i)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << i;
|
ss << i;
|
||||||
@ -92,7 +92,7 @@ int main()
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chai.eval<int>("getid(" + ss.str() + ")") != i)
|
if (chai.eval<size_t>("getid(" + ss.str() + ")") != i)
|
||||||
{
|
{
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user