summaryrefslogtreecommitdiff
path: root/src/argument.cpp
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-09-10 09:54:14 -0700
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-09-10 09:54:14 -0700
commit37c38c70de43d9d9ee3c9f0e2f175e19bcc0b485 (patch)
tree29cf02cfabad5eb22306ac05eaee96efbdb79cd9 /src/argument.cpp
parent85507088051bdfabf8bc71346290949b78c3c914 (diff)
When registering functions, it now is also possible to specify the signature of the parameters
Diffstat (limited to 'src/argument.cpp')
-rw-r--r--src/argument.cpp104
1 files changed, 72 insertions, 32 deletions
diff --git a/src/argument.cpp b/src/argument.cpp
index 387151a..7dbf624 100644
--- a/src/argument.cpp
+++ b/src/argument.cpp
@@ -14,62 +14,102 @@
namespace Php {
/**
- * Move constructor
- * @param argument
+ * Constructor
+ * @param name Name of the argument
+ * @param type Argument type
+ * @param required Is this argument required?
+ * @param byref Is this a reference argument
*/
-Argument::Argument(Argument &&argument)
+Argument::Argument(const char *name, Type type, bool required, bool byref)
{
- // copy data
- _info = argument._info;
+ // construct object
+ _info = new zend_arg_info;
+
+ // fill members
+ _info->name = name;
+ _info->name_len = strlen(name);
+ _info->type_hint = type == arrayType || type == callableType ? type : 0;
+ _info->class_name = NULL;
+ _info->class_name_len = 0;
+ _info->allow_null = false;
+ _info->pass_by_reference = byref;
+
+ // store if required
+ _required = required;
}
/**
- * Change the name
- * @param name
- * @return Argument
+ * Constructor
+ * @param name Name of the argument
+ * @param classname Name of the class
+ * @param nullable Can it be null?
+ * @param required Is this argument required?
+ * @param byref Is this a reference argument?
*/
-Argument &Argument::name(const char *name)
+Argument::Argument(const char *name, const char *classname, bool nullable, bool required, bool byref)
{
+ // construct object
+ _info = new zend_arg_info;
+
+ // fill members
_info->name = name;
_info->name_len = strlen(name);
- return *this;
+ _info->type_hint = objectType;
+ _info->class_name = classname;
+ _info->class_name_len = strlen(classname);
+ _info->allow_null = nullable;
+ _info->pass_by_reference = byref;
+
+ // store if required
+ _required = required;
+}
+
+/**
+ * Copy constructor
+ * @param argument
+ */
+Argument::Argument(const Argument &argument)
+{
+ // construct object
+ _info = new zend_arg_info;
+
+ // fill members
+ *_info = *argument._info;
+
+ // store if required
+ _required = argument._required;
}
/**
- * Change the type
- * @param type
- * @return Argument
+ * Move constructor
+ * @param argument
*/
-Argument &Argument::type(Type type)
+Argument::Argument(Argument &&argument)
{
- _info->type_hint = type;
- return *this;
+ // copy memory pointer
+ _info = argument._info;
+
+ // forget in other object
+ argument._info = nullptr;
}
/**
- * Require the parameter to be a certain class
- * @param name Name of the class
- * @param null Are null values allowed?
- * @return Argument
+ * Destructor
*/
-Argument &Argument::object(const char *classname, bool null)
+Argument::~Argument()
{
- _info->type_hint = objectType;
- _info->class_name = classname;
- _info->class_name_len = strlen(classname);
- _info->allow_null = null;
- return *this;
+ if (_info) delete _info;
}
/**
- * Is this a by-ref argument?
- * @param bool Mark as by-ref variable
- * @return Argument
+ * Fill an arg_info structure with data
+ * @param info
+ * @internal
*/
-Argument &Argument::byref(bool value)
+void Argument::fill(struct _zend_arg_info *info) const
{
- _info->pass_by_reference = value;
- return *this;
+ // copy all data
+ *info = *_info;
}
/**