| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | /*  +----------------------------------------------------------------------+  | PHP Version 5                                                        |  +----------------------------------------------------------------------+  | Copyright (c) 1997-2016 The PHP Group                                |  +----------------------------------------------------------------------+  | http://www.opensource.org/licenses/mit-license.php  MIT License      |  +----------------------------------------------------------------------+  | Author: Jani Taskinen <[email protected]>                         |  | Author: Patrick Reilly <[email protected]>                             |  | Author: Stefan Siegl <[email protected]>                                |  +----------------------------------------------------------------------+*/#ifndef PHP_V8JS_MACROS_H#define PHP_V8JS_MACROS_H#if __GNUC__ == 4 && __GNUC_MINOR__ == 4#define _GLIBCXX_USE_NANOSLEEP 1#endif#include <chrono>#include <deque>#include <thread>#include <map>#include <list>#include <vector>#include <mutex>#include <cmath>#ifndef isnan/* php.h requires the isnan() macro, which is removed by c++ <cmath> header, * work around: re-define the macro to std::isnan function */#define isnan(a) std::isnan(a)#endifextern "C" {#include "php.h"#include "php_v8js.h"}#ifdef _WIN32/* On Windows a symbol COMPILER is defined.  However v8.h has an enum with that * name which hence would be broken unless undefined here. */#undef COMPILER#endif#include <v8.h>#include "v8js_class.h"#include "v8js_v8.h"#ifndef PATH_MAX/* Some platforms (Windows among others) don't have a PATH_MAX, for the moment * just assume an arbitrary upper bound of 4096 chars. * Anyways we should fix (get rid of) the code that uses PATH_MAX as it doesn't * even check for buffer overflows.  FIXME */#define PATH_MAX 4096#endif/* V8Js Version */#define PHP_V8JS_VERSION "1.3.4"/* Helper macros */#define V8JS_GET_CLASS_NAME(var, obj) \	v8::String::Utf8Value var(obj->GetConstructorName());/* Options */#define V8JS_FLAG_NONE			(1<<0)#define V8JS_FLAG_FORCE_ARRAY	(1<<1)#define V8JS_FLAG_PROPAGATE_PHP_EXCEPTIONS	(1<<2)/* These are not defined by Zend */#define ZEND_WAKEUP_FUNC_NAME    "__wakeup"#define ZEND_SLEEP_FUNC_NAME     "__sleep"#define ZEND_SET_STATE_FUNC_NAME "__set_state"/* Convert zval into V8 value */v8::Handle<v8::Value> zval_to_v8js(zval *, v8::Isolate * TSRMLS_DC);/* Convert V8 value into zval */int v8js_to_zval(v8::Handle<v8::Value>, zval *, int, v8::Isolate * TSRMLS_DC);struct v8js_accessor_ctx{	zend_string *variable_name;    v8::Isolate *isolate;};void v8js_accessor_ctx_dtor(v8js_accessor_ctx * TSRMLS_DC);/* Register accessors into passed object */void v8js_register_accessors(std::vector<v8js_accessor_ctx*> *accessor_list, v8::Local<v8::FunctionTemplate>, zval *, v8::Isolate * TSRMLS_DC);/* Forward declarations */struct v8js_timer_ctx;/* Module globals */ZEND_BEGIN_MODULE_GLOBALS(v8js)  // Thread-local cache whether V8 has been initialized so far  bool v8_initialized;  /* Ini globals */  bool use_date; /* Generate JS Date objects instead of PHP DateTime */  bool use_array_access; /* Convert ArrayAccess, Countable objects to array-like objects */  bool compat_php_exceptions; /* Don't stop JS execution on PHP exception */  // Timer thread globals  std::deque<v8js_timer_ctx *> timer_stack;  std::thread *timer_thread;  std::mutex timer_mutex;  bool timer_stop;  bool fatal_error_abort;ZEND_END_MODULE_GLOBALS(v8js)extern zend_v8js_globals v8js_globals;ZEND_EXTERN_MODULE_GLOBALS(v8js)#define V8JSG(v) ZEND_MODULE_GLOBALS_ACCESSOR(v8js, v)/* *  Process-wide globals * * The zend_v8js_globals structure declared above is created once per thread * (in a ZTS environment).  If a multi-threaded PHP process uses V8 there is * some stuff shared among all of these threads * *  - whether V8 has been initialized at all *  - the V8 backend platform *  - loaded extensions *  - V8 "command line" flags * * In a ZTS-enabled environment access to all of these variables must happen * while holding a mutex lock. */struct _v8js_process_globals {#ifdef ZTS	bool v8_initialized;	std::mutex lock;#endif	HashTable *extensions;	/* V8 command line flags */	char *v8_flags;	v8::Platform *v8_platform;};extern struct _v8js_process_globals v8js_process_globals;/* Register builtin methods into passed object */void v8js_register_methods(v8::Handle<v8::ObjectTemplate>, v8js_ctx *c);#endif	/* PHP_V8JS_MACROS_H *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */
 |