summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-12-06 07:42:36 -0800
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-12-06 07:42:36 -0800
commitc91dc2292f4fd49a3103691cb70fee8336c6aa6c (patch)
tree578d41f25a0ce7b37ab3b7c9d2aa1992ca91b0c0 /src
parent3750e24683f3a1d0b643e9808d9619db40d31cc4 (diff)
Global variables are now accessible via Php::globals["varname"]
Diffstat (limited to 'src')
-rw-r--r--src/extension.cpp29
-rw-r--r--src/function.cpp1
-rw-r--r--src/globals.cpp (renamed from src/environment.cpp)48
-rw-r--r--src/includes.h4
-rw-r--r--src/methodmember.h5
-rw-r--r--src/nativefunction.h19
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 &params)
+ virtual Value invoke(Parameters &params)
{
- 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 &params) override
+ virtual Value invoke(Parameters &params) 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;
/**