diff options
author | Toon Schoenmakers <toon.schoenmakers@copernica.com> | 2015-05-18 14:42:36 +0200 |
---|---|---|
committer | Toon Schoenmakers <toon.schoenmakers@copernica.com> | 2015-05-18 14:42:36 +0200 |
commit | b7729b98bbd91dcff66c3712f85f477dbd86d4a3 (patch) | |
tree | 19a27f551366139a43727d3fcabaa7e031ffbf2b | |
parent | 9956d998368e0d9f55e1940f4d584fe1554c7418 (diff) |
We are now ABI compatible with the latest release again
-rw-r--r-- | include/value.h | 16 | ||||
-rw-r--r-- | zend/value.cpp | 27 |
2 files changed, 43 insertions, 0 deletions
diff --git a/include/value.h b/include/value.h index 9959a9c..ca3fb9d 100644 --- a/include/value.h +++ b/include/value.h @@ -1003,6 +1003,7 @@ public: * @return Value */ Value call(const char *name) const; + Value call(const char *name); /** * @@ -1025,6 +1026,20 @@ public: return exec(name, sizeof...(Args), params); } + template <typename ...Args> + Value call(const char *name, Args&&... args) + { + // store arguments + Value vargs[] = { static_cast<Value>(args)... }; + + // array of parameters + _zval_struct **params[sizeof...(Args)]; + for(unsigned i=0; i < sizeof...(Args); i++) {params[i] = &vargs[i]._val;} + + // call the function + return exec(name, sizeof...(Args), params); + } + /** * Retrieve the original implementation * @@ -1108,6 +1123,7 @@ private: * @return Value */ Value exec(const char *name, int argc, struct _zval_struct ***params) const; + Value exec(const char *name, int argc, struct _zval_struct ***params); /** * Refcount - the number of references to the value diff --git a/zend/value.cpp b/zend/value.cpp index a728dcc..9fb59f4 100644 --- a/zend/value.cpp +++ b/zend/value.cpp @@ -884,6 +884,17 @@ Value Value::call(const char *name) const } /** + * Call the method - if the variable holds an object with the given method + * @param name name of the method to call + * @return Value + */ +Value Value::call(const char *name) +{ + // call with zero parameters + return exec(name, 0, NULL); +} + +/** * Helper function that runs the actual call * @param object The object to call it on * @param method The function or method to call @@ -953,6 +964,22 @@ Value Value::exec(const char *name, int argc, struct _zval_struct ***params) con } /** + * Call method with a number of parameters + * @param name Name of method to call + * @param argc Number of parameters + * @param argv The parameters + * @return Value + */ +Value Value::exec(const char *name, int argc, struct _zval_struct ***params) +{ + // wrap the name in a Php::Value object to get a zval + Value method(name); + + // call helper function + return do_exec(&_val, method._val, argc, params); +} + +/** * Comparison operators== for hardcoded Value * @param value */ |