diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-12-06 07:42:36 -0800 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-12-06 07:42:36 -0800 |
commit | c91dc2292f4fd49a3103691cb70fee8336c6aa6c (patch) | |
tree | 578d41f25a0ce7b37ab3b7c9d2aa1992ca91b0c0 /src | |
parent | 3750e24683f3a1d0b643e9808d9619db40d31cc4 (diff) |
Global variables are now accessible via Php::globals["varname"]
Diffstat (limited to 'src')
-rw-r--r-- | src/extension.cpp | 29 | ||||
-rw-r--r-- | src/function.cpp | 1 | ||||
-rw-r--r-- | src/globals.cpp (renamed from src/environment.cpp) | 48 | ||||
-rw-r--r-- | src/includes.h | 4 | ||||
-rw-r--r-- | src/methodmember.h | 5 | ||||
-rw-r--r-- | src/nativefunction.h | 19 |
6 files changed, 42 insertions, 64 deletions
diff --git a/src/extension.cpp b/src/extension.cpp index f4cc9ce..3e2ff25 100644 --- a/src/extension.cpp +++ b/src/extension.cpp @@ -77,17 +77,8 @@ static int extension_shutdown(SHUTDOWN_FUNC_ARGS) */ static int request_startup(INIT_FUNC_ARGS) { - // create the environment - Environment *environment = extension->createEnvironment(); - - // store in global structure - PHPCPP_G(environment) = environment; - - // initialize the environment - environment->initialize(); - // start the request - return BOOL2SUCCESS(environment->initialize() && extension->startRequest(*environment)); + return extension->startRequest(); } /** @@ -98,20 +89,8 @@ static int request_startup(INIT_FUNC_ARGS) */ static int request_shutdown(INIT_FUNC_ARGS) { - // retrieve the environment - Environment *environment = PHPCPP_G(environment); - // end the request - bool success = extension->endRequest(*environment) && environment->finalize(); - - // deallocate the environment - extension->deleteEnvironment(environment); - - // reset global variable - PHPCPP_G(environment) = NULL; - - // done - return BOOL2SUCCESS(success); + return BOOL2SUCCESS(extension->endRequest()); } /** @@ -203,10 +182,6 @@ Function *Extension::add(const char *name, native_callback_0 function, const std Function *Extension::add(const char *name, native_callback_1 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } Function *Extension::add(const char *name, native_callback_2 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } Function *Extension::add(const char *name, native_callback_3 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } -Function *Extension::add(const char *name, native_callback_4 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } -Function *Extension::add(const char *name, native_callback_5 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } -Function *Extension::add(const char *name, native_callback_6 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } -Function *Extension::add(const char *name, native_callback_7 function, const std::initializer_list<Argument> &arguments) { return add(new NativeFunction(name, function, arguments)); } /** * Retrieve the module entry diff --git a/src/function.cpp b/src/function.cpp index ef9cf78..a710f36 100644 --- a/src/function.cpp +++ b/src/function.cpp @@ -45,6 +45,7 @@ void invoke_function(INTERNAL_FUNCTION_PARAMETERS) } catch (Php::Exception &exception) { + // an exception originally thrown by C++ should be passed on to PHP zend_throw_exception(zend_exception_get_default(), (char*)exception.message().c_str(), 0 TSRMLS_CC); } } diff --git a/src/environment.cpp b/src/globals.cpp index 9b0a18e..e8672aa 100644 --- a/src/environment.cpp +++ b/src/globals.cpp @@ -1,7 +1,7 @@ /** - * Environment.cpp + * Globals.cpp * - * Implementation of the environment class + * Implementation of the globals class * * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com> * @copyright 2013 Copernica BV @@ -14,11 +14,27 @@ namespace Php { /** + * Get access to the globals single instance + * @return Globals + */ +Globals &Globals::instance() +{ + static Globals globals; + return globals; +} + +/** + * The one and only instance + * @var Globals + */ +Globals &globals = Globals::instance(); + +/** * Get access to a global variable * @param name * @return Global */ -Global Environment::operator[](const char *name) +Global Globals::operator[](const char *name) { // pointer to a zval zval **varvalue; @@ -43,7 +59,7 @@ Global Environment::operator[](const char *name) * @param name * @return Global */ -Global Environment::operator[](const std::string &name) +Global Globals::operator[](const std::string &name) { // pointer to a zval zval **varvalue; @@ -70,7 +86,7 @@ Global Environment::operator[](const std::string &name) * @param argv The parameters * @return Value */ -Value Environment::exec(const Value &name, int argc, zval ***params) +Value Globals::exec(const Value &name, int argc, zval ***params) { // the return zval zval *retval = nullptr; @@ -90,7 +106,7 @@ Value Environment::exec(const Value &name, int argc, zval ***params) * @param name Name of the function * @return Value */ -Value Environment::call(const Value &name) +Value Globals::call(const Value &name) { // call with zero parameters return exec(name, 0, NULL); @@ -102,7 +118,7 @@ Value Environment::call(const Value &name) * @param p0 The first parameter * @return Value */ -Value Environment::call(const Value &name, Value p0) +Value Globals::call(const Value &name, Value p0) { // array of parameters zval **params[1] = { &p0._val }; @@ -118,7 +134,7 @@ Value Environment::call(const Value &name, Value p0) * @param p1 The second parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1) +Value Globals::call(const Value &name, Value p0, Value p1) { // array of parameters zval **params[2] = { &p0._val, &p1._val }; @@ -135,7 +151,7 @@ Value Environment::call(const Value &name, Value p0, Value p1) * @param p2 The third parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2) { // array of parameters zval **params[3] = { &p0._val, &p1._val, &p2._val }; @@ -153,7 +169,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2) * @param p3 The fourth parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3) { // array of parameters zval **params[4] = { &p0._val, &p1._val, &p2._val, &p3._val }; @@ -172,7 +188,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p4 The fifth parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4) { // array of parameters zval **params[5] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val }; @@ -192,7 +208,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p5 The sixth parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5) { // array of parameters zval **params[6] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val, &p5._val }; @@ -213,7 +229,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p6 The seventh parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6) { // array of parameters zval **params[7] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val, &p5._val, &p6._val }; @@ -235,7 +251,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p7 The eight parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7) { // array of parameters zval **params[8] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val, &p5._val, &p6._val, &p7._val }; @@ -258,7 +274,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p8 The nineth parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7, Value p8) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7, Value p8) { // array of parameters zval **params[9] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val, &p5._val, &p6._val, &p7._val, &p8._val }; @@ -282,7 +298,7 @@ Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p * @param p9 The tenth parameter * @return Value */ -Value Environment::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7, Value p8, Value p9) +Value Globals::call(const Value &name, Value p0, Value p1, Value p2, Value p3, Value p4, Value p5, Value p6, Value p7, Value p8, Value p9) { // array of parameters zval **params[10] = { &p0._val, &p1._val, &p2._val, &p3._val, &p4._val, &p5._val, &p6._val, &p7._val, &p8._val, &p9._val }; diff --git a/src/includes.h b/src/includes.h index ac99950..ae8956f 100644 --- a/src/includes.h +++ b/src/includes.h @@ -38,7 +38,7 @@ #include "../include/type.h" #include "../include/value.h" #include "../include/hiddenpointer.h" -#include "../include/environment.h" +#include "../include/globals.h" #include "../include/argument.h" #include "../include/byval.h" #include "../include/byref.h" @@ -57,7 +57,7 @@ #include "../include/classinfo.h" #include "../include/extension.h" #include "../include/exception.h" -#include "../include/globals.h" +#include "../include/init.h" /** * Interface files for internal use only diff --git a/src/methodmember.h b/src/methodmember.h index 20f2749..9d4bcd1 100644 --- a/src/methodmember.h +++ b/src/methodmember.h @@ -51,13 +51,12 @@ public: /** * Method that gets called every time the function is executed - * @param environment Environment object * @param params The parameters that were passed * @return Variable Return value */ - virtual Value invoke(Environment &environment, Parameters ¶ms) + virtual Value invoke(Parameters ¶ms) { - return _method.invoke(environment, params); + return _method.invoke(params); } private: diff --git a/src/nativefunction.h b/src/nativefunction.h index 2a61ccb..8b946a3 100644 --- a/src/nativefunction.h +++ b/src/nativefunction.h @@ -28,10 +28,6 @@ public: NativeFunction(const char *name, native_callback_1 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(1) { _function.f1 = function; } NativeFunction(const char *name, native_callback_2 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(2) { _function.f2 = function; } NativeFunction(const char *name, native_callback_3 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(3) { _function.f3 = function; } - NativeFunction(const char *name, native_callback_4 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(4) { _function.f4 = function; } - NativeFunction(const char *name, native_callback_5 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(5) { _function.f5 = function; } - NativeFunction(const char *name, native_callback_6 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(6) { _function.f6 = function; } - NativeFunction(const char *name, native_callback_7 function, const std::initializer_list<Argument> &arguments = {}) : Function(name, arguments), _type(7) { _function.f7 = function; } /** * Destructor @@ -40,21 +36,16 @@ public: /** * Method that gets called every time the function is executed - * @param environment Environment * @param params The parameters that were passed * @return Variable Return value */ - virtual Value invoke(Environment &environment, Parameters ¶ms) override + virtual Value invoke(Parameters ¶ms) override { switch (_type) { case 0: _function.f0(); return Value(); case 1: _function.f1(params); return Value(); - case 2: _function.f2(environment); return Value(); - case 3: _function.f3(environment, params); return Value(); - case 4: return _function.f4(); - case 5: return _function.f5(params); - case 6: return _function.f6(environment); - case 7: return _function.f7(environment, params); + case 2: return _function.f2(); + case 3: return _function.f3(params); default: return Value(); } } @@ -69,10 +60,6 @@ private: native_callback_1 f1; native_callback_2 f2; native_callback_3 f3; - native_callback_4 f4; - native_callback_5 f5; - native_callback_6 f6; - native_callback_7 f7; } _function; /** |