diff --git a/CMakeLists.txt b/CMakeLists.txt index 73281e5..8929d19 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 7fac714..86246db 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 80c8c5a..a87bbaf 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 98f0dbb..813362f 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))