From ca595b1d7aa8ed4a482b8a5ea598ecc1a2636083 Mon Sep 17 00:00:00 2001 From: Martijn Otto Date: Mon, 17 Feb 2014 16:20:09 +0100 Subject: Some code cleanup --- src/flag.cpp | 111 ----------------------------------------------------- src/function.cpp | 17 ++++---- src/includes.h | 9 +++-- src/member.cpp | 46 +++++++++++----------- src/methodmember.h | 4 +- 5 files changed, 37 insertions(+), 150 deletions(-) delete mode 100644 src/flag.cpp (limited to 'src') diff --git a/src/flag.cpp b/src/flag.cpp deleted file mode 100644 index b4db069..0000000 --- a/src/flag.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/** - * flag.cpp - * - * flag clases for the safe transfer of a Zend flag to a Zend functions - * flags defined at Zend/zend_compile.h - * - * @author Valeriy_Dmitriev - */ - -#include "includes.h" - -/** - * Namespace Php - */ -namespace Php { - - - /** - * Constructor - * @param flags instance of Zend::AccClass - */ - template <> - FlagClass::FlagTemplate(const Zend::AccClass &zflag) { - /** - * access types for classes - * (method flags) - */ - switch(zflag){ - // if a class no have specified flags - case Zend::AccClass::NOSET: - _val = 0; - break; - //ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by using the keyword. - case Zend::AccClass::ABSTRACT: - _val = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; //0x20; - break; - case Zend::AccClass::FINAL: - _val = ZEND_ACC_FINAL_CLASS; //0x40; - break; - case Zend::AccClass::INTERFACE: - _val = ZEND_ACC_INTERFACE; //0x80; - break; - default: - _val = 0; - } - } - - /** - * Constructor - * @param flags instance of Zend::AccMemb - */ - template <> - FlagMemb::FlagTemplate(const Zend::AccMemb &zflag) { - /** - * access types for methods and propertyes (members) - * (class flags) - */ - switch(zflag){ - // method flags (visibility) - // The order of those must be kept - public < protected < private - case Zend::AccMemb::PUBLIC: - _val = ZEND_ACC_PUBLIC; //0x100 - break; - case Zend::AccMemb::PROTECTED: - _val = ZEND_ACC_PROTECTED; //0x200 - break; - case Zend::AccMemb::PRIVATE: - _val = ZEND_ACC_PRIVATE; //0x400 - break; - case Zend::AccMemb::PPP_MASK: - _val = ZEND_ACC_PPP_MASK; //(ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE) - break; - - case Zend::AccMemb::STATIC: - //_val = ZEND_ACC_STATIC; //0x01 - //_val = ZEND_ACC_ALLOW_STATIC | ZEND_ACC_PUBLIC; - _val = ZEND_ACC_STATIC | ZEND_ACC_PUBLIC; - break; - - // Artificially entered field - case Zend::AccMemb::CONSTANT: - _val = 0; //0 - break; - - case Zend::AccMemb::ABSTRACT: - _val = ZEND_ACC_ABSTRACT; //0x02 - break; - case Zend::AccMemb::FINAL: - _val = ZEND_ACC_FINAL; //0x04 - break; - - default: - _val = ZEND_ACC_PUBLIC; - } - } - - - /** - * factory function - */ - FlagClass Flag(const Zend::AccClass &zflag) { - return FlagClass(zflag); - } - FlagMemb Flag(const Zend::AccMemb &zflag) { - return FlagMemb(zflag); - } - -/** - * End of namespace Php - */ -} diff --git a/src/function.cpp b/src/function.cpp index 3fa5fe6..ba37022 100644 --- a/src/function.cpp +++ b/src/function.cpp @@ -99,22 +99,19 @@ Function::~Function() * * @param entry Entry to be filled * @param classname Optional class name - * @param pub Is this a public property? + * @param flags Is this a public property? */ -void Function::fill(zend_function_entry *entry, const char *classname, int flags) const +void Function::fill(zend_function_entry *entry, const char *classname, MemberModifier flags) const { // fill the members of the entity, and hide a pointer to the current object in the name entry->fname = _ptr; entry->handler = invoke_function; entry->arg_info = _argv; entry->num_args = _argc; + entry->flags = flags; - // there are no flags like deprecated, private or protected - entry->flags = classname ? flags : 0; - - // we should fill the first argument as well -#if PHP_VERSION_ID >= 50400 +#if PHP_VERSION_ID >= 50400 fill((zend_internal_function_info *)entry->arg_info, classname); #endif } @@ -133,14 +130,14 @@ void Function::fill(zend_internal_function_info *info, const char *classname) co info->_name = _ptr; info->_name_len = _ptr.length(); info->_class_name = classname; - + // number of required arguments, and the expected return type info->required_num_args = _required; info->_type_hint = _type; - + // we do not support return-by-reference info->return_reference = false; - + // passing by reference is not used info->pass_rest_by_reference = false; } diff --git a/src/includes.h b/src/includes.h index 4492252..5b97e03 100644 --- a/src/includes.h +++ b/src/includes.h @@ -42,8 +42,6 @@ /** * Include other files from this library */ -#include "../include/zend.h" -#include "../include/flag.h" #include "../include/type.h" #include "../include/value.h" #include "../include/array.h" @@ -55,13 +53,18 @@ #include "../include/global.h" #include "../include/hashmember.h" #include "../include/parameters.h" +#include "../include/membermodifier.h" #include "../include/function.h" #include "../include/properties.h" #include "../include/base.h" #include "../include/method.h" #include "../include/member.h" -#include "../include/membervisibility.h" +#include "../include/public.h" +#include "../include/protected.h" +#include "../include/private.h" +#include "../include/const.h" #include "../include/members.h" +#include "../include/classmodifier.h" #include "../include/class.h" #include "../include/classinfo.h" #include "../include/extension.h" diff --git a/src/member.cpp b/src/member.cpp index 70dec9f..31e7d8d 100644 --- a/src/member.cpp +++ b/src/member.cpp @@ -18,7 +18,7 @@ namespace Php { * @param name Name of the member * @param flags Flag access to a class member (bublic, protected etc) */ -Member::Member(const char *name, const FlagMemb &&flags) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags) : _name(name), _flags(flags) { // create a null member _info = new NullMember(); @@ -30,7 +30,7 @@ Member::Member(const char *name, const FlagMemb &&flags) : _name(name), _accflag * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, std::nullptr_t value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, std::nullptr_t value) : _name(name), _flags(flags) { // create a null member _info = new NullMember(); @@ -42,7 +42,7 @@ Member::Member(const char *name, const FlagMemb &&flags, std::nullptr_t value) : * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, int value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, int value) : _name(name), _flags(flags) { // create a long member _info = new LongMember(value); @@ -54,7 +54,7 @@ Member::Member(const char *name, const FlagMemb &&flags, int value) : _name(name * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, long value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, long value) : _name(name), _flags(flags) { // create a long member _info = new LongMember(value); @@ -66,7 +66,7 @@ Member::Member(const char *name, const FlagMemb &&flags, long value) : _name(nam * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, bool value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, bool value) : _name(name), _flags(flags) { // create a bool member _info = new BoolMember(value); @@ -78,7 +78,7 @@ Member::Member(const char *name, const FlagMemb &&flags, bool value) : _name(nam * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, char value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, char value) : _name(name), _flags(flags) { // create a new string member _info = new StringMember(&value, 1); @@ -90,7 +90,7 @@ Member::Member(const char *name, const FlagMemb &&flags, char value) : _name(nam * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, const std::string &value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, const std::string &value) : _name(name), _flags(flags) { // create a new string member _info = new StringMember(value); @@ -103,7 +103,7 @@ Member::Member(const char *name, const FlagMemb &&flags, const std::string &valu * @param value The value to add * @param size String length */ -Member::Member(const char *name, const FlagMemb &&flags, const char *value, int size) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, const char *value, int size) : _name(name), _flags(flags) { // create a new string member if (size < 0) size = strlen(value); @@ -116,7 +116,7 @@ Member::Member(const char *name, const FlagMemb &&flags, const char *value, int * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, const FlagMemb &&flags, double value) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, double value) : _name(name), _flags(flags) { // create a new double member _info = new DoubleMember(value); @@ -128,12 +128,12 @@ Member::Member(const char *name, const FlagMemb &&flags, double value) : _name(n * @param pub Is this a public method (otherwise it is protected) * @param method The method to add */ -Member::Member(const char *name, const FlagMemb &&flags, const _Method &method, const std::initializer_list &arguments) : _name(name), _accflag(flags) +Member::Member(const char *name, MemberModifier flags, const _Method &method, const std::initializer_list &arguments) : _name(name), _flags(flags) { - // If the flags specifies as Zend::AccMemb::CONSTANT. - // That is: if( flags == Flag(Zend::AccMemb::CONSTANT) ) ... - //XXX Flag(Zend::AccMemb::PUBLIC) -> Flag(Zend::AccMemb::STATIC) - if(!flags) _accflag = Flag(Zend::AccMemb::PUBLIC); + // methods cannot be constant, so in that case we default to + // a public member function instead + if (_flags == constMember) _flags = publicMember; + // create method member _info = new MethodMember(name, method, arguments); } @@ -142,13 +142,12 @@ Member::Member(const char *name, const FlagMemb &&flags, const _Method &method, * Copy constructor * @param member The member to copy */ -Member::Member(const Member &member) : _accflag(member._accflag) +Member::Member(const Member &member) : _flags(member._flags) { // copy info object, and name and public members _info = member._info; _name = member._name; - //_accflag = member._accflag; - + // update refcount in info object _info->refcount(+1); } @@ -157,13 +156,12 @@ Member::Member(const Member &member) : _accflag(member._accflag) * Move constructor * @param member The member to move */ -Member::Member(Member &&member) : _accflag (std::move(member._accflag)) +Member::Member(Member &&member) : _flags(member._flags) { // move info object, and name and public properties _info = member._info; _name = std::move(member._name); - //_accflag = std::move(member._accflag); - + // reset info in other object member._info = NULL; } @@ -175,7 +173,7 @@ Member::~Member() { // leap out if there is no other info object, or when it is also used by other objects if (!_info || _info->refcount(-1) > 0) return; - + // deallocate info object delete _info; } @@ -205,10 +203,10 @@ bool Member::isMethod() void Member::declare(struct _zend_class_entry *entry) { // let the info object handle stuff - if(!_accflag) // That is: if( flags == Flag(Zend::AccMemb::CONSTANT) ) + if(_flags == constMember) _info->declareConst(entry, _name.c_str(), _name.size() TSRMLS_CC); else - _info->declare(entry, _name.c_str(), _name.size(), _accflag TSRMLS_CC); + _info->declare(entry, _name.c_str(), _name.size(), _flags TSRMLS_CC); } /** @@ -220,7 +218,7 @@ void Member::declare(struct _zend_class_entry *entry) void Member::fill(struct _zend_function_entry *entry, const char *classname) { // let the info object do this - _info->fill(entry, classname, _accflag); + _info->fill(entry, classname, _flags); } /** diff --git a/src/methodmember.h b/src/methodmember.h index 67b4dad..4f2d4e5 100644 --- a/src/methodmember.h +++ b/src/methodmember.h @@ -41,9 +41,9 @@ public: * Fill a function entry object * @param entry Function entry * @param classname Name of the class - * @param pub Is this a public entry + * @param method Is this a public entry */ - virtual void fill(struct _zend_function_entry *entry, const char *classname, int flags) + virtual void fill(struct _zend_function_entry *entry, const char *classname, MemberModifier flags) { // call function object Function::fill(entry, classname, flags); -- cgit v1.2.3