From d6b475239a839ab63b5ff132fe77507638780737 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 21 Sep 2011 00:04:15 -0600 Subject: [PATCH] Remove boost from utility and associated module tests --- CMakeLists.txt | 24 +------ include/chaiscript/utility/utility.hpp | 93 +++++--------------------- src/reflection.cpp | 64 ++++++++++-------- unittests/object_lifetime_test.cpp | 12 ++-- unittests/utility_test.cpp | 28 +++++--- 5 files changed, 78 insertions(+), 143 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d6c77af2..f2f2bcd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,13 +24,11 @@ set(CPACK_PACKAGE_VENDOR "ChaiScript.com") set(CPACK_PACKAGE_CONTACT "contact@chaiscript.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An embedded scripting language for C++") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-dev (>=1.36.0)") set(CPACK_DEBIAN_PACKAGE_SECTION "devel") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_RPM_PACKAGE_LICENSE "BSD") set(CPACK_RPM_PACKAGE_GROUP "Programming") -set(CPACK_RPM_PACKAGE_REQUIRES "boost-devel >= 1.36.0, boost-thread >= 1.36.0") set(CHAI_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) @@ -64,24 +62,13 @@ else() add_definitions(-Wall -Wextra -Wshadow -pedantic -std=c++0x) if (APPLE) - # -Wno-missing-field-initializers is for boost on macos - add_definitions(-Wno-missing-field-initializers -Wno-sign-compare) + add_definitions(-Wno-sign-compare) endif() endif() include_directories(include) -set(Boost_ADDITIONAL_VERSIONS "1.44" "1.44.0" "1.43" "1.43.0" "1.42" "1.42.0" "1.41") -set(Boost_USE_MULTITHREADED ON) - if (MULTITHREAD_SUPPORT_ENABLED) - find_package(Boost 1.36.0 COMPONENTS thread) - - if (Boost_FOUND) - link_directories( ${Boost_LIBRARY_DIRS} ) - else() - message(FATAL_ERROR "Can not find Boost") - endif(Boost_FOUND) else() add_definitions(-DCHAISCRIPT_NO_THREADS) endif() @@ -90,20 +77,13 @@ if (CMAKE_HOST_UNIX) set(DYNAMIC_LOADER "dl") endif(CMAKE_HOST_UNIX) -if (MSVC) - # Boost on MSVC does automatic linking - set(LIBS ${DYNAMIC_LOADER} ${READLINE_LIB}) -else() - set(LIBS ${DYNAMIC_LOADER} ${Boost_LIBRARIES} ${READLINE_LIB}) -endif() +set(LIBS ${DYNAMIC_LOADER} ${READLINE_LIB}) if (CMAKE_COMPILER_2005) # vs2005 is a bit too loud about possible loss of data warnings # ADD_DEFINITIONS(/wd4244) endif() -include_directories(${Boost_INCLUDE_DIRS}) -include_directories(${Boost_INCLUDE_DIR}) add_executable(chai src/main.cpp) target_link_libraries(chai ${LIBS}) diff --git a/include/chaiscript/utility/utility.hpp b/include/chaiscript/utility/utility.hpp index a87bbaf5..47bd9b3b 100644 --- a/include/chaiscript/utility/utility.hpp +++ b/include/chaiscript/utility/utility.hpp @@ -8,90 +8,33 @@ #define CHAISCRIPT_UTILITY_UTILITY_HPP_ #include "../chaiscript.hpp" -#include #include -#define CHAISCRIPT_MODULE(_info) BOOST_PP_SEQ_ELEM(0, _info) - -#define CHAISCRIPT_CLASS_ELEM(_info) BOOST_PP_SEQ_ELEM(1, _info) - -#define CHAISCRIPT_METHOD(_info, _method) & CHAISCRIPT_CLASS_ELEM(_info) :: BOOST_PP_SEQ_ELEM(0, _method) - -#define CHAISCRIPT_METHOD_NAME(_info, _method) \ - BOOST_PP_SEQ_ELEM(3, _info) (BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(0, _method ) ) ) - -#define CHAISCRIPT_CLASS_NAME(_info) \ - BOOST_PP_SEQ_ELEM(2, _info) (BOOST_PP_STRINGIZE(CHAISCRIPT_CLASS_ELEM(_info) ) ) - -#define CHAISCRIPT_METHOD_SIGNATURE_PART(_r, _info, _i, _method_part) \ - BOOST_PP_EXPR_IF(BOOST_PP_EQUAL(_i, 1), < _method_part > ) - -#define CHAISCRIPT_METHOD_SIGNATURE(_info, _method) \ - BOOST_PP_SEQ_FOR_EACH_I(CHAISCRIPT_METHOD_SIGNATURE_PART, _info, _method) - -#define CHAISCRIPT_CLASS_CONSTRUCTOR(_r, _info, _constructor) \ - CHAISCRIPT_MODULE(_info) ->add BOOST_PP_LPAREN() chaiscript::constructor<_constructor>() BOOST_PP_COMMA() CHAISCRIPT_CLASS_NAME(_info) BOOST_PP_RPAREN() ; - -#define CHAISCRIPT_CLASS_METHOD(_r, _info, _method) \ - CHAISCRIPT_MODULE(_info) ->add BOOST_PP_LPAREN() chaiscript::fun CHAISCRIPT_METHOD_SIGNATURE(_info, _method) \ - BOOST_PP_LPAREN() CHAISCRIPT_METHOD(_info, _method) BOOST_PP_RPAREN() BOOST_PP_COMMA() CHAISCRIPT_METHOD_NAME(_info, _method)BOOST_PP_RPAREN() ; - -#define CHAISCRIPT_CLASS_CONSTRUCTORS(_info, _constructors) \ - BOOST_PP_SEQ_FOR_EACH(CHAISCRIPT_CLASS_CONSTRUCTOR, _info, _constructors) - -#define CHAISCRIPT_CLASS_METHODS(_info, _methods) \ - BOOST_PP_SEQ_FOR_EACH(CHAISCRIPT_CLASS_METHOD, _info, _methods) - -#define CHAISCRIPT_CLASS_EX(_module, _class_name, _class_name_translator, _method_name_translator, _constructors, _methods) \ - { \ - _module->add(chaiscript::user_type<_class_name>(), _class_name_translator (BOOST_PP_STRINGIZE(_class_name))); \ - CHAISCRIPT_CLASS_CONSTRUCTORS((_module)(_class_name)(_class_name_translator), _constructors) \ - 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. namespace utility { - inline std::string class_name_translator(const std::string &t_name) - { - size_t colon = t_name.rfind("::"); - if (colon != std::string::npos) + + template + void add_class(ModuleType &t_module, + const std::string &t_classname, + const std::vector &t_constructors, + const std::vector> &t_funcs) { - return t_name.substr(colon+2, std::string::npos); - } else { - return t_name; + t_module.add(chaiscript::user_type(), t_classname); + + for(const chaiscript::Proxy_Function &ctor: t_constructors) + { + t_module.add(ctor, t_classname); + } + + for(auto fun: t_funcs) + { + t_module.add(fun.first, fun.second); + } + } - } - - inline std::string method_name_translator(const std::string &t_name) - { - size_t namestart = t_name.rfind("operator"); - namestart = (namestart == std::string::npos)?0:namestart+strlen("operator"); - - if (namestart == 0) - { - namestart = t_name.rfind("::"); - namestart = (namestart == std::string::npos)?0:namestart+strlen("::"); - } - - return t_name.substr(namestart, std::string::npos); - } } } diff --git a/src/reflection.cpp b/src/reflection.cpp index d38c0b09..fe8bc3a0 100644 --- a/src/reflection.cpp +++ b/src/reflection.cpp @@ -52,38 +52,44 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_reflect chaiscript::bootstrap::standard_library::vector_type > >("AST_NodeVector", m); - CHAISCRIPT_CLASS_NO_CONSTRUCTOR( m, - chaiscript::exception::eval_error, - ((reason)) - ((call_stack)) + using namespace chaiscript; + + chaiscript::utility::add_class(*m, + "eval_error", + { }, + { {fun(&chaiscript::exception::eval_error::reason), "reason"}, + {fun(&chaiscript::exception::eval_error::call_stack), "call_stack"} } + ); + + chaiscript::utility::add_class(*m, + "File_Position", + { constructor(), + constructor() }, + { {fun(&File_Position::line), "line"}, + {fun(&File_Position::column), "column"} } + ); + + chaiscript::utility::add_class(*m, + "AST_Node", + { }, + { {fun(&AST_Node::text), "text"}, + {fun(&AST_Node::identifier), "identifier"}, + {fun(&AST_Node::filename), "filename"}, + {fun(&AST_Node::start), "start"}, + {fun(&AST_Node::end), "end"}, + {fun(&AST_Node::internal_to_string), "internal_to_string"}, + {fun(&AST_Node::children), "children"}, + {fun(&AST_Node::replace_child), "replace_child"} + } ); - CHAISCRIPT_CLASS( m, - chaiscript::File_Position, - (chaiscript::File_Position()) - (chaiscript::File_Position(int,int)), - ((line)) - ((column)) - ); + chaiscript::utility::add_class(*m, + "ChaiScript_Parser", + { constructor() }, + { {fun(&parser::ChaiScript_Parser::parse), "parse"}, + {fun(&parser::ChaiScript_Parser::ast), "ast"} } + ); - CHAISCRIPT_CLASS_NO_CONSTRUCTOR( m, - chaiscript::AST_Node, - ((text)) - ((identifier)) - ((filename)) - ((start)) - ((end)) - ((internal_to_string)) - ((children)) - ((replace_child)) - ); - - CHAISCRIPT_CLASS( m, - chaiscript::parser::ChaiScript_Parser, - (chaiscript::parser::ChaiScript_Parser ()), - ((parse)) - ((ast)) - ); return m; diff --git a/unittests/object_lifetime_test.cpp b/unittests/object_lifetime_test.cpp index d59957b0..8d700fdc 100644 --- a/unittests/object_lifetime_test.cpp +++ b/unittests/object_lifetime_test.cpp @@ -29,12 +29,12 @@ int main() { chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module()); - CHAISCRIPT_CLASS( m, - Test, - (Test ()) - (Test (const Test &)), - ((count)) - ); + chaiscript::utility::add_class(*m, + "Test", + { chaiscript::constructor(), + chaiscript::constructor() }, + { {chaiscript::fun(&Test::count), "count"} } + ); chaiscript::ChaiScript chai; chai.add(m); diff --git a/unittests/utility_test.cpp b/unittests/utility_test.cpp index bcd3240b..40ee4dff 100644 --- a/unittests/utility_test.cpp +++ b/unittests/utility_test.cpp @@ -15,17 +15,23 @@ int main() chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module()); - CHAISCRIPT_CLASS( m, - Test, - (Test ()) - (Test (const Test &)), - ((function)) - ((function2)) - ((function3)) - ((functionOverload)(std::string (Test::*)(double))) - ((functionOverload)(std::string (Test::*)(int))) - ((operator=)) - ); + using namespace chaiscript; + + chaiscript::utility::add_class(*m, + "Test", + { constructor(), + constructor() }, + { {fun(&Test::function), "function"}, + {fun(&Test::function2), "function2"}, + {fun(&Test::function3), "function3"}, + {fun(&Test::functionOverload), "functionOverload"}, + {fun(&Test::functionOverload), "functionOverload"}, + {fun(&Test::operator=), "="} + + } + ); + + chaiscript::ChaiScript chai; chai.add(m);