diff options
author | Martijn Otto <martijn.otto@copernica.com> | 2016-05-11 17:34:40 +0200 |
---|---|---|
committer | Martijn Otto <martijn.otto@copernica.com> | 2016-05-11 17:34:40 +0200 |
commit | 9f2e816c787c30ceeb139623c8dae594c4b4443d (patch) | |
tree | e434ebd2ff37c98bdc5934120b48cda1bf3899c2 /zend/callable.h | |
parent | 570590058d16274005a4994fd8f1046d0eaf7f74 (diff) |
Work in progress on PHP7 compatibility
Diffstat (limited to 'zend/callable.h')
-rw-r--r-- | zend/callable.h | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/zend/callable.h b/zend/callable.h index bd74f27..272b22e 100644 --- a/zend/callable.h +++ b/zend/callable.h @@ -1,7 +1,7 @@ /** * Callable.h * - * Object represents a callable function or method that is defined with the CPP + * Object represents a callable function or method that is defined with the CPP * API. * * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com> @@ -13,7 +13,7 @@ */ namespace Php { -/** +/** * Class definition */ class Callable @@ -29,22 +29,22 @@ public: // construct vector for arguments _argc = arguments.size(); _argv = new zend_arg_info[_argc+1]; - + // the first record is initialized with information about the function, // so we skip that here int i=1; - + // loop through the arguments for (auto it = arguments.begin(); it != arguments.end(); it++) { // increment counter with number of required parameters if (it->required()) _required++; - + // fill the arg info fill(&_argv[i++], *it); } } - + /** * Copy constructor * @param that @@ -55,7 +55,7 @@ public: _required(that._required), _argc(that._argc), _argv(nullptr) {} - + /** * Move constructor * @param that @@ -65,7 +65,7 @@ public: _return(that._return), _required(that._required), _argc(that._argc), - _argv(that._argv) + _argv(that._argv) { // invalidate other object that._argv = nullptr; @@ -78,14 +78,14 @@ public: { if (_argv) delete[] _argv; } - + /** * Method that gets called every time the function is executed * @param params The parameters that were passed * @return Variable Return value */ virtual Value invoke(Parameters ¶ms) = 0; - + /** * Fill a function entry * @param entry Entry to be filled @@ -134,7 +134,7 @@ protected: * @var zend_arg_info[] */ zend_arg_info *_argv = nullptr; - + /** * Private helper method to fill an argument object * @param info object from the zend engine @@ -143,10 +143,11 @@ protected: void fill(zend_arg_info *info, const Argument &arg) const { // fill members - info->name = arg.name(); - info->name_len = ::strlen(arg.name()); + info->name = zend_string_init(arg.name(), ::strlen(arg.name()), 1); -#if PHP_VERSION_ID >= 50400 + // are we filling an object + if (arg.type() == Type::Object) info->class_name = zend_string_init(arg.classname(), ::strlen(arg.classname()), 1); + else info->class_name = nullptr; // since php 5.4 there is a type-hint, but we only support arrays, objects and callables switch (arg.type()) { @@ -155,29 +156,14 @@ protected: case Type::Object: info->type_hint = IS_OBJECT; break; default: info->type_hint = IS_NULL; break; } - -# if PHP_VERSION_ID >= 50600 - // from PHP 5.6 and onwards, an is_variadic property can be set, this + // from PHP 5.6 and onwards, an is_variadic property can be set, this // specifies whether this argument is the first argument that specifies // the type for a variable length list of arguments. For now we only // support methods and functions with a fixed number of arguments. info->is_variadic = false; -# endif - -#else - - // php 5.3 code - info->array_type_hint = arg.type() == Type::Array; - info->return_reference = false; - info->required_num_args = 0; // @todo is this correct? - -#endif - // this parameter is a regular type - info->class_name = arg.type() == Type::Object ? arg.classname() : nullptr; - info->class_name_len = arg.type() == Type::Object && arg.classname() ? ::strlen(arg.classname()) : 0; info->allow_null = arg.allowNull(); info->pass_by_reference = arg.byReference(); } |