Attached is a patch that exposes zend_execute_data in the executor globals, this
data is useful for lowerlevel access to the Zend scripting engine, especially when
accessing data directly out of the OP structures.
-Sterling
Index: zend_execute.c
===================================================================
RCS file: /repository/Zend/zend_execute.c,v
retrieving revision 1.295
diff -u -r1.295 zend_execute.c
--- zend_execute.c 4 May 2002 17:29:01 -0000 1.295
+++ zend_execute.c 14 May 2002 16:00:21 -0000
@@ -990,24 +990,13 @@
EX(opline)++; \
continue;
-typedef struct _object_info {
- zval *ptr;
-} object_info;
-
-typedef struct _zend_execute_data {
- zend_op *opline;
- zend_function_state function_state;
- zend_function *fbc; /* Function Being Called */
- object_info object;
- temp_variable *Ts;
- zend_bool original_in_execution;
-} zend_execute_data;
-
#define EX(element) execute_data.element
ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)
{
zend_execute_data execute_data;
+
+ EG(execute_data_ptr) = &execute_data;
/* Initialize execute_data */
EX(fbc) = NULL;
Index: zend_execute.h
===================================================================
RCS file: /repository/Zend/zend_execute.h,v
retrieving revision 1.42
diff -u -r1.42 zend_execute.h
--- zend_execute.h 6 Jan 2002 15:21:09 -0000 1.42
+++ zend_execute.h 14 May 2002 16:00:21 -0000
@@ -25,28 +25,7 @@
#include "zend_hash.h"
#include "zend_variables.h"
#include "zend_operators.h"
-
-typedef union _temp_variable {
- zval tmp_var;
- struct {
- zval **ptr_ptr;
- zval *ptr;
- } var;
- struct {
- zval tmp_var; /* a dummy */
-
- union {
- struct {
- zval *str;
- int offset;
- } str_offset;
- zend_property_reference overloaded_element;
- } data;
-
- unsigned char type;
- } EA;
-} temp_variable;
-
+#include "zend_execute_globals.h"
ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
Index: zend_globals.h
===================================================================
RCS file: /repository/Zend/zend_globals.h,v
retrieving revision 1.83
diff -u -r1.83 zend_globals.h
--- zend_globals.h 8 May 2002 12:29:51 -0000 1.83
+++ zend_globals.h 14 May 2002 16:00:21 -0000
@@ -31,6 +31,7 @@
#include "zend_hash.h"
#include "zend_llist.h"
#include "zend_fast_cache.h"
+#include "zend_execute_globals.h"
#ifdef ZEND_MULTIBYTE
#include "zend_multibyte.h"
@@ -151,6 +152,8 @@
zend_op **opline_ptr;
+ zend_execute_data *execute_data_ptr;
+
HashTable *active_symbol_table;
HashTable symbol_table; /* main symbol table */
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <[EMAIL PROTECTED]> |
| Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_EXECUTE_GLOBALS_H
#define ZEND_EXECUTE_GLOBALS_H
#include "zend_compile.h"
#include "zend_hash.h"
#include "zend_variables.h"
#include "zend_operators.h"
typedef union _temp_variable {
zval tmp_var;
struct {
zval **ptr_ptr;
zval *ptr;
} var;
struct {
zval tmp_var; /* a dummy */
union {
struct {
zval *str;
int offset;
} str_offset;
zend_property_reference overloaded_element;
} data;
unsigned char type;
} EA;
} temp_variable;
typedef struct _object_info {
zval *ptr;
} object_info;
typedef struct _zend_execute_data {
zend_op *opline;
zend_function_state function_state;
zend_function *fbc; /* Function Being Called */
object_info object;
temp_variable *Ts;
zend_bool original_in_execution;
} zend_execute_data;
#endif
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php