Update to 0.9.5-beta1 release:

- complete support for php 5.1
- even more stability than 0.9.4 release
This commit is contained in:
Alex Dupre 2006-03-15 06:38:12 +00:00
parent 57fc0bd011
commit 868af052d0
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=157132
13 changed files with 4 additions and 1176 deletions

View file

@ -6,8 +6,7 @@
#
PORTNAME= eaccelerator
DISTVERSION= 0.9.4-rc1
PORTREVISION= 2
DISTVERSION= 0.9.5-beta1
CATEGORIES= www
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE_EXTENDED}
MASTER_SITE_SUBDIR= ${PORTNAME}

View file

@ -1,3 +1,3 @@
MD5 (eaccelerator-0.9.4-rc1.tar.bz2) = 5910ba3c3e9c8caa97600e950839f8b2
SHA256 (eaccelerator-0.9.4-rc1.tar.bz2) = 4f20aa2197a0e484bea57a3f6183a172207a65003927c4ecea9449eb6af538ed
SIZE (eaccelerator-0.9.4-rc1.tar.bz2) = 104703
MD5 (eaccelerator-0.9.5-beta1.tar.bz2) = 29f68a5975c1a09dbd72c9e8ddd534a7
SHA256 (eaccelerator-0.9.5-beta1.tar.bz2) = f55781080ca48ba6d907c8101cf188987844a86d776c95b4f12dff2842d3f9d2
SIZE (eaccelerator-0.9.5-beta1.tar.bz2) = 109878

View file

@ -1,16 +0,0 @@
--- content.c.orig Sun Jul 10 10:12:33 2005
+++ content.c Thu Feb 2 09:40:00 2006
@@ -593,10 +593,13 @@ PHP_FUNCTION(eaccelerator_cache_result)
if (zend_eval_string(code, return_value, eval_name TSRMLS_CC) == SUCCESS &&
eaccelerator_content_cache_place != eaccelerator_none) {
+#ifndef ZEND_ENGINE_2_1
+/* No worko on php >= 5.1.0 */
/* clean garbage */
while (EG(garbage_ptr)) {
zval_ptr_dtor(&EG(garbage)[--EG(garbage_ptr)]);
}
+#endif
eaccelerator_put(key, key_len, return_value, ttl, eaccelerator_content_cache_place TSRMLS_CC);
}

View file

@ -1,12 +0,0 @@
--- debug.c.orig Sun Jul 10 10:12:33 2005
+++ debug.c Thu Feb 2 09:40:00 2006
@@ -66,7 +66,8 @@ void ea_debug_init (TSRMLS_D)
void ea_debug_shutdown ()
{
fflush (F_fp);
- fclose (F_fp);
+ if (F_fp != stderr)
+ fclose (F_fp);
F_fp = NULL;
}

View file

@ -1,216 +0,0 @@
--- ea_restore.c.orig Wed Aug 3 20:54:32 2005
+++ ea_restore.c Thu Feb 2 09:40:00 2006
@@ -39,6 +39,9 @@
#include "zend.h"
#include "zend_API.h"
#include "zend_extensions.h"
+#ifdef ZEND_ENGINE_2_1
+#include "zend_vm.h"
+#endif
#ifndef INCOMPLETE_CLASS
# define INCOMPLETE_CLASS "__PHP_Incomplete_Class"
@@ -69,12 +72,16 @@ dtor_func_t get_zend_destroy_property_in
property_dtor = dummy_class_entry.properties_info.pDestructor;
zend_hash_destroy(&dummy_class_entry.default_properties);
- zend_hash_destroy(&dummy_class_entry.properties_info);
- zend_hash_destroy(dummy_class_entry.static_members);
zend_hash_destroy(&dummy_class_entry.function_table);
- FREE_HASHTABLE(dummy_class_entry.static_members);
zend_hash_destroy(&dummy_class_entry.constants_table);
-
+ zend_hash_destroy(&dummy_class_entry.properties_info);
+# ifdef ZEND_ENGINE_2_1
+ zend_hash_destroy(&dummy_class_entry.default_static_members);
+# endif
+# if defined(ZEND_ENGINE_2) && !defined(ZEND_ENGINE_2_1)
+ zend_hash_destroy(dummy_class_entry.static_members);
+ FREE_HASHTABLE(dummy_class_entry.static_members);
+# endif
return property_dtor;
}
#endif
@@ -92,6 +99,9 @@ typedef void (*fixup_bucket_t) (void *TS
static void fixup_property_info(zend_property_info * from TSRMLS_DC)
{
FIXUP(from->name);
+#ifdef ZEND_ENGINE_2_1
+ FIXUP(from->doc_comment);
+#endif
}
#endif
@@ -221,7 +231,12 @@ void fixup_op_array(eaccelerator_op_arra
FIXUP(opline->op2.u.jmp_addr);
break;
}
+# ifdef ZEND_ENGINE_2_1
+ ZEND_VM_SET_OPCODE_HANDLER(opline);
+# else
opline->handler = get_opcode_handler(opline->opcode TSRMLS_CC);
+# endif
+
#endif
}
EAG(compress) = 1;
@@ -234,6 +249,15 @@ void fixup_op_array(eaccelerator_op_arra
FIXUP(from->static_variables);
fixup_zval_hash(from->static_variables);
}
+#ifdef ZEND_ENGINE_2_1
+ if (from->vars != NULL) {
+ zend_uint i;
+ FIXUP(from->vars);
+ for (i = 0; i < from->last_var; i++) {
+ FIXUP(from->vars[i].name);
+ }
+ }
+#endif
FIXUP(from->filename);
#ifdef ZEND_ENGINE_2
FIXUP(from->doc_comment);
@@ -255,6 +279,9 @@ void fixup_class_entry(eaccelerator_clas
FIXUP(from->static_members);
fixup_zval_hash(from->static_members);
}
+# ifdef ZEND_ENGINE_2_1
+ fixup_zval_hash(&from->default_static_members);
+# endif
#else
fixup_zval_hash(&from->default_properties);
#endif
@@ -570,12 +597,12 @@ zend_op_array *restore_op_array(zend_op_
to->T = from->T;
to->brk_cont_array = from->brk_cont_array;
to->last_brk_cont = from->last_brk_cont;
- /*
+
to->current_brk_cont = -1;
to->static_variables = from->static_variables;
- to->start_op = to->opcodes;
+/* to->start_op = to->opcodes; */
to->backpatch_count = 0;
- */
+
to->return_reference = from->return_reference;
to->done_pass_two = 1;
to->filename = from->filename;
@@ -612,6 +639,20 @@ zend_op_array *restore_op_array(zend_op_
#endif
}
+#ifdef ZEND_ENGINE_2_1
+ to->vars = from->vars;
+ to->last_var = from->last_var;
+ to->size_var = 0;
+ if (to->vars) {
+ zend_uint i;
+ to->vars = (zend_compiled_variable*)emalloc(from->last_var*sizeof(zend_compiled_variable));
+ memcpy(to->vars, from->vars, sizeof(zend_compiled_variable) * from->last_var);
+ for (i = 0; i < from->last_var; i ++) {
+ to->vars[i].name = estrndup(from->vars[i].name, from->vars[i].name_len);
+ }
+ }
+#endif
+
/* disable deletion in destroy_op_array */
++EAG(refcount_helper);
to->refcount = &EAG(refcount_helper);
@@ -633,6 +674,12 @@ static zend_property_info *restore_prope
memcpy(to, from, sizeof(zend_property_info));
to->name = emalloc(from->name_length + 1);
memcpy(to->name, from->name, from->name_length + 1);
+#ifdef ZEND_ENGINE_2_1
+ if (from->doc_comment != NULL) {
+ to->doc_comment = emalloc(from->doc_comment_len+1);
+ memcpy(to->doc_comment, from->doc_comment, from->doc_comment_len+1);
+ }
+#endif
return to;
}
#endif
@@ -660,6 +707,12 @@ void restore_class_parent(char *parent,
to->clone = to->parent->clone;
to->__get = to->parent->__get;
to->__set = to->parent->__set;
+# ifdef ZEND_ENGINE_2_1
+ to->__unset = to->parent->__unset;
+ to->__isset = to->parent->__isset;
+ to->serialize_func = to->parent->serialize_func;
+ to->unserialize_func = to->parent->unserialize_func;
+# endif
to->__call = to->parent->__call;
to->create_object = to->parent->create_object;
#else
@@ -708,6 +761,14 @@ void restore_class_methods(zend_class_en
else if (fname_len == sizeof(ZEND_SET_FUNC_NAME) - 1 &&
memcmp(fname_lc, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME)) == 0)
to->__set = f;
+# ifdef ZEND_ENGINE_2_1
+ else if (fname_len == sizeof(ZEND_UNSET_FUNC_NAME) - 1 &&
+ memcmp(fname_lc, ZEND_UNSET_FUNC_NAME, sizeof(ZEND_UNSET_FUNC_NAME)) == 0)
+ to->__unset = f;
+ else if (fname_len == sizeof(ZEND_ISSET_FUNC_NAME) - 1 &&
+ memcmp(fname_lc, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME)) == 0)
+ to->__isset = f;
+# endif
else if (fname_len == sizeof(ZEND_CALL_FUNC_NAME) - 1 &&
memcmp(fname_lc, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME)) == 0)
to->__call = f;
@@ -734,11 +795,10 @@ zend_class_entry *restore_class_entry(ze
#endif
ea_debug_pad(EA_DEBUG TSRMLS_CC);
- ea_debug_printf(EA_DEBUG, "[%d] retore_class_entry: %s\n", getpid(), from->name ? from->name : "(top)");
+ ea_debug_printf(EA_DEBUG, "[%d] restore_class_entry: %s\n", getpid(), from->name ? from->name : "(top)");
#ifdef DEBUG
EAG(xpad)++;
#endif
-
if (to == NULL) {
to = emalloc(sizeof(zend_class_entry));
}
@@ -752,9 +812,6 @@ zend_class_entry *restore_class_entry(ze
*/
#ifdef ZEND_ENGINE_2
to->ce_flags = from->ce_flags;
- /*
- to->static_members = NULL;
- */
to->num_interfaces = from->num_interfaces;
if (to->num_interfaces > 0) {
to->interfaces = (zend_class_entry **) emalloc(sizeof(zend_class_entry *) * to->num_interfaces);
@@ -765,6 +822,7 @@ zend_class_entry *restore_class_entry(ze
}
to->iterator_funcs = from->iterator_funcs;
+ to->create_object = from->create_object;
to->get_iterator = from->get_iterator;
to->interface_gets_implemented = from->interface_gets_implemented;
#endif
@@ -813,16 +871,19 @@ zend_class_entry *restore_class_entry(ze
(restore_bucket_t) restore_property_info TSRMLS_CC);
to->properties_info.pDestructor = properties_info_dtor;
+# ifdef ZEND_ENGINE_2_1
+ /* restore default_static_members */
+ restore_zval_hash(&to->default_static_members, &from->default_static_members);
+ to->default_static_members.pDestructor = ZVAL_PTR_DTOR;
+
+ to->static_members = (from->type == ZEND_INTERNAL_CLASS) ? NULL : &to->default_static_members;
+# else
if (from->static_members != NULL) {
ALLOC_HASHTABLE(to->static_members);
restore_zval_hash(to->static_members, from->static_members);
to->static_members->pDestructor = ZVAL_PTR_DTOR;
- /*
- } else {
- ALLOC_HASHTABLE(to->static_members);
- zend_hash_init_ex(to->static_members, 0, NULL, ZVAL_PTR_DTOR, 0, 0);
- */
}
+# endif
#else
to->refcount = emalloc(sizeof(*to->refcount));
*to->refcount = 1;

View file

@ -1,10 +0,0 @@
--- ea_restore.h.orig Mon Jul 11 19:25:38 2005
+++ ea_restore.h Thu Feb 2 09:40:00 2006
@@ -34,6 +34,7 @@
void fixup_op_array (eaccelerator_op_array * from TSRMLS_DC);
void fixup_class_entry (eaccelerator_class_entry * from TSRMLS_DC);
+void restore_zval(zval * zv TSRMLS_DC);
void restore_class(mm_fc_entry *p TSRMLS_DC);
void restore_function(mm_fc_entry *p TSRMLS_DC);
zend_op_array* restore_op_array(zend_op_array *to, eaccelerator_op_array *from TSRMLS_DC);

View file

@ -1,104 +0,0 @@
--- ea_store.c.orig Mon Jul 11 19:25:38 2005
+++ ea_store.c Thu Feb 2 09:40:00 2006
@@ -82,6 +82,11 @@ static void calc_property_info(zend_prop
EACCELERATOR_ALIGN(EAG(mem));
EAG(mem) += sizeof(zend_property_info);
calc_string(from->name, from->name_length + 1 TSRMLS_CC);
+#ifdef ZEND_ENGINE_2_1
+ if (from->doc_comment != NULL) {
+ calc_string(from->doc_comment, from->doc_comment_len + 1 TSRMLS_CC);
+ }
+#endif
}
/* Calculate the size of a point to a class entry */
@@ -246,6 +251,16 @@ void calc_op_array(zend_op_array * from
EAG(mem) += sizeof(HashTable);
calc_zval_hash(from->static_variables);
}
+#ifdef ZEND_ENGINE_2_1
+ if (from->vars != NULL) {
+ zend_uint i;
+ EACCELERATOR_ALIGN(EAG(mem));
+ EAG(mem) += sizeof(zend_compiled_variable) * from->last_var;
+ for (i = 0; i < from->last_var; i ++) {
+ calc_string(from->vars[i].name, from->vars[i].name_len+1 TSRMLS_CC);
+ }
+ }
+#endif
if (from->filename != NULL)
calc_string(from->filename, strlen(from->filename) + 1 TSRMLS_CC);
#ifdef ZEND_ENGINE_2
@@ -285,6 +300,11 @@ void calc_class_entry(zend_class_entry *
calc_zval_hash(&from->constants_table);
calc_zval_hash(&from->default_properties);
+
+#ifdef ZEND_ENGINE_2_1
+ calc_zval_hash(&from->default_static_members);
+#endif
+
calc_hash(&from->properties_info, (calc_bucket_t) calc_property_info);
if (from->static_members != NULL) {
EACCELERATOR_ALIGN(EAG(mem));
@@ -610,6 +630,10 @@ eaccelerator_op_array *store_op_array(ze
to->uses_globals = from->uses_globals;
#endif
to->static_variables = from->static_variables;
+#ifdef ZEND_ENGINE_2_1
+ to->vars = from->vars;
+ to->last_var = from->last_var;
+#endif
to->return_reference = from->return_reference;
to->filename = from->filename;
@@ -671,8 +695,24 @@ eaccelerator_op_array *store_op_array(ze
EAG(mem) += sizeof(HashTable);
store_zval_hash(to->static_variables, from->static_variables);
}
+#ifdef ZEND_ENGINE_2_1
+ if (from->vars != NULL) {
+ zend_uint i;
+ EACCELERATOR_ALIGN(EAG(mem));
+ to->last_var = from->last_var;
+ to->vars = (zend_compiled_variable*)EAG(mem);
+ EAG(mem) += sizeof(zend_compiled_variable) * from->last_var;
+ memcpy(to->vars, from->vars, sizeof(zend_compiled_variable) * from->last_var);
+ for (i = 0; i < from->last_var; i ++) {
+ to->vars[i].name = store_string(from->vars[i].name, from->vars[i].name_len+1 TSRMLS_CC);
+ }
+ } else {
+ to->last_var = 0;
+ to->vars = NULL;
+ }
+#endif
if (from->filename != NULL) {
- to->filename = store_string(to->filename, strlen(from->filename) + 1 TSRMLS_CC);
+ to->filename = store_string(from->filename, strlen(from->filename) + 1 TSRMLS_CC);
}
#ifdef ZEND_ENGINE_2
to->line_start = from->line_start;
@@ -693,6 +733,12 @@ static zend_property_info *store_propert
EAG(mem) += sizeof(zend_property_info);
memcpy(to, from, sizeof(zend_property_info));
to->name = store_string(from->name, from->name_length + 1 TSRMLS_CC);
+#ifdef ZEND_ENGINE_2_1
+ to->doc_comment_len = from->doc_comment_len;
+ if (from->doc_comment != NULL) {
+ to->doc_comment = store_string(from->doc_comment, from->doc_comment_len + 1 TSRMLS_CC);
+ }
+#endif
return to;
}
#endif
@@ -770,6 +816,10 @@ eaccelerator_class_entry *store_class_en
}
#else
store_zval_hash(&to->default_properties, &from->default_properties);
+#endif
+
+#ifdef ZEND_ENGINE_2_1
+ store_zval_hash(&to->default_static_members, &from->default_static_members);
#endif
store_hash(&to->function_table, &from->function_table, (store_bucket_t) store_op_array);

View file

@ -1,142 +0,0 @@
--- eaccelerator.c.orig Sun Nov 20 18:53:43 2005
+++ eaccelerator.c Thu Feb 2 09:40:00 2006
@@ -110,6 +110,10 @@ extern dtor_func_t properties_info_dtor;
/* saved original functions */
static zend_op_array *(*mm_saved_zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
+#ifdef DEBUG
+static void (*mm_saved_zend_execute)(zend_op_array *op_array TSRMLS_DC);
+#endif
+
/* external declarations */
PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC);
@@ -251,16 +255,16 @@ static void hash_add_mm(mm_cache_entry *
/* check the cache dir */
static int check_cache_dir(char *cache_dir) {
struct stat buf;
- int uid = 0;
- int gid = 0;
-
+// int uid = 0;
+// int gid = 0;
+
if (stat(cache_dir, &buf) == -1) {
ea_debug_error("Cache dir does not exist (could not stat %s)\n", cache_dir);
- return 0;
+ return FAILURE;
}
if (!(buf.st_mode & S_IFDIR)) {
ea_debug_error("%s is not a directory!\n", cache_dir);
- return 0;
+ return FAILURE;
}
#if 0
uid = getuid();
@@ -272,7 +276,7 @@ static int check_cache_dir(char *cache_d
return 0;
}
#endif
- return 1;
+ return SUCCESS;
}
/* Initialise the shared memory */
@@ -326,11 +330,6 @@ static int init_mm(TSRMLS_D) {
eaccelerator_mm_instance->user_hash_cnt = 0;
eaccelerator_mm_instance->last_prune = time(0);
EACCELERATOR_PROTECT();
-
- if (!check_cache_dir(EAG(cache_dir))) {
- return FAILURE;
- }
-
return SUCCESS;
}
@@ -847,7 +846,7 @@ static mm_cache_entry *eaccelerator_stor
q = p->c_head;
while (q != NULL) {
#ifdef ZEND_ENGINE_2
- q->fc = store_class_entry ((zend_class_entry *) q->fc TSRMLS_CC);
+ q->fc = store_class_entry ((zend_class_entry *) q->fc TSRMLS_CC); // hra: exactly the same?!
#else
q->fc = store_class_entry ((zend_class_entry *) q->fc TSRMLS_CC);
#endif
@@ -1131,9 +1130,10 @@ static int eaccelerator_stat(zend_file_h
}
if (zend_is_executing(TSRMLS_C)) {
+ int tryname_length;
strncpy(tryname, zend_get_executed_filename(TSRMLS_C), MAXPATHLEN);
tryname[MAXPATHLEN - 1] = 0;
- int tryname_length = strlen(tryname);
+ tryname_length = strlen(tryname);
while (tryname_length >= 0 && !IS_SLASH(tryname[tryname_length]))
tryname_length--;
@@ -1256,12 +1256,12 @@ ZEND_DLEXPORT zend_op_array* eaccelerato
int nreloads;
time_t compile_time;
int stat_result = 0;
+ struct timeval tv_start;
#ifdef EACCELERATOR_USE_INODE
realname[0] = '\000';
#endif
- struct timeval tv_start;
ea_debug_printf(EA_TEST_PERFORMANCE, "[%d] Enter COMPILE\n",getpid());
ea_debug_start_time(&tv_start);
ea_debug_printf(EA_DEBUG, "[%d] Enter COMPILE\n",getpid());
@@ -1565,18 +1565,20 @@ static void profile_execute(zend_op_arra
for (i=0;i<EAG(profile_level);i++)
ea_debug_put(EA_PROFILE_OPCODES, " ");
- ea_debug_printf(EA_PROFILE_OPCODES, "enter: %s:%s\n", op_array->filename, op_array->function_name);
+ ea_debug_printf(EA_PROFILE_OPCODES, "enter profile_execute: %s:%s\n", op_array->filename, op_array->function_name);
ea_debug_start_time(&tv_start);
EAG(self_time)[EAG(profile_level)] = 0;
EAG(profile_level)++;
+ ea_debug_printf(EA_PROFILE_OPCODES, "About to enter zend_execute...\n");
mm_saved_zend_execute(op_array TSRMLS_CC);
+ ea_debug_printf(EA_PROFILE_OPCODES, "Finished zend_execute...\n");
usec = ea_debug_elapsed_time(&tv_start);
EAG(profile_level)--;
if (EAG(profile_level) > 0)
EAG(self_time)[EAG(profile_level)-1] += usec;
for (i=0;i<EAG(profile_level);i++)
ea_debug_put(EA_PROFILE_OPCODES, " ");
- ea_debug_printf(EA_PROFILE_OPCODES, "leave: %s:%s (%ld,%ld)\n", op_array->filename, op_array->function_name, usec, usec-EAG(self_time)[EAG(profile_level)]);
+ ea_debug_printf(EA_PROFILE_OPCODES, "leave profile_execute: %s:%s (%ld,%ld)\n", op_array->filename, op_array->function_name, usec, usec-EAG(self_time)[EAG(profile_level)]);
}
ZEND_DLEXPORT zend_op_array* profile_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) {
@@ -1593,7 +1595,7 @@ ZEND_DLEXPORT zend_op_array* profile_com
EAG(self_time)[EAG(profile_level)-1] += usec;
for (i=0;i<EAG(profile_level);i++)
ea_debug_put(EA_PROFILE_OPCODES, " ");
- ea_debug_printf(EA_DEBUG, "compile: %s (%ld)\n", file_handle->filename, usec);
+ ea_debug_printf(EA_DEBUG, "zend_op_array compile: %s (%ld)\n", file_handle->filename, usec);
return t;
}
@@ -2023,9 +2025,16 @@ PHP_MINIT_FUNCTION(eaccelerator) {
if (init_mm(TSRMLS_C) == FAILURE) {
zend_error(E_CORE_WARNING,"[%s] Can not create shared memory area", EACCELERATOR_EXTENSION_NAME);
- return FAILURE;
+ /* disable eA */
+ eaccelerator_mm_instance->enabled = 0;
}
-
+#if 0
+ if (!eaccelerator_scripts_shm_only && check_cache_dir(EAG(cache_dir)) == FAILURE) {
+ zend_error(E_CORE_WARNING,"[%s] Can not init the cache directory", EACCELERATOR_EXTENSION_NAME);
+ /* disable eA */
+ eaccelerator_mm_instance->enabled = 0;
+ }
+#endif
mm_saved_zend_compile_file = zend_compile_file;
#ifdef DEBUG

View file

@ -1,124 +0,0 @@
--- eaccelerator.h.orig Mon Jul 11 19:25:38 2005
+++ eaccelerator.h Thu Feb 2 09:40:00 2006
@@ -44,6 +44,10 @@
# endif
#endif
+#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 1
+# define ZEND_ENGINE_2_1
+#endif
+
/* fixes compile errors on php5.1 */
#ifdef STR_EMPTY_ALLOC
#define empty_string STR_EMPTY_ALLOC()
@@ -166,12 +170,14 @@
#define MAX_DUP_STR_LEN 256
+/******************************************************************************/
+
+#endif /* HAVE_EACCELERATOR_STANDALONE_LOADER */
+
#ifndef offsetof
# define offsetof(str,fld) ((size_t)&(((str*)NULL)->fld))
#endif
-/******************************************************************************/
-
typedef struct _eaccelerator_op_array {
zend_uchar type;
#ifdef ZEND_ENGINE_2
@@ -197,6 +203,10 @@ typedef struct _eaccelerator_op_array {
#endif
zend_op *opcodes;
zend_uint last;
+#ifdef ZEND_ENGINE_2_1
+ zend_compiled_variable *vars;
+ int last_var;
+#endif
zend_uint T;
zend_brk_cont_element *brk_cont_array;
zend_uint last_brk_cont;
@@ -218,24 +228,29 @@ typedef struct _eaccelerator_class_entry
char type;
char *name;
char *name_lc;
- uint name_length;
+ zend_uint name_length;
char *parent;
HashTable function_table;
HashTable default_properties;
#ifdef ZEND_ENGINE_2
- zend_uint ce_flags;
- HashTable *static_members;
HashTable properties_info;
+# ifdef ZEND_ENGINE_2_1
+ HashTable default_static_members;
+# endif
+ HashTable *static_members;
HashTable constants_table;
+ zend_uint ce_flags;
zend_uint num_interfaces;
+
char **interfaces;
zend_class_iterator_funcs iterator_funcs;
- zend_object_value (*create_object) (zend_class_entry *
- class_type TSRMLS_DC);
- zend_object_iterator *(*get_iterator) (zend_class_entry * ce,
- zval * object TSRMLS_DC);
- int (*interface_gets_implemented) (zend_class_entry * iface, zend_class_entry * class_type TSRMLS_DC); /* a class implements this interface */
+ /* handlers */
+ zend_object_value (*create_object) (zend_class_entry *class_type TSRMLS_DC);
+ zend_object_iterator *(*get_iterator) (zend_class_entry *ce, zval *object TSRMLS_DC);
+ int (*interface_gets_implemented) (zend_class_entry *iface, zend_class_entry *class_type TSRMLS_DC); /* a class implements this interface */
+
+ /* hra: serializer callbacks may need to be added here in the future for php 5.1 */
char *filename;
zend_uint line_start;
@@ -255,6 +270,8 @@ typedef struct _mm_fc_entry {
char htabkey[1]; /* must be last element */
} mm_fc_entry;
+#ifndef HAVE_EACCELERATOR_STANDALONE_LOADER
+
/*
* A mm_cache_entry is a bucket for one PHP script file.
* Nested functions and classes which defined in the file goes
@@ -381,17 +398,13 @@ void *eaccelerator_malloc2 (size_t size
unsigned int eaccelerator_crc32 (const char *p, size_t n);
int eaccelerator_md5 (char *s, const char *prefix, const char *key TSRMLS_DC);
-void restore_zval (zval * TSRMLS_DC);
void calc_zval (zval * z TSRMLS_DC);
void store_zval (zval * z TSRMLS_DC);
void fixup_zval (zval * z TSRMLS_DC);
+void restore_zval (zval * TSRMLS_DC);
unsigned int hash_mm(const char *data, int len);
-# ifdef WITH_EACCELERATOR_EXECUTOR
-ZEND_DLEXPORT void eaccelerator_execute (zend_op_array * op_array TSRMLS_DC);
-# endif
-
# ifdef WITH_EACCELERATOR_OPTIMIZER
void eaccelerator_optimize (zend_op_array * op_array);
# endif
@@ -399,15 +412,13 @@ void eaccelerator_optimize (zend_op_arra
#ifdef WITH_EACCELERATOR_ENCODER
PHP_FUNCTION (eaccelerator_encode);
#endif
-#endif /* HAVE_EACCELERATOR_LOADER_STANDALONE */
+#endif /* HAVE_EACCELERATOR_STANDALONE_LOADER */
#ifdef ZTS
# define EAG(v) TSRMG(eaccelerator_globals_id, zend_eaccelerator_globals*, v)
#else
# define EAG(v) (eaccelerator_globals.v)
#endif
-
-#define MMCG(v) EAG(v)
/*
* conditional filter

View file

@ -1,13 +0,0 @@
--- loader.c.orig Wed Aug 3 20:54:32 2005
+++ loader.c Thu Feb 2 09:40:00 2006
@@ -39,6 +39,10 @@
#include "php.h"
#include "ea_restore.h"
#include <math.h>
+
+#ifdef HAVE_EACCELERATOR_STANDALONE_LOADER
+zend_extension* ZendOptimizer = NULL;
+#endif
typedef struct loader_data {
long version;

View file

@ -1,113 +0,0 @@
--- opcodes.c.orig Mon May 16 11:56:42 2005
+++ opcodes.c Thu Feb 2 09:40:00 2006
@@ -43,11 +43,7 @@
# define OP1_VAR_2 OP1_VAR
#endif
-#ifdef ZEND_ENGINE_2
-# define LAST_OPCODE 149
-#else
-# define LAST_OPCODE 106
-#endif
+#define LAST_OPCODE (sizeof(opcodes)/sizeof(opcodes[0]))
static const opcode_dsc opcodes[] = {
OPDEF("NOP", EXT_UNUSED | OP1_UNUSED | OP2_UNUSED | RES_UNUSED), /* 0 */
@@ -158,16 +154,20 @@ static const opcode_dsc opcodes[] = {
OPDEF("INIT_ARRAY", EXT_BIT | OP1_STD | OP2_STD | RES_TMP), /* 71 */
OPDEF("ADD_ARRAY_ELEMENT", EXT_BIT | OP1_STD | OP2_STD | RES_TMP), /* 72 */
OPDEF("INCLUDE_OR_EVAL", EXT_UNUSED | OP1_STD | OP2_INCLUDE| RES_VAR), /* 73 */
-#ifdef ZEND_ENGINE_2
+#ifdef ZEND_ENGINE_2_1
+ /* php 5.1 and up */
OPDEF("UNSET_VAR", EXT_UNUSED | OP1_STD | OP2_FETCH | RES_UNUSED), /* 74 */
- OPDEF("UNSET_DIM_OBJ", EXT_STD | OP1_STD | OP2_STD | RES_UNUSED), /* 75 */
- OPDEF("ISSET_ISEMPTY", EXT_ISSET | OP1_VAR | OP2_UNUSED | RES_TMP), /* 76 */
+ OPDEF("UNSET_DIM", EXT_STD | OP1_STD | OP2_STD | RES_UNUSED), /* 75 */
+ OPDEF("UNSET_OBJ", EXT_STD | OP1_STD | OP2_STD | RES_UNUSED), /* 76 */
+ OPDEF("FE_RESET", EXT_BIT | OP1_STD | OP2_OPLINE | RES_VAR), /* 77 */
#else
+ /* <= php 5.0 */
+ /* though there is no ISSET_ISEMPTY in php 5.0 it's better to leave it here i guess */
OPDEF("UNSET_VAR", EXT_UNUSED | OP1_STD | OP2_UNUSED | RES_UNUSED), /* 74 */
OPDEF("UNSET_DIM_OBJ", EXT_UNUSED | OP1_VAR | OP2_STD | RES_UNUSED), /* 75 */
OPDEF("ISSET_ISEMPTY", EXT_UNUSED | OP1_VAR | OP2_ISSET | RES_TMP), /* 76 */
-#endif
OPDEF("FE_RESET", EXT_BIT | OP1_STD | OP2_UNUSED | RES_VAR), /* 77 */
+#endif
OPDEF("FE_FETCH", EXT_FE | OP1_STD | OP2_OPLINE | RES_TMP), /* 78 */
OPDEF("EXIT", EXT_UNUSED | OP1_STD | OP2_UNUSED | RES_UNUSED), /* 79 */
OPDEF("FETCH_R", EXT_UNUSED | OP1_STD | OP2_FETCH | RES_VAR), /* 80 */
@@ -234,7 +234,7 @@ static const opcode_dsc opcodes[] = {
OPDEF("POST_INC_OBJ", EXT_UNUSED | OP1_STD | OP2_STD | RES_TMP), /* 134 */
OPDEF("POST_DEC_OBJ", EXT_UNUSED | OP1_STD | OP2_STD | RES_TMP), /* 135 */
OPDEF("ASSIGN_OBJ", EXT_UNUSED | OP1_STD | OP2_STD | RES_VAR), /* 136 */
- OPDEF("OP_DATA", EXT_UNUSED | OP1_STD | OP2_STD | RES_UNUSED), /* 137 */
+ OPDEF("OP_DATA", EXT_UNUSED | OP1_STD | OP2_STD | RES_STD), /* 137 */
OPDEF("INSTANCEOF", EXT_UNUSED | OP1_STD | OP2_CLASS | RES_TMP), /* 138 */
OPDEF("DECLARE_CLASS", EXT_UNUSED | OP1_STD | OP2_STD | RES_CLASS), /* 139 */
OPDEF("DECLARE_INHERITED_CLASS", EXT_CLASS | OP1_STD | OP2_STD | RES_CLASS), /* 140 */
@@ -245,14 +245,17 @@ static const opcode_dsc opcodes[] = {
OPDEF("VERIFY_INSTANCEOF", EXT_UNUSED | OP1_CLASS | OP2_STD | RES_UNUSED), /* 145 */
OPDEF("VERIFY_ABSTRACT_CLASS", EXT_UNUSED | OP1_CLASS | OP2_UNUSED | RES_UNUSED), /* 146 */
OPDEF("ASSIGN_DIM", EXT_UNUSED | OP1_STD | OP2_STD | RES_VAR), /* 147 */
-
OPDEF("ISSET_ISEMPTY_PROP_OBJ", EXT_ISSET | OP1_STD | OP2_STD | RES_TMP), /* 148 */
OPDEF("HANDLE_EXCEPTION", EXT_STD | OP1_UNUSED | OP2_UNUSED | RES_STD) /* 149 */
+# ifdef ZEND_ENGINE_2_1
+ ,
+ OPDEF("USER_OPCODE", EXT_STD | OP1_UNUSED | OP2_UNUSED | RES_STD) /* 150 */
+# endif
#endif
};
const opcode_dsc* get_opcode_dsc(unsigned int n) {
- if (n <= LAST_OPCODE) {
+ if (n < LAST_OPCODE) {
return &opcodes[n];
} else {
return NULL;
@@ -261,17 +264,17 @@ const opcode_dsc* get_opcode_dsc(unsigne
#endif
#ifdef ZEND_ENGINE_2
-static opcode_handler_t eaccelerator_opcode_handlers[LAST_OPCODE+1];
+static opcode_handler_t eaccelerator_opcode_handlers[LAST_OPCODE];
static int handlers_retrived = 0;
ZEND_DLEXPORT void retrive_opcode_handlers_handler(zend_op_array *op_array) {
unsigned char i;
efree(op_array->opcodes);
- op_array->opcodes = (zend_op*)emalloc(sizeof(zend_op)*(LAST_OPCODE+1));
- op_array->last = LAST_OPCODE+1;
- op_array->size = LAST_OPCODE+1;
+ op_array->opcodes = (zend_op*)emalloc(sizeof(zend_op)*(LAST_OPCODE));
+ op_array->last = LAST_OPCODE;
+ op_array->size = LAST_OPCODE;
op_array->T = 0;
- for (i=0; i<=LAST_OPCODE; i++) {
+ for (i=0; i<LAST_OPCODE; i++) {
op_array->opcodes[i].opcode = i;
op_array->opcodes[i].op1.op_type = IS_UNUSED;
op_array->opcodes[i].op1.u.opline_num = i;
@@ -298,9 +301,9 @@ static int retrive_opcode_handlers(TSRML
ext->op_array_handler = retrive_opcode_handlers_handler;
p = compile_string(&str, empty_string TSRMLS_CC);
ext->op_array_handler = old;
- if (p != NULL && p->last == LAST_OPCODE+1) {
+ if (p != NULL && p->last == (LAST_OPCODE - 1)) {
int i = 0;
- while (i <= LAST_OPCODE) {
+ while (i < LAST_OPCODE) {
eaccelerator_opcode_handlers[p->opcodes[i].opcode] = p->opcodes[i].handler;
++i;
}
@@ -318,7 +321,7 @@ opcode_handler_t get_opcode_handler(zend
return NULL;
}
}
- if (opcode <= LAST_OPCODE) {
+ if (opcode < LAST_OPCODE) {
return eaccelerator_opcode_handlers[opcode];
} else {
return (opcode_handler_t) NULL;

View file

@ -1,217 +0,0 @@
--- optimize.c.orig Thu Nov 17 21:25:11 2005
+++ optimize.c Thu Feb 2 09:40:00 2006
@@ -64,7 +64,6 @@ typedef struct _BBlink {
struct _BBlink* next;
} BBlink;
-#if 0
static void dump_bb(BB* bb, zend_op_array *op_array) {
BB* p = bb;
BBlink *q;
@@ -130,7 +129,45 @@ static void dump_bb(BB* bb, zend_op_arra
zend_printf("</pre><hr>\n");
fflush(stdout);
}
-#endif
+
+static void dump_array(int nb,void *pos,char type)
+{ int j;
+
+ switch(type) {
+ case 'i': {
+ int *ptr=pos;
+ for (j=0;j<nb;j++) {
+ zend_printf("%d:%6d ",j,*ptr);
+ ptr++;
+ }
+ }
+ break;
+ case 'x': {
+ int *ptr=pos;
+ for (j=0;j<nb;j++) {
+ zend_printf("%d:%x ",j,*ptr);
+ ptr++;
+ }
+ }
+ break;
+ case 'c': {
+ unsigned char *ptr=pos;
+ for (j=0;j<nb;j++) {
+/* if (*ptr>=32 && *ptr<128) zend_printf("%d:%c",j,*ptr);
+ else if (*ptr>=128) zend_printf("%d:%2x",j,*ptr);
+ else if (*ptr<16) zend_printf("%d:&%1x",j,*ptr);
+ else zend_printf("%d:$%1x",j,(*ptr)-16); */
+ zend_printf("%d:%1x ",j,*ptr);
+ ptr++;
+ }
+ }
+ break;
+ default:
+ for (j=0;j<nb;j++)
+ zend_printf("# ");
+ }
+ zend_printf("<br>\n");
+}
#define SET_TO_NOP(op) \
(op)->opcode = ZEND_NOP; \
@@ -250,14 +287,27 @@ static void compute_live_var(BB* bb, zen
}
break;
case ZEND_UNSET_VAR:
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_UNSET_DIM_OBJ:
end->result.op_type = IS_UNUSED;
break;
+#else
+ case ZEND_UNSET_DIM:
+ case ZEND_UNSET_OBJ:
+ end->result.op_type = IS_UNUSED;
+ break;
+#endif
case ZEND_RECV:
case ZEND_RECV_INIT:
/*case ZEND_ADD_ARRAY_ELEMENT:*/
case ZEND_INCLUDE_OR_EVAL:
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_JMP_NO_CTOR:
+#else
+ case ZEND_NEW:
+#endif
case ZEND_FE_FETCH:
#ifdef ZEND_ENGINE_2
case ZEND_ASSIGN_DIM:
@@ -1279,7 +1329,12 @@ jmp_nz_ex:
goto jmp_nz;
}
goto jmp_2;
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_JMP_NO_CTOR:
+#else
+ case ZEND_NEW:
+#endif
case ZEND_FE_FETCH:
jmp_2:
while (p->jmp_2->len == 1 && p->jmp_2->start->opcode == ZEND_JMP) {
@@ -1714,6 +1769,7 @@ static void optimize_bb(BB* bb, zend_op_
}
} else
#endif
+
if ((op->opcode == ZEND_ADD ||
op->opcode == ZEND_SUB ||
op->opcode == ZEND_MUL ||
@@ -2443,7 +2499,13 @@ else if (prev != NULL &&
op->opcode == ZEND_DO_FCALL_BY_NAME ||
op->opcode == ZEND_POST_INC ||
op->opcode == ZEND_POST_DEC ||
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
op->opcode == ZEND_UNSET_DIM_OBJ ||
+#else
+ op->opcode == ZEND_UNSET_DIM ||
+ op->opcode == ZEND_UNSET_OBJ ||
+#endif
op->opcode == ZEND_INCLUDE_OR_EVAL
#ifdef ZEND_ENGINE_2
|| op->opcode == ZEND_ASSIGN_DIM
@@ -2721,7 +2783,13 @@ static int build_cfg(zend_op_array *op_a
case ZEND_JMPNZ:
case ZEND_JMPZ_EX:
case ZEND_JMPNZ_EX:
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_JMP_NO_CTOR:
+#else
+ case ZEND_NEW:
+ case ZEND_FE_RESET:
+#endif
case ZEND_FE_FETCH:
bb[line_num+1].start = op+1;
bb[op->op2.u.opline_num].start = &op_array->opcodes[op->op2.u.opline_num];
@@ -2840,9 +2908,19 @@ cont_failed:
break;
#endif
case ZEND_UNSET_VAR:
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_UNSET_DIM_OBJ:
op->result.op_type = IS_UNUSED;
break;
+#else
+ case ZEND_UNSET_DIM:
+ op->result.op_type = IS_UNUSED;
+ break;
+ case ZEND_UNSET_OBJ:
+ op->result.op_type = IS_UNUSED;
+ break;
+#endif
default:
break;
}
@@ -2894,7 +2972,13 @@ cont_failed:
case ZEND_JMPNZ:
case ZEND_JMPZ_EX:
case ZEND_JMPNZ_EX:
+#ifndef ZEND_ENGINE_2_1
+/* Pre-PHP 5.1 only */
case ZEND_JMP_NO_CTOR:
+#else
+ case ZEND_NEW:
+ case ZEND_FE_RESET:
+#endif
case ZEND_FE_FETCH:
p->jmp_2 = &bb[op->op2.u.opline_num];
p->follow = &bb[line_num];
@@ -3109,6 +3193,7 @@ void reassign_registers(zend_op_array *o
while (start < op) {
--op;
+ /* zend_printf("op=%d\n", op-op_array->opcodes); */
#ifdef ZEND_ENGINE_2
op_data = NULL;
#else
@@ -3151,20 +3236,6 @@ void reassign_registers(zend_op_array *o
GET_REG(r);
op->extended_value = VAR_VAL(assigned[r]);
}
- if (op->opcode == ZEND_OP_DATA) {
- op_data = op;
- --op;
- if (op->op1.op_type == IS_VAR || op->op1.op_type == IS_TMP_VAR) {
- int r = VAR_NUM(op->op1.u.var);
- GET_REG(r);
- op->op1.u.var = VAR_VAL(assigned[r]);
- }
- if (op->op2.op_type == IS_VAR || op->op2.op_type == IS_TMP_VAR) {
- int r = VAR_NUM(op->op2.u.var);
- GET_REG(r);
- op->op2.u.var = VAR_VAL(assigned[r]);
- }
- }
#endif
if (op->result.op_type == IS_VAR ||
op->result.op_type == IS_TMP_VAR) {
@@ -3192,11 +3263,6 @@ void reassign_registers(zend_op_array *o
}
}
}
-#ifdef ZEND_ENGINE_2
- if (op_data != NULL && op_data->op2.op_type == IS_VAR) {
- FREE_REG(VAR_NUM(op_data->op2.u.var));
- }
-#endif
}
}
p = p->next;
@@ -3279,6 +3345,7 @@ void eaccelerator_optimize(zend_op_array
/* Store Optimized Code */
emit_cfg(op_array, bb);
reassign_registers(op_array, bb, global);
+ /* dump_bb(bb, op_array); */
free_alloca(global);
}

View file

@ -1,204 +0,0 @@
--- webui.c.orig Sun Jul 10 10:12:33 2005
+++ webui.c Thu Feb 2 09:40:00 2006
@@ -263,7 +263,7 @@ static void dump_zval (zval * v, int com
ZEND_PUTS ("constant('");
goto string_dump;
case IS_CONSTANT_ARRAY:
- ZEND_PUTS ("constatnt_array(");
+ ZEND_PUTS ("constant_array(");
goto array_dump;
default:
zend_printf ("unknown(%d)", v->type);
@@ -271,21 +271,26 @@ static void dump_zval (zval * v, int com
}
static const char *color_list[] = {
- "#FF0000",
- "#00FF00",
- "#0000FF",
- "#FFFF00",
- "#00FFFF",
- "#FF00FF",
- "#800000",
- "#008000",
- "#000080",
- "#808000",
- "#008080",
- "#800080"
+ /* color from irc */
+ /* 0 // "#ffffff", white */
+ /* 1 // "#000000", black */
+ /* 4 */ "#ff0000", /* light red */
+ /* 7 */ "#fc7f00", /* orange */
+ /* 6 */ "#9c009c", /* magenta */
+ /* 5 */ "#7f0000", /* red */
+ /* 9 */ "#00fc00", /* light green (lime) */
+ /* 10 */ "#009393", /* cyan */
+ /* 12 */ "#0000fc", /* light blue */
+ /* 13 */ "#ff00ff", /* light magenta (pink) */
+ /* 2 */ "#00007f", /* blue */
+ /* 3 */ "#009300", /* green */
+ /* 8 // "#ffff00", yellow */
+ /* 11 // "#00ffff", light cyan (aqua) */
+ /* 14 */ "#7f7f7f", /* grey */
+ /* 15 */ "#d2d2d2" /* light grey (silver) */
};
-static char const *color (int num)
+static const char *color (int num)
{
return color_list[num % (sizeof (color_list) / sizeof (char *))];
}
@@ -322,6 +327,11 @@ static void print_file_line (char *p, in
while (line > 0 && *p) {
if (*p == '\n') {
line--;
+ } else if (*p == '\r') {
+ line--;
+ if (p[1] == '\n') {
+ p++;
+ }
} else if (line == 1) {
if (*p == '<')
zend_printf ("&lt;");
@@ -343,6 +353,9 @@ static void dump_op_array (eaccelerator_
unsigned last_line = 0;
#ifdef ZEND_ENGINE_2
+#ifdef ZEND_ENGINE_2_1
+ zend_printf ("last_var = %u, ", p->last_var);
+#endif
zend_printf ("T = %u, size = %u\n, brk_count = %u, file = %s<br>\n",
p->T, p->last, p->last_brk_cont, p->filename);
#else
@@ -367,9 +380,25 @@ static void dump_op_array (eaccelerator_
ZEND_PUTS ("&nbsp;</td></tr>\n");
q = q->pListNext;
}
- ZEND_PUTS ("<tbody></table><br>\n");
+ ZEND_PUTS ("</tbody></table><br>\n");
}
-
+#ifdef ZEND_ENGINE_2_1
+ if (p->last_var) {
+ int i;
+
+ ZEND_PUTS("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"600\" bgcolor=\"#000000\" align=\"center\" style=\"table-layout:fixed\">\n");
+ ZEND_PUTS("<thead valign=\"middle\" bgcolor=\"#9999cc\"><tr><th width=\"200\">Compiled variable</th><th width=\"200\">Len</th><th width=\"200\">Hash</th></tr></thead>\n");
+ ZEND_PUTS("<tbody valign=\"top\" bgcolor=\"#cccccc\" style=\"word-break:break-all\">\n");
+
+ for (i = 0; i < p->last_var; i ++) {
+ zend_printf ("<tr><td bgcolor=\"#ccccff\">$%s&nbsp;</td>", p->vars[i].name);
+ zend_printf ("<td bgcolor=\"#ccccff\">%u&nbsp;</td>", p->vars[i].name_len);
+ zend_printf ("<td bgcolor=\"#ccccff\">%u&nbsp;</td></tr>\n", p->vars[i].hash_value);
+ }
+ ZEND_PUTS ("</tbody></table><br>\n");
+ }
+#endif
+
if (p->opcodes) {
int n = 0;
opline = p->opcodes;
@@ -377,20 +406,20 @@ static void dump_op_array (eaccelerator_
filebuf = get_file_contents (p->filename);
- ZEND_PUTS
- ("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"900\" bgcolor=\"#000000\" align=\"center\" style=\"table-layout:fixed\">\n");
- ZEND_PUTS
- ("<thead valign=\"middle\" bgcolor=\"#9999cc\"><tr><th width=\"40\">N</th><th width=\"160\">OPCODE</th><th width=\"160\">EXTENDED_VALUE</th><th width=\"220\">OP1</th><th width=\"220\">OP2</th><th width=\"80\">RESULT</th></tr></thead>\n");
- ZEND_PUTS
- ("<tbody valign=\"top\" bgcolor=\"#cccccc\" style=\"word-break:break-all; font-size: x-small\">\n");
+ ZEND_PUTS("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"900\" bgcolor=\"#000000\" align=\"center\" style=\"table-layout:fixed\">\n");
+ ZEND_PUTS("<thead valign=\"middle\" bgcolor=\"#9999cc\"><tr><th width=\"40\">N</th><th width=\"160\">OPCODE</th><th width=\"160\">EXTENDED_VALUE</th><th width=\"220\">OP1</th><th width=\"220\">OP2</th><th width=\"80\">RESULT</th></tr></thead>\n");
+ ZEND_PUTS("<tbody valign=\"top\" bgcolor=\"#cccccc\" style=\"word-break:break-all; font-size: x-small\">\n");
+
for (; opline < end; opline++) {
const opcode_dsc *op = get_opcode_dsc (opline->opcode);
- while (last_line < opline->lineno) {
- last_line++;
- zend_printf
- ("<tr><td colspan=6 bgcolor=black><pre><font color=#80ff80>");
- print_file_line (filebuf, last_line);
+ if (last_line < opline->lineno) {
+ zend_printf("<tr><td colspan=6 bgcolor=black><pre><font color=#80ff80>");
+ while (last_line < opline->lineno) {
+ last_line++;
+ print_file_line(filebuf, last_line);
+ ZEND_PUTS("\n");
+ }
zend_printf ("</font></pre></td></tr>\n");
}
@@ -459,6 +488,7 @@ static void dump_op_array (eaccelerator_
} else {
ZEND_PUTS ("<td>&nbsp; </td>");
}
+#ifndef ZEND_ENGINE_2_1
} else if (opline->opcode == ZEND_UNSET_DIM_OBJ) {
if (opline->extended_value == ZEND_UNSET_DIM) {
ZEND_PUTS ("<td>ZEND_UNSET_DIM </td>");
@@ -468,6 +498,7 @@ static void dump_op_array (eaccelerator_
ZEND_PUTS ("<td>&nbsp; </td>");
}
#endif
+#endif
} else if (opline->extended_value != 0) {
zend_printf ("<td>%ld </td>", opline->extended_value);
} else {
@@ -479,7 +510,13 @@ static void dump_op_array (eaccelerator_
n, opline->opcode, opline->extended_value);
op = get_opcode_dsc (0);
}
-
+#ifdef ZEND_ENGINE_2_1
+ if (opline->op1.op_type == IS_CV) {
+ zend_printf("<td><font color=%s>$cv%u(%s)</font> </td>",
+ color (opline->op1.u.var), opline->op1.u.var,
+ p->vars[opline->op1.u.var].name);
+ } else
+#endif
if ((op->ops & OP1_MASK) == OP1_OPLINE) {
zend_printf
("<td><font color=%s>opline(%d)</font> </td>",
@@ -586,7 +623,13 @@ static void dump_op_array (eaccelerator_
("<td>UNKNOWN NODE %d </td>", opline->op1.op_type);
}
}
-
+#ifdef ZEND_ENGINE_2_1
+ if (opline->op2.op_type == IS_CV) {
+ zend_printf("<td><font color=%s>$cv%u(%s)</font> </td>",
+ color (opline->op2.u.var), opline->op2.u.var,
+ p->vars[opline->op2.u.var].name);
+ } else
+#endif
if ((op->ops & OP2_MASK) == OP2_OPLINE) {
zend_printf
("<td><font color=%s>opline(%d)</font> </td>",
@@ -674,7 +717,14 @@ static void dump_op_array (eaccelerator_
("<td>UNKNOWN NODE %d </td>", opline->op2.op_type);
}
}
-
+#ifdef ZEND_ENGINE_2_1
+ if (opline->result.op_type == IS_CV) {
+ zend_printf("<td><font color=%s>$cv%u(%s)</font> </td>",
+ color (opline->result.u.var), opline->result.u.var,
+ p->vars[opline->result.u.var].name);
+ } else
+#endif
+
switch (op->ops & RES_MASK) {
case RES_STD:
if (opline->result.op_type == IS_CONST) {
@@ -1833,7 +1883,7 @@ PHP_FUNCTION (eaccelerator)
}
{
- char *s = php_get_uname ();
+ char *s = php_get_uname ('a');
zend_printf ("<nobr>%s</nobr>\n", s);
efree (s);
}