From a386142fa691ed420568b7c5ff3e278840e78ba0 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 9 Sep 2011 13:40:50 -0600 Subject: [PATCH] Get chaiscript compiling with -pedantic. Closes issue #9 --- CMakeLists.txt | 2 +- include/chaiscript/language/chaiscript_engine.hpp | 15 ++++++++++++++- include/chaiscript/utility/utility.hpp | 10 ++++++++++ src/reflection.cpp | 6 ++---- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73281e50..8929d19f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,7 @@ IF(MSVC) ADD_DEFINITIONS(/bigobj) ENDIF() ELSE() - ADD_DEFINITIONS(-Wall -Wextra -Wshadow) + ADD_DEFINITIONS(-Wall -Wextra -Wshadow -pedantic) IF (APPLE) # -Wno-missing-field-initializers is for boost on macos diff --git a/include/chaiscript/language/chaiscript_engine.hpp b/include/chaiscript/language/chaiscript_engine.hpp index 7fac7146..86246db4 100644 --- a/include/chaiscript/language/chaiscript_engine.hpp +++ b/include/chaiscript/language/chaiscript_engine.hpp @@ -76,7 +76,7 @@ namespace chaiscript struct DLSym { DLSym(DLModule &t_mod, const std::string &t_symbol) - : m_symbol(reinterpret_cast(dlsym(t_mod.m_data, t_symbol.c_str()))) + : m_symbol(cast_symbol(dlsym(t_mod.m_data, t_symbol.c_str()))) { if (!m_symbol) { @@ -84,6 +84,19 @@ namespace chaiscript } } + static T cast_symbol(void *p) + { + union cast_union + { + T func_ptr; + void *in_ptr; + }; + + cast_union c; + c.in_ptr = p; + return c.func_ptr; + } + T m_symbol; }; diff --git a/include/chaiscript/utility/utility.hpp b/include/chaiscript/utility/utility.hpp index 80c8c5a4..a87bbaf5 100644 --- a/include/chaiscript/utility/utility.hpp +++ b/include/chaiscript/utility/utility.hpp @@ -49,10 +49,20 @@ CHAISCRIPT_CLASS_METHODS((_module)(_class_name)(_class_name_translator)(_method_name_translator), _methods) \ } +#define CHAISCRIPT_CLASS_NO_CONSTRUCTOR_EX(_module, _class_name, _class_name_translator, _method_name_translator, _methods) \ + { \ + _module->add(chaiscript::user_type<_class_name>(), _class_name_translator (BOOST_PP_STRINGIZE(_class_name))); \ + CHAISCRIPT_CLASS_METHODS((_module)(_class_name)(_class_name_translator)(_method_name_translator), _methods) \ + } + #define CHAISCRIPT_CLASS(_module, _class_name, _constructors, _methods) \ CHAISCRIPT_CLASS_EX(_module, _class_name, chaiscript::utility::class_name_translator, \ chaiscript::utility::method_name_translator, _constructors, _methods) +#define CHAISCRIPT_CLASS_NO_CONSTRUCTOR(_module, _class_name, _methods) \ + CHAISCRIPT_CLASS_NO_CONSTRUCTOR_EX(_module, _class_name, chaiscript::utility::class_name_translator, \ + chaiscript::utility::method_name_translator, _methods) + namespace chaiscript { /// \brief Classes and functions which provide general utility to the end user. diff --git a/src/reflection.cpp b/src/reflection.cpp index 98f0dbb0..813362f1 100644 --- a/src/reflection.cpp +++ b/src/reflection.cpp @@ -52,9 +52,8 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_reflect chaiscript::bootstrap::standard_library::vector_type > >("AST_NodeVector", m); - CHAISCRIPT_CLASS( m, + CHAISCRIPT_CLASS_NO_CONSTRUCTOR( m, chaiscript::exception::eval_error, - , ((reason)) ((call_stack)) ); @@ -67,9 +66,8 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_reflect ((column)) ); - CHAISCRIPT_CLASS( m, + CHAISCRIPT_CLASS_NO_CONSTRUCTOR( m, chaiscript::AST_Node, - , ((text)) ((identifier)) ((filename))