summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TSRM/LICENSE26
-rw-r--r--TSRM/Makefile.am6
-rw-r--r--TSRM/TODO2
-rw-r--r--TSRM/TSRM.c588
-rw-r--r--TSRM/TSRM.dsp186
-rw-r--r--TSRM/TSRM.h143
-rw-r--r--TSRM/acconfig.h1
-rw-r--r--TSRM/acinclude.m45
-rw-r--r--TSRM/build.mk43
-rwxr-xr-xTSRM/buildconf33
-rw-r--r--TSRM/configure.in31
-rw-r--r--TSRM/readdir.h44
-rw-r--r--TSRM/threads.m4160
-rw-r--r--TSRM/tsrm.m4124
-rw-r--r--TSRM/tsrm_config.w32.h15
-rw-r--r--TSRM/tsrm_config_common.h58
-rw-r--r--TSRM/tsrm_strtok_r.c63
-rw-r--r--TSRM/tsrm_strtok_r.h6
-rw-r--r--TSRM/tsrm_virtual_cwd.c773
-rw-r--r--TSRM/tsrm_virtual_cwd.h221
-rw-r--r--TSRM/tsrm_win32.c359
-rw-r--r--TSRM/tsrm_win32.h107
-rw-r--r--Zend/FlexLexer.h186
-rw-r--r--Zend/LICENSE56
-rw-r--r--Zend/Makefile.am49
-rw-r--r--Zend/RFCs/001.txt136
-rw-r--r--Zend/RFCs/002.txt169
-rw-r--r--Zend/RFCs/003.txt72
-rw-r--r--Zend/ZEND_CHANGES256
-rw-r--r--Zend/Zend.dsp506
-rw-r--r--Zend/Zend.m4202
-rw-r--r--Zend/ZendCore.dep258
-rw-r--r--Zend/ZendTS.dsp659
-rw-r--r--Zend/acconfig.h76
-rw-r--r--Zend/acinclude.m447
-rw-r--r--Zend/build.mk43
-rwxr-xr-xZend/buildconf33
-rw-r--r--Zend/configure.in45
-rw-r--r--Zend/flex.skl1628
-rw-r--r--Zend/zend.c858
-rw-r--r--Zend/zend.h560
-rw-r--r--Zend/zend.icobin1382 -> 0 bytes
-rw-r--r--Zend/zend_API.c1400
-rw-r--r--Zend/zend_API.h428
-rw-r--r--Zend/zend_alloc.c769
-rw-r--r--Zend/zend_alloc.h141
-rw-r--r--Zend/zend_builtin_functions.c1154
-rw-r--r--Zend/zend_builtin_functions.h26
-rw-r--r--Zend/zend_compile.c2653
-rw-r--r--Zend/zend_compile.h643
-rw-r--r--Zend/zend_config.w32.h86
-rw-r--r--Zend/zend_constants.c277
-rw-r--r--Zend/zend_constants.h68
-rw-r--r--Zend/zend_dynamic_array.c62
-rw-r--r--Zend/zend_dynamic_array.h38
-rw-r--r--Zend/zend_errors.h40
-rw-r--r--Zend/zend_execute.c2648
-rw-r--r--Zend/zend_execute.h162
-rw-r--r--Zend/zend_execute_API.c854
-rw-r--r--Zend/zend_execute_locks.h32
-rw-r--r--Zend/zend_extensions.c218
-rw-r--r--Zend/zend_extensions.h116
-rw-r--r--Zend/zend_fast_cache.h140
-rw-r--r--Zend/zend_globals.h247
-rw-r--r--Zend/zend_globals_macros.h109
-rw-r--r--Zend/zend_hash.c1307
-rw-r--r--Zend/zend_hash.h219
-rw-r--r--Zend/zend_highlight.c242
-rw-r--r--Zend/zend_highlight.h52
-rw-r--r--Zend/zend_indent.c147
-rw-r--r--Zend/zend_indent.h26
-rw-r--r--Zend/zend_ini.c487
-rw-r--r--Zend/zend_ini.h199
-rw-r--r--Zend/zend_ini_parser.y236
-rw-r--r--Zend/zend_ini_scanner.h12
-rw-r--r--Zend/zend_ini_scanner.l227
-rw-r--r--Zend/zend_istdiostream.h15
-rw-r--r--Zend/zend_language_parser.y777
-rw-r--r--Zend/zend_language_scanner.h38
-rw-r--r--Zend/zend_language_scanner.l1472
-rw-r--r--Zend/zend_list.c391
-rw-r--r--Zend/zend_list.h109
-rw-r--r--Zend/zend_llist.c305
-rw-r--r--Zend/zend_llist.h79
-rw-r--r--Zend/zend_modules.h90
-rw-r--r--Zend/zend_objects.c149
-rw-r--r--Zend/zend_objects.h35
-rw-r--r--Zend/zend_opcode.c401
-rw-r--r--Zend/zend_operators.c1738
-rw-r--r--Zend/zend_operators.h266
-rw-r--r--Zend/zend_ptr_stack.c110
-rw-r--r--Zend/zend_ptr_stack.h58
-rw-r--r--Zend/zend_qsort.c106
-rw-r--r--Zend/zend_qsort.h26
-rw-r--r--Zend/zend_sprintf.c40
-rw-r--r--Zend/zend_stack.c164
-rw-r--r--Zend/zend_stack.h47
-rw-r--r--Zend/zend_static_allocator.c76
-rw-r--r--Zend/zend_static_allocator.h45
-rw-r--r--Zend/zend_variables.c196
-rw-r--r--Zend/zend_variables.h59
-rw-r--r--ext/imap/imap.h103
-rw-r--r--ext/pcre/config0.m461
-rw-r--r--main/php_realpath.c283
-rw-r--r--strtok_r.c113
105 files changed, 0 insertions, 31650 deletions
diff --git a/TSRM/LICENSE b/TSRM/LICENSE
deleted file mode 100644
index 8d208476e4..0000000000
--- a/TSRM/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-- Neither name of the copyright holders nor the names of their contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/TSRM/Makefile.am b/TSRM/Makefile.am
deleted file mode 100644
index 91e585b65c..0000000000
--- a/TSRM/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-## process this file with automake to produce Makefile.am
-AUTOMAKE_OPTIONS=foreign
-noinst_LTLIBRARIES=libtsrm.la
-libtsrm_la_SOURCES = TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c
-
-depend:
diff --git a/TSRM/TODO b/TSRM/TODO
deleted file mode 100644
index 82b4fedfde..0000000000
--- a/TSRM/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-- Improve the lock in ts_resource_ex() in order to cover less code.
- This can probably be done by more careful hash table access
diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c
deleted file mode 100644
index 65447c6df0..0000000000
--- a/TSRM/TSRM.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Thread Safe Resource Manager |
- +----------------------------------------------------------------------+
- | Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
- | This source file is subject to the TSRM license, that is bundled |
- | with this package in the file LICENSE |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#include "TSRM.h"
-
-#ifdef ZTS
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-typedef struct _tsrm_tls_entry tsrm_tls_entry;
-
-struct _tsrm_tls_entry {
- void **storage;
- int count;
- THREAD_T thread_id;
- tsrm_tls_entry *next;
-};
-
-
-typedef struct {
- size_t size;
- ts_allocate_ctor ctor;
- ts_allocate_dtor dtor;
-} tsrm_resource_type;
-
-
-/* The memory manager table */
-static tsrm_tls_entry **tsrm_tls_table=NULL;
-static int tsrm_tls_table_size;
-static ts_rsrc_id id_count;
-
-/* The resource sizes table */
-static tsrm_resource_type *resource_types_table=NULL;
-static int resource_types_table_size;
-
-
-static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
-
-/* New thread handlers */
-static tsrm_thread_begin_func_t tsrm_new_thread_begin_handler;
-static tsrm_thread_end_func_t tsrm_new_thread_end_handler;
-
-/* Debug support */
-int tsrm_error(int level, const char *format, ...);
-
-/* Read a resource from a thread's resource storage */
-static int tsrm_error_level;
-static FILE *tsrm_error_file;
-
-#if TSRM_DEBUG
-#define TSRM_ERROR(args) tsrm_error args
-#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
- { \
- int unshuffled_offset = TSRM_UNSHUFFLE_RSRC_ID(offset); \
- \
- if (offset==0) { \
- return &array; \
- } else if ((unshuffled_offset)>=0 && (unshuffled_offset)<(range)) { \
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Successfully fetched resource id %d for thread id %ld - 0x%0.8X", \
- unshuffled_offset, (long) thread_resources->thread_id, array[unshuffled_offset])); \
- return array[unshuffled_offset]; \
- } else { \
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Resource id %d is out of range (%d..%d)", \
- unshuffled_offset, TSRM_SHUFFLE_RSRC_ID(0), TSRM_SHUFFLE_RSRC_ID(thread_resources->count-1))); \
- return NULL; \
- } \
- }
-#else
-#define TSRM_ERROR
-#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
- if (offset==0) { \
- return &array; \
- } else { \
- return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \
- }
-#endif
-
-#if defined(PTHREADS)
-/* Thread local storage */
-static pthread_key_t tls_key;
-#elif defined(TSRM_ST)
-static int tls_key;
-#elif defined(TSRM_WIN32)
-static DWORD tls_key;
-#endif
-
-
-/* Startup TSRM (call once for the entire process) */
-TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename)
-{
-#if defined(GNUPTH)
- pth_init();
-#elif defined(PTHREADS)
- pthread_key_create( &tls_key, 0 );
-#elif defined(TSRM_ST)
- st_init();
- st_key_create(&tls_key, 0);
-#elif defined(TSRM_WIN32)
- tls_key = TlsAlloc();
-#endif
-
- tsrm_error_file = stderr;
- tsrm_error_set(debug_level, debug_filename);
- tsrm_tls_table_size = expected_threads;
-
- tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
- if (!tsrm_tls_table) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate TLS table"));
- return 0;
- }
- id_count=0;
-
- resource_types_table_size = expected_resources;
- resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
- if (!resource_types_table) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate resource types table"));
- free(tsrm_tls_table);
- tsrm_tls_table = NULL;
- return 0;
- }
-
- tsmm_mutex = tsrm_mutex_alloc();
-
- tsrm_new_thread_begin_handler = tsrm_new_thread_end_handler = NULL;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Started up TSRM, %d expected threads, %d expected resources", expected_threads, expected_resources));
- return 1;
-}
-
-
-/* Shutdown TSRM (call once for the entire process) */
-TSRM_API void tsrm_shutdown(void)
-{
- int i;
-
- if (tsrm_tls_table) {
- for (i=0; i<tsrm_tls_table_size; i++) {
- tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
-
- while (p) {
- int j;
-
- next_p = p->next;
- for (j=0; j<id_count; j++) {
- free(p->storage[j]);
- }
- free(p->storage);
- free(p);
- p = next_p;
- }
- }
- free(tsrm_tls_table);
- tsrm_tls_table = NULL;
- }
- if (resource_types_table) {
- free(resource_types_table);
- resource_types_table=NULL;
- }
- tsrm_mutex_free(tsmm_mutex);
- tsmm_mutex = NULL;
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Shutdown TSRM"));
- if (tsrm_error_file!=stderr) {
- fclose(tsrm_error_file);
- }
-#if defined(GNUPTH)
- pth_kill();
-#elif defined(PTHREADS)
- pthread_key_delete(tls_key);
-#elif defined(TSRM_WIN32)
- TlsFree(tls_key);
-#endif
-}
-
-
-/* allocates a new thread-safe-resource id */
-TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
-{
- int i;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new resource id, %d bytes", size));
-
- tsrm_mutex_lock(tsmm_mutex);
-
- /* obtain a resource id */
- *rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
-
- /* store the new resource type in the resource sizes table */
- if (resource_types_table_size < id_count) {
- resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
- if (!resource_types_table) {
- tsrm_mutex_unlock(tsmm_mutex);
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
- *rsrc_id = 0;
- return 0;
- }
- resource_types_table_size = id_count;
- }
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
-
- /* enlarge the arrays for the already active threads */
- for (i=0; i<tsrm_tls_table_size; i++) {
- tsrm_tls_entry *p = tsrm_tls_table[i];
-
- while (p) {
- if (p->count < id_count) {
- int j;
-
- p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
- for (j=p->count; j<id_count; j++) {
- p->storage[j] = (void *) malloc(resource_types_table[j].size);
- if (resource_types_table[j].ctor) {
- resource_types_table[j].ctor(p->storage[j], &p->storage);
- }
- }
- p->count = id_count;
- }
- p = p->next;
- }
- }
- tsrm_mutex_unlock(tsmm_mutex);
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
- return *rsrc_id;
-}
-
-
-static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
-{
- int i;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Creating data structures for thread %x", thread_id));
- (*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
- (*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
- (*thread_resources_ptr)->count = id_count;
- (*thread_resources_ptr)->thread_id = thread_id;
- (*thread_resources_ptr)->next = NULL;
-
-#if defined(PTHREADS)
- /* Set thread local storage to this new thread resources structure */
- pthread_setspecific(tls_key, (void *) *thread_resources_ptr);
-#elif defined(TSRM_ST)
- st_thread_setspecific(tls_key, (void *) *thread_resources_ptr);
-#elif defined(TSRM_WIN32)
- TlsSetValue(tls_key, (void *) *thread_resources_ptr);
-#endif
-
- if (tsrm_new_thread_begin_handler) {
- tsrm_new_thread_begin_handler(thread_id, &((*thread_resources_ptr)->storage));
- }
- for (i=0; i<id_count; i++) {
- (*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
- if (resource_types_table[i].ctor) {
- resource_types_table[i].ctor((*thread_resources_ptr)->storage[i], &(*thread_resources_ptr)->storage);
- }
- }
-
- tsrm_mutex_unlock(tsmm_mutex);
-
- if (tsrm_new_thread_end_handler) {
- tsrm_new_thread_end_handler(thread_id, &((*thread_resources_ptr)->storage));
- }
-}
-
-
-/* fetches the requested resource for the current thread */
-TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
-{
- THREAD_T thread_id;
- int hash_value;
- tsrm_tls_entry *thread_resources;
-
- if (!th_id) {
-#if defined(PTHREADS)
- /* Fast path for looking up the resources for the current
- * thread. Its used by just about every call to
- * ts_resource_ex(). This avoids the need for a mutex lock
- * and our hashtable lookup.
- */
- thread_resources = pthread_getspecific(tls_key);
-#elif defined(TSRM_ST)
- thread_resources = st_thread_getspecific(tls_key);
-#elif defined(TSRM_WIN32)
- thread_resources = TlsGetValue(tls_key);
-#else
- thread_resources = NULL;
-#endif
- if (thread_resources) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for current thread %d", id, (long) thread_resources->thread_id));
- /* Read a specific resource from the thread's resources.
- * This is called outside of a mutex, so have to be aware about external
- * changes to the structure as we read it.
- */
- TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
- }
- thread_id = tsrm_thread_id();
- } else {
- thread_id = *th_id;
- }
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for thread %ld", id, (long) thread_id));
- tsrm_mutex_lock(tsmm_mutex);
-
- hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
- thread_resources = tsrm_tls_table[hash_value];
-
- if (!thread_resources) {
- allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
- return ts_resource_ex(id, &thread_id);
- } else {
- do {
- if (thread_resources->thread_id == thread_id) {
- break;
- }
- if (thread_resources->next) {
- thread_resources = thread_resources->next;
- } else {
- allocate_new_resource(&thread_resources->next, thread_id);
- return ts_resource_ex(id, &thread_id);
- /*
- * thread_resources = thread_resources->next;
- * break;
- */
- }
- } while (thread_resources);
- }
- tsrm_mutex_unlock(tsmm_mutex);
- /* Read a specific resource from the thread's resources.
- * This is called outside of a mutex, so have to be aware about external
- * changes to the structure as we read it.
- */
- TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
-}
-
-
-/* frees all resources allocated for the current thread */
-void ts_free_thread(void)
-{
- tsrm_tls_entry *thread_resources;
- int i;
- THREAD_T thread_id = tsrm_thread_id();
- int hash_value;
- tsrm_tls_entry *last=NULL;
-
- tsrm_mutex_lock(tsmm_mutex);
- hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
- thread_resources = tsrm_tls_table[hash_value];
-
- while (thread_resources) {
- if (thread_resources->thread_id == thread_id) {
- for (i=0; i<thread_resources->count; i++) {
- if (resource_types_table[i].dtor) {
- resource_types_table[i].dtor(thread_resources->storage[i], &thread_resources->storage);
- }
- }
- for (i=0; i<thread_resources->count; i++) {
- free(thread_resources->storage[i]);
- }
- free(thread_resources->storage);
- if (last) {
- last->next = thread_resources->next;
- } else {
- tsrm_tls_table[hash_value] = thread_resources->next;
- }
-#if defined(PTHREADS)
- pthread_setspecific(tls_key, 0);
-#elif defined(TSRM_WIN32)
- TlsSetValue(tls_key, 0);
-#endif
- free(thread_resources);
- break;
- }
- if (thread_resources->next) {
- last = thread_resources;
- }
- thread_resources = thread_resources->next;
- }
- tsrm_mutex_unlock(tsmm_mutex);
-}
-
-
-/* deallocates all occurrences of a given id */
-void ts_free_id(ts_rsrc_id id)
-{
-}
-
-
-
-
-/*
- * Utility Functions
- */
-
-/* Obtain the current thread id */
-TSRM_API THREAD_T tsrm_thread_id(void)
-{
-#ifdef TSRM_WIN32
- return GetCurrentThreadId();
-#elif defined(GNUPTH)
- return pth_self();
-#elif defined(PTHREADS)
- return pthread_self();
-#elif defined(NSAPI)
- return systhread_current();
-#elif defined(PI3WEB)
- return PIThread_getCurrent();
-#elif defined(TSRM_ST)
- return st_thread_self();
-#endif
-}
-
-
-/* Allocate a mutex */
-TSRM_API MUTEX_T tsrm_mutex_alloc(void)
-{
- MUTEX_T mutexp;
-
-#ifdef TSRM_WIN32
- mutexp = malloc(sizeof(CRITICAL_SECTION));
- InitializeCriticalSection(mutexp);
-#elif defined(GNUPTH)
- mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
- pth_mutex_init(mutexp);
-#elif defined(PTHREADS)
- mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- pthread_mutex_init(mutexp,NULL);
-#elif defined(NSAPI)
- mutexp = crit_init();
-#elif defined(PI3WEB)
- mutexp = PIPlatform_allocLocalMutex();
-#elif defined(TSRM_ST)
- mutexp = st_mutex_new();
-#endif
-#ifdef THR_DEBUG
- printf("Mutex created thread: %d\n",mythreadid());
-#endif
- return( mutexp );
-}
-
-
-/* Free a mutex */
-TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
-{
- if (mutexp) {
-#ifdef TSRM_WIN32
- DeleteCriticalSection(mutexp);
-#elif defined(GNUPTH)
- free(mutexp);
-#elif defined(PTHREADS)
- pthread_mutex_destroy(mutexp);
- free(mutexp);
-#elif defined(NSAPI)
- crit_terminate(mutexp);
-#elif defined(PI3WEB)
- PISync_delete(mutexp);
-#elif defined(TSRM_ST)
- st_mutex_destroy(mutexp);
-#endif
- }
-#ifdef THR_DEBUG
- printf("Mutex freed thread: %d\n",mythreadid());
-#endif
-}
-
-
-/* Lock a mutex */
-TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
-{
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex locked thread: %ld", tsrm_thread_id()));
-#ifdef TSRM_WIN32
- EnterCriticalSection(mutexp);
- return 1;
-#elif defined(GNUPTH)
- return pth_mutex_acquire(mutexp, 0, NULL);
-#elif defined(PTHREADS)
- return pthread_mutex_lock(mutexp);
-#elif defined(NSAPI)
- return crit_enter(mutexp);
-#elif defined(PI3WEB)
- return PISync_lock(mutexp);
-#elif defined(TSRM_ST)
- return st_mutex_lock(mutexp);
-#endif
-}
-
-
-/* Unlock a mutex */
-TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
-{
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex unlocked thread: %ld", tsrm_thread_id()));
-#ifdef TSRM_WIN32
- LeaveCriticalSection(mutexp);
- return 1;
-#elif defined(GNUPTH)
- return pth_mutex_release(mutexp);
-#elif defined(PTHREADS)
- return pthread_mutex_unlock(mutexp);
-#elif defined(NSAPI)
- return crit_exit(mutexp);
-#elif defined(PI3WEB)
- return PISync_unlock(mutexp);
-#elif defined(TSRM_ST)
- return st_mutex_unlock(mutexp);
-#endif
-}
-
-
-TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
-{
- void *retval = (void *) tsrm_new_thread_begin_handler;
-
- tsrm_new_thread_begin_handler = new_thread_begin_handler;
- return retval;
-}
-
-
-TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler)
-{
- void *retval = (void *) tsrm_new_thread_end_handler;
-
- tsrm_new_thread_end_handler = new_thread_end_handler;
- return retval;
-}
-
-
-
-/*
- * Debug support
- */
-
-#if TSRM_DEBUG
-int tsrm_error(int level, const char *format, ...)
-{
- if (level<=tsrm_error_level) {
- va_list args;
- int size;
-
- fprintf(tsrm_error_file, "TSRM: ");
- va_start(args, format);
- size = vfprintf(tsrm_error_file, format, args);
- va_end(args);
- fprintf(tsrm_error_file, "\n");
- fflush(tsrm_error_file);
- return size;
- } else {
- return 0;
- }
-}
-#endif
-
-
-void tsrm_error_set(int level, char *debug_filename)
-{
- tsrm_error_level = level;
-
-#if TSRM_DEBUG
- if (tsrm_error_file!=stderr) { /* close files opened earlier */
- fclose(tsrm_error_file);
- }
-
- if (debug_filename) {
- tsrm_error_file = fopen(debug_filename, "w");
- if (!tsrm_error_file) {
- tsrm_error_file = stderr;
- }
- } else {
- tsrm_error_file = stderr;
- }
-#endif
-}
-
-#endif /* ZTS */
diff --git a/TSRM/TSRM.dsp b/TSRM/TSRM.dsp
deleted file mode 100644
index 1a5693f5a2..0000000000
--- a/TSRM/TSRM.dsp
+++ /dev/null
@@ -1,186 +0,0 @@
-# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=TSRM - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "TSRM.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=1 /YX /FD /GZ /c
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "TSRM - Win32 Debug_TS"
-# Name "TSRM - Win32 Release_TS"
-# Name "TSRM - Win32 Release_TS_inline"
-# Name "TSRM - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\TSRM.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_strtok_r.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_virtual_cwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_win32.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\readdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TSRM.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_config_common.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_strtok_r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_virtual_cwd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_win32.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h
deleted file mode 100644
index 374e8ff2fc..0000000000
--- a/TSRM/TSRM.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Thread Safe Resource Manager |
- +----------------------------------------------------------------------+
- | Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
- | This source file is subject to the TSRM license, that is bundled |
- | with this package in the file LICENSE |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef TSRM_H
-#define TSRM_H
-
-#ifdef HAVE_CONFIG_H
-# include "tsrm_config.h"
-#endif
-
-#ifdef WIN32
-# define TSRM_WIN32
-#endif
-
-#ifdef TSRM_WIN32
-# ifdef TSRM_EXPORTS
-# define TSRM_API __declspec(dllexport)
-# else
-# define TSRM_API __declspec(dllimport)
-# endif
-#else
-# define TSRM_API
-#endif
-
-/* Only compile multi-threading functions if we're in ZTS mode */
-#ifdef ZTS
-
-#ifdef TSRM_WIN32
-# include <windows.h>
-#elif defined(GNUPTH)
-# include <pth.h>
-#elif defined(PTHREADS)
-# include <pthread.h>
-#elif defined(TSRM_ST)
-# include <st.h>
-#endif
-
-typedef int ts_rsrc_id;
-
-/* Define THREAD_T and MUTEX_T */
-#ifdef TSRM_WIN32
-# define THREAD_T DWORD
-# define MUTEX_T CRITICAL_SECTION *
-#elif defined(GNUPTH)
-# define THREAD_T pth_t
-# define MUTEX_T pth_mutex_t *
-#elif defined(PTHREADS)
-# define THREAD_T pthread_t
-# define MUTEX_T pthread_mutex_t *
-#elif defined(NSAPI)
-# define THREAD_T SYS_THREAD
-# define MUTEX_T CRITICAL
-#elif defined(PI3WEB)
-# define THREAD_T PIThread *
-# define MUTEX_T PISync *
-#elif defined(TSRM_ST)
-# define THREAD_T st_thread_t
-# define MUTEX_T st_mutex_t
-#endif
-
-typedef void (*ts_allocate_ctor)(void *, void ***);
-typedef void (*ts_allocate_dtor)(void *, void ***);
-
-#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* startup/shutdown */
-TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
-TSRM_API void tsrm_shutdown(void);
-
-/* allocates a new thread-safe-resource id */
-TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
-
-/* fetches the requested resource for the current thread */
-TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
-#define ts_resource(id) ts_resource_ex(id, NULL)
-
-/* frees all resources allocated for the current thread */
-TSRM_API void ts_free_thread(void);
-
-/* deallocates all occurrences of a given id */
-TSRM_API void ts_free_id(ts_rsrc_id id);
-
-
-/* Debug support */
-#define TSRM_ERROR_LEVEL_ERROR 1
-#define TSRM_ERROR_LEVEL_CORE 2
-#define TSRM_ERROR_LEVEL_INFO 3
-
-typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id, void ***tsrm_ls);
-typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id, void ***tsrm_ls);
-
-
-TSRM_API int tsrm_error(int level, const char *format, ...);
-TSRM_API void tsrm_error_set(int level, char *debug_filename);
-
-/* utility functions */
-TSRM_API THREAD_T tsrm_thread_id(void);
-TSRM_API MUTEX_T tsrm_mutex_alloc(void);
-TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
-TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
-TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
-
-TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
-TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
-
-#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
-#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
-
-#define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
-#define TSRMG(id, type, element) (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
-#define TSRMLS_D void ***tsrm_ls
-#define TSRMLS_DC , TSRMLS_D
-#define TSRMLS_C tsrm_ls
-#define TSRMLS_CC , TSRMLS_C
-
-#ifdef __cplusplus
-}
-#endif
-
-#else /* non ZTS */
-
-#define TSRMLS_FETCH()
-#define TSRMLS_D void
-#define TSRMLS_DC
-#define TSRMLS_C
-#define TSRMLS_CC
-
-#endif /* ZTS */
-
-#endif /* TSRM_H */
diff --git a/TSRM/acconfig.h b/TSRM/acconfig.h
deleted file mode 100644
index 2b94cf35e7..0000000000
--- a/TSRM/acconfig.h
+++ /dev/null
@@ -1 +0,0 @@
-#undef PTHREADS
diff --git a/TSRM/acinclude.m4 b/TSRM/acinclude.m4
deleted file mode 100644
index 1953172aef..0000000000
--- a/TSRM/acinclude.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-
-AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
- LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
-])
-
diff --git a/TSRM/build.mk b/TSRM/build.mk
deleted file mode 100644
index aac1a8b982..0000000000
--- a/TSRM/build.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Makefile to generate build tools
-#
-# Standard usage:
-# make -f build.mk
-#
-# Written by Sascha Schumann
-#
-# $Id$
-
-
-LT_TARGETS = ltmain.sh ltconfig
-
-config_h_in = tsrm_config.h.in
-
-makefile_am_files = Makefile.am
-makefile_in_files = $(makefile_am_files:.am=.in)
-makefile_files = $(makefile_am_files:e.am=e)
-
-targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
-
-all: $(targets)
-
-clean:
- rm -f $(targets)
-
-$(LT_TARGETS):
- rm -f $(LT_TARGETS)
- libtoolize --automake $(AMFLAGS) -f
-
-$(makefile_in_files): $(makefile_am_files)
- automake -a -i $(AMFLAGS) $(makefile_files)
-
-aclocal.m4: configure.in acinclude.m4
- aclocal
-
-$(config_h_in): configure.in acconfig.h
-# explicitly remove target since autoheader does not seem to work
-# correctly otherwise (timestamps are not updated)
- @rm -f $@
- autoheader
-
-configure: aclocal.m4 configure.in
- autoconf
diff --git a/TSRM/buildconf b/TSRM/buildconf
deleted file mode 100755
index fe8dee6f76..0000000000
--- a/TSRM/buildconf
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-case "$1" in
---copy)
- automake_flags=--copy
- shift
-;;
-esac
-
-libtoolize --force --automake $automake_flags
-
-mv aclocal.m4 aclocal.m4.old 2>/dev/null
-aclocal
-if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}aclocal.m4"
- mv aclocal.m4.old aclocal.m4
-else
- echo "buildconf: created or modified ${1}aclocal.m4"
-fi
-
-autoheader
-
-automake --add-missing --include-deps $automake_flags
-
-mv configure configure.old 2>/dev/null
-autoconf
-if cmp configure.old configure > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}configure"
- mv configure.old configure
-else
- echo "buildconf: created or modified ${1}configure"
-fi
-
diff --git a/TSRM/configure.in b/TSRM/configure.in
deleted file mode 100644
index acfdd00b35..0000000000
--- a/TSRM/configure.in
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl $Id$
-dnl
-dnl Minimalistic configure.in for TSRM.
-dnl
-
-AC_INIT(TSRM.c)
-AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
-AM_CONFIG_HEADER(tsrm_config.h)
-
-sinclude(tsrm.m4)
-
-TSRM_BASIC_CHECKS
-TSRM_THREADS_CHECKS
-
-AM_PROG_LIBTOOL
-if test "$enable_debug" != "yes"; then
- AM_SET_LIBTOOL_VARIABLE([--silent])
-fi
-
-dnl TSRM_PTHREAD
-
-AC_CHECK_HEADERS(
-utime.h \
-dirent.h \
-stdarg.h \
-alloca.h \
-unistd.h \
-limits.h
-)
-
-AC_OUTPUT(Makefile)
diff --git a/TSRM/readdir.h b/TSRM/readdir.h
deleted file mode 100644
index b0f1ad9e6f..0000000000
--- a/TSRM/readdir.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef READDIR_H
-#define READDIR_H
-
-
-/*
- * Structures and types used to implement opendir/readdir/closedir
- * on Windows 95/NT.
- */
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-
-/* struct dirent - same as Unix */
-
-struct dirent {
- long d_ino; /* inode (always 1 in WIN32) */
- off_t d_off; /* offset to this dirent */
- unsigned short d_reclen; /* length of d_name */
- char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
-};
-
-
-/* typedef DIR - not the same as Unix */
-typedef struct {
- long handle; /* _findfirst/_findnext handle */
- short offset; /* offset into directory */
- short finished; /* 1 if there are not more files */
- struct _finddata_t fileinfo; /* from _findfirst/_findnext */
- char *dir; /* the dir we are reading */
- struct dirent dent; /* the dirent to return */
-} DIR;
-
-/* Function prototypes */
-DIR *opendir(const char *);
-struct dirent *readdir(DIR *);
-int readdir_r(DIR *, struct dirent *, struct dirent **);
-int closedir(DIR *);
-void rewinddir(DIR *);
-
-
-#endif /* READDIR_H */
diff --git a/TSRM/threads.m4 b/TSRM/threads.m4
deleted file mode 100644
index e0f934e556..0000000000
--- a/TSRM/threads.m4
+++ /dev/null
@@ -1,160 +0,0 @@
-dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
-dnl
-dnl Redistribution and use in source and binary forms, with or without
-dnl modification, are permitted provided that the following conditions
-dnl are met:
-dnl
-dnl 1. Redistributions of source code must retain the above copyright
-dnl notice, this list of conditions and the following disclaimer.
-dnl
-dnl 2. Redistributions in binary form must reproduce the above copyright
-dnl notice, this list of conditions and the following disclaimer in
-dnl the documentation and/or other materials provided with the
-dnl distribution.
-dnl
-dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
-dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR
-dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-dnl OF THE POSSIBILITY OF SUCH DAMAGE.
-
-dnl
-dnl PTHREADS_FLAGS
-dnl
-dnl Set some magic defines to achieve POSIX threads conformance
-dnl
-AC_DEFUN(PTHREADS_FLAGS,[
- if test -z "$host_alias" && test -n "$host"; then
- host_alias=$host
- fi
- if test -z "$host_alias"; then
- AC_MSG_ERROR(host_alias is not set. Make sure to run config.guess)
- fi
- case $host_alias in
- *solaris*)
- PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
- *freebsd*)
- PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
- *linux*)
- PTHREAD_FLAGS=-D_REENTRANT;;
- *aix*)
- PTHREAD_FLAGS=-D_THREAD_SAFE;;
- *irix*)
- PTHREAD_FLAGS=-D_POSIX_THREAD_SAFE_FUNCTIONS;;
- *hpux*)
- PTHREAD_FLAGS=-D_REENTRANT;;
- *sco*)
- PTHREAD_FLAGS=-D_REENTRANT;;
-dnl Solves sigwait() problem, creates problems with u_long etc.
-dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";;
- esac
-
- if test -n "$PTHREAD_FLAGS"; then
- CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
- fi
-])dnl
-dnl
-dnl PTHREADS_CHECK_COMPILE
-dnl
-dnl Check whether the current setup can use POSIX threads calls
-dnl
-AC_DEFUN(PTHREADS_CHECK_COMPILE, [
-AC_TRY_RUN( [
-#include <pthread.h>
-#include <stddef.h>
-
-void *thread_routine(void *data) {
- return data;
-}
-
-int main() {
- pthread_t thd;
- pthread_mutexattr_t mattr;
- int data = 1;
- pthread_mutexattr_init(&mattr);
- return pthread_create(&thd, NULL, thread_routine, &data);
-} ], [
- pthreads_working=yes
- ], [
- pthreads_working=no
- ], pthreads_working=no ) ] )dnl
-dnl
-dnl PTHREADS_CHECK()
-dnl
-dnl Try to find a way to enable POSIX threads
-dnl
-dnl Magic flags
-dnl -kthread gcc (FreeBSD)
-dnl -Kthread UDK cc (UnixWare)
-dnl -mt WorkShop cc (Solaris)
-dnl -mthreads gcc (AIX)
-dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD)
-dnl -pthreads gcc (Solaris)
-dnl -qthreaded AIX cc V5
-dnl -threads gcc (HP-UX)
-dnl
-AC_DEFUN(PTHREADS_CHECK,[
-
-save_CFLAGS=$CFLAGS
-save_LIBS=$LIBS
-PTHREADS_ASSIGN_VARS
-PTHREADS_CHECK_COMPILE
-LIBS=$save_LIBS
-CFLAGS=$save_CFLAGS
-
-AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
-ac_cv_pthreads_cflags=
-if test "$pthreads_working" != "yes"; then
- for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
- ac_save=$CFLAGS
- CFLAGS="$CFLAGS $flag"
- PTHREADS_CHECK_COMPILE
- CFLAGS=$ac_save
- if test "$pthreads_working" = "yes"; then
- ac_cv_pthreads_cflags=$flag
- break
- fi
- done
-fi
-])
-
-AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
-ac_cv_pthreads_lib=
-if test "$pthreads_working" != "yes"; then
- for lib in pthread pthreads c_r; do
- ac_save=$LIBS
- LIBS="$LIBS -l$lib"
- PTHREADS_CHECK_COMPILE
- LIBS=$ac_save
- if test "$pthreads_working" = "yes"; then
- ac_cv_pthreads_lib=$lib
- break
- fi
- done
-fi
-])
-
-if test "$pthreads_working" = "yes"; then
- threads_result="POSIX-Threads found"
-else
- threads_result="POSIX-Threads not found"
-fi
-])dnl
-dnl
-dnl
-AC_DEFUN(PTHREADS_ASSIGN_VARS,[
-if test -n "$ac_cv_pthreads_lib"; then
- LIBS="$LIBS -l$ac_cv_pthreads_lib"
-fi
-
-if test -n "$ac_cv_pthreads_cflags"; then
- CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
-fi
-])dnl
diff --git a/TSRM/tsrm.m4 b/TSRM/tsrm.m4
deleted file mode 100644
index 61462f1f96..0000000000
--- a/TSRM/tsrm.m4
+++ /dev/null
@@ -1,124 +0,0 @@
-
-dnl TSRM_CHECK_GCC_ARG(ARG, ACTION-IF-FOUND, ACTION-IF-NOT_FOUND)
-AC_DEFUN(TSRM_CHECK_GCC_ARG,[
- gcc_arg_name=[ac_cv_gcc_arg]translit($1,A-Z-,a-z_)
- AC_CACHE_CHECK([whether $CC supports $1], [ac_cv_gcc_arg]translit($1,A-Z-,a-z_), [
- echo 'void somefunc() { };' > conftest.c
- cmd='$CC $1 -c conftest.c'
- if eval $cmd 2>&1 | egrep -e $1 >/dev/null ; then
- ac_result=no
- else
- ac_result=yes
- fi
- eval $gcc_arg_name=$ac_result
- rm -f conftest.*
- ])
- if eval test "\$$gcc_arg_name" = "yes"; then
- $2
- else
- :
- $3
- fi
-])
-
-AC_DEFUN(TSRM_BASIC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])dnl
-dnl AC_REQUIRE([AM_PROG_CC_STDC])dnl
-AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AC_PROG_RANLIB])dnl
-
-AC_CHECK_HEADERS(stdarg.h)
-
-])
-
-
-AC_DEFUN(TSRM_CHECK_PTH,[
-
-AC_MSG_CHECKING(for GNU Pth)
-PTH_PREFIX="`$1 --prefix`"
-if test -z "$PTH_PREFIX"; then
- AC_MSG_RESULT(Please check your Pth installation)
-fi
-
-CPPFLAGS="$CPPFLAGS `$1 --cflags`"
-LDFLAGS="$LDFLAGS `$1 --ldflags`"
-LIBS="$LIBS `$1 --libs`"
-
-AC_DEFINE(GNUPTH, 1, [Whether you use GNU Pth])
-AC_MSG_RESULT(yes - installed in $PTH_PREFIX)
-
-])
-
-AC_DEFUN(TSRM_CHECK_ST,[
- if test -r "$1/include/st.h"; then
- CPPFLAGS="$CPPFLAGS -I$1/include"
- LDFLAGS="$LDFLAGS -L$1/lib"
- elif test -r "$1/st.h"; then
- CPPFLAGS="$CPPFLAGS -I$1"
- LDFLAGS="$LDFLAGS -L$1"
- fi
- AC_CHECK_HEADERS(st.h,[],[
- AC_MSG_ERROR([Sorry[,] I was unable to locate the State Threads header file. Please specify the prefix using --with-tsrm-st=/prefix])
- ])
- LIBS="$LIBS -lst"
- AC_MSG_CHECKING(for SGI's State Threads)
- AC_MSG_RESULT(yes)
- AC_DEFINE(TSRM_ST, 1, [ ])
-])
-
-sinclude(threads.m4)
-sinclude(TSRM/threads.m4)
-
-AC_DEFUN(TSRM_CHECK_PTHREADS,[
-
-PTHREADS_CHECK
-
-if test "$pthreads_working" != "yes"; then
- AC_MSG_ERROR(Your system seems to lack POSIX threads.)
-fi
-
-AC_DEFINE(PTHREADS, 1, Whether to use Pthreads)
-
-AC_MSG_CHECKING(for POSIX threads)
-AC_MSG_RESULT(yes)
-])
-
-
-AC_DEFUN(TSRM_THREADS_CHECKS,[
-
-dnl For the thread implementations, we always use --with-*
-dnl to maintain consistency
-
-AC_ARG_WITH(tsrm-pth,
-[ --with-tsrm-pth[=pth-config] Use GNU Pth.],[
- TSRM_PTH=$withval
-],[
- TSRM_PTH=no
-])
-
-AC_ARG_WITH(tsrm-st,
-[ --with-tsrm-st],[
- TSRM_ST=$withval
-],[
- TSRM_ST=no
-])
-
-AC_ARG_WITH(tsrm-pthreads,
-[ --with-tsrm-pthreads Use POSIX threads (default)],[
- TSRM_PTHREADS=$withval
-],[
- TSRM_PTHREADS=yes
-])
-
-test "$TSRM_PTH" = "yes" && TSRM_PTH=pth-config
-
-if test "$TSRM_PTH" != "no"; then
- TSRM_CHECK_PTH($TSRM_PTH)
-elif test "$TSRM_ST" != "no"; then
- TSRM_CHECK_ST($TSRM_ST)
-elif test "$TSRM_PTHREADS" != "no"; then
- TSRM_CHECK_PTHREADS
-fi
-
-])
diff --git a/TSRM/tsrm_config.w32.h b/TSRM/tsrm_config.w32.h
deleted file mode 100644
index 405d8c7c8f..0000000000
--- a/TSRM/tsrm_config.w32.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef TSRM_CONFIG_W32_H
-#define TSRM_CONFIG_W32_H
-
-#define HAVE_UTIME 1
-#define HAVE_ALLOCA 1
-
-#undef inline
-#ifdef ZEND_WIN32_FORCE_INLINE
-# define inline __forceinline
-#else
-# define inline
-#endif
-
-
-#endif
diff --git a/TSRM/tsrm_config_common.h b/TSRM/tsrm_config_common.h
deleted file mode 100644
index add5a50fa5..0000000000
--- a/TSRM/tsrm_config_common.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef TSRM_CONFIG_COMMON_H
-#define TSRM_CONFIG_COMMON_H
-
-#if WINNT|WIN32
-# define TSRM_WIN32
-#endif
-
-#ifndef TSRM_WIN32
-# include "tsrm_config.h"
-# include <sys/param.h>
-#else
-# include "tsrm_config.w32.h"
-#endif
-
-#ifdef TSRM_WIN32
-#include <malloc.h>
-#endif
-
-/* AIX requires this to be the first thing in the file. */
-#ifndef __GNUC__
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# else
-# define MAXPATHLEN 256
-# endif
-#endif
-
-#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2))
-# define tsrm_do_alloca(p) alloca(p)
-# define tsrm_free_alloca(p)
-#else
-# define tsrm_do_alloca(p) malloc(p)
-# define tsrm_free_alloca(p) free(p)
-#endif
-
-#endif /* TSRM_CONFIG_COMMON_H */
diff --git a/TSRM/tsrm_strtok_r.c b/TSRM/tsrm_strtok_r.c
deleted file mode 100644
index e9ad26a7ac..0000000000
--- a/TSRM/tsrm_strtok_r.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <stdio.h>
-
-#include "tsrm_config_common.h"
-#include "tsrm_strtok_r.h"
-
-static inline int in_character_class(char ch, const char *delim)
-{
- while (*delim) {
- if (*delim == ch) {
- return 1;
- }
- delim++;
- }
- return 0;
-}
-
-char *tsrm_strtok_r(char *s, const char *delim, char **last)
-{
- char *token;
-
- if (s == NULL) {
- s = *last;
- }
-
- while (*s && in_character_class(*s, delim)) {
- s++;
- }
- if (!*s) {
- return NULL;
- }
-
- token = s;
-
- while (*s && !in_character_class(*s, delim)) {
- s++;
- }
- if (!*s) {
- *last = s;
- } else {
- *s = '\0';
- *last = s + 1;
- }
- return token;
-}
-
-#if 0
-
-main()
-{
- char foo[] = "/foo/bar//\\barbara";
- char *last;
- char *token;
-
- token = tsrm_strtok_r(foo, "/\\", &last);
- while (token) {
- printf ("Token = '%s'\n", token);
- token = tsrm_strtok_r(NULL, "/\\", &last);
- }
-
- return 0;
-}
-
-#endif
diff --git a/TSRM/tsrm_strtok_r.h b/TSRM/tsrm_strtok_r.h
deleted file mode 100644
index 8c9e8198e7..0000000000
--- a/TSRM/tsrm_strtok_r.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TSRM_STRTOK_R
-#define TSRM_STRTOK_R
-
-char *tsrm_strtok_r(char *s, const char *delim, char **last);
-
-#endif
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c
deleted file mode 100644
index ae8efd93e4..0000000000
--- a/TSRM/tsrm_virtual_cwd.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <stdio.h>
-#include <limits.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "tsrm_virtual_cwd.h"
-#include "tsrm_strtok_r.h"
-
-#ifdef TSRM_WIN32
-#include <io.h>
-#include "tsrm_win32.h"
-#endif
-
-#define VIRTUAL_CWD_DEBUG 0
-
-#include "TSRM.h"
-
-/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */
-#if defined(TSRM_WIN32) && defined(ZTS)
-MUTEX_T cwd_mutex;
-#endif
-
-#ifdef ZTS
-static ts_rsrc_id cwd_globals_id;
-#else
-static virtual_cwd_globals cwd_globals;
-#endif
-
-cwd_state main_cwd_state; /* True global */
-
-#ifndef TSRM_WIN32
-#include <unistd.h>
-#else
-#include <direct.h>
-#endif
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) ((mode) & _S_IFDIR)
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(mode) ((mode) & _S_IFREG)
-#endif
-
-#ifdef TSRM_WIN32
-#define tsrm_strtok_r(a,b,c) strtok((a),(b))
-#define TOKENIZER_STRING "/\\"
-
-static int php_check_dots(const char *element, int n)
-{
- while (n-- > 0) if (element[n] != '.') break;
-
- return (n != -1);
-}
-
-#define IS_DIRECTORY_UP(element, len) \
- (len >= 2 && !php_check_dots(element, len))
-
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && ptr[0] == '.')
-
-
-#else
-#define TOKENIZER_STRING "/"
-#endif
-
-
-/* default macros */
-
-#ifndef IS_DIRECTORY_UP
-#define IS_DIRECTORY_UP(element, len) \
- (len == 2 && memcmp(element, "..", 2) == 0)
-#endif
-
-#ifndef IS_DIRECTORY_CURRENT
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && ptr[0] == '.')
-#endif
-
-/* define this to check semantics */
-#define IS_DIR_OK(s) (1)
-
-#ifndef IS_DIR_OK
-#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0)
-#endif
-
-
-#define CWD_STATE_COPY(d, s) \
- (d)->cwd_length = (s)->cwd_length; \
- (d)->cwd = (char *) malloc((s)->cwd_length+1); \
- memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1);
-
-#define CWD_STATE_FREE(s) \
- free((s)->cwd);
-
-static int php_is_dir_ok(const cwd_state *state)
-{
- struct stat buf;
-
- if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
- return (0);
-
- return (1);
-}
-
-static int php_is_file_ok(const cwd_state *state)
-{
- struct stat buf;
-
- if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
- return (0);
-
- return (1);
-}
-
-static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
-{
- CWD_STATE_COPY(&cwd_globals->cwd, &main_cwd_state);
-}
-
-static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
-{
- CWD_STATE_FREE(&cwd_globals->cwd);
-}
-
-static char *tsrm_strndup(const char *s, size_t length)
-{
- char *p;
-
- p = (char *) malloc(length+1);
- if (!p) {
- return (char *)NULL;
- }
- if (length) {
- memcpy(p,s,length);
- }
- p[length]=0;
- return p;
-}
-
-CWD_API void virtual_cwd_startup(void)
-{
- char cwd[MAXPATHLEN];
- char *result;
-
- result = getcwd(cwd, sizeof(cwd));
- if (!result) {
- cwd[0] = '\0';
- }
- main_cwd_state.cwd = strdup(cwd);
- main_cwd_state.cwd_length = strlen(cwd);
-
-#ifdef ZTS
- ts_allocate_id(&cwd_globals_id, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
-#else
- cwd_globals_ctor(&cwd_globals TSRMLS_CC);
-#endif
-
-#if defined(TSRM_WIN32) && defined(ZTS)
- cwd_mutex = tsrm_mutex_alloc();
-#endif
-}
-
-CWD_API void virtual_cwd_shutdown(void)
-{
-#ifndef ZTS
- cwd_globals_dtor(&cwd_globals TSRMLS_CC);
-#endif
-#if defined(TSRM_WIN32) && defined(ZTS)
- tsrm_mutex_free(cwd_mutex);
-#endif
-
- free(main_cwd_state.cwd); /* Don't use CWD_STATE_FREE because the non global states will probably use emalloc()/efree() */
-}
-
-CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC)
-{
- cwd_state *state;
-
- state = &CWDG(cwd);
-
- if (state->cwd_length == 0) {
- char *retval;
-
- *length = 1;
- retval = (char *) malloc(2);
- retval[0] = DEFAULT_SLASH;
- retval[1] = '\0';
- return retval;
- }
-
-#ifdef TSRM_WIN32
- /* If we have something like C: */
- if (state->cwd_length == 2 && state->cwd[state->cwd_length-1] == ':') {
- char *retval;
-
- *length = state->cwd_length+1;
- retval = (char *) malloc(*length+1);
- memcpy(retval, state->cwd, *length);
- retval[*length-1] = DEFAULT_SLASH;
- retval[*length] = '\0';
- return retval;
- }
-#endif
- *length = state->cwd_length;
- return strdup(state->cwd);
-}
-
-
-/* Same semantics as UNIX getcwd() */
-CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC)
-{
- size_t length;
- char *cwd;
-
- cwd = virtual_getcwd_ex(&length TSRMLS_CC);
-
- if (buf == NULL) {
- return cwd;
- }
- if (length > size-1) {
- free(cwd);
- errno = ERANGE; /* Is this OK? */
- return NULL;
- }
- memcpy(buf, cwd, length+1);
- free(cwd);
- return buf;
-}
-
-/* Resolve path relatively to state and put the real path into state */
-/* returns 0 for ok, 1 for error */
-CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path)
-{
- int path_length = strlen(path);
- char *ptr, *path_copy;
- char *tok = NULL;
- int ptr_length;
- cwd_state *old_state;
- int ret = 0;
- int copy_amount = -1;
- char *free_path;
- unsigned char is_absolute = 0;
-#ifndef TSRM_WIN32
- char resolved_path[MAXPATHLEN];
-#endif
-
- if (path_length == 0)
- return (0);
-
-#if !defined(TSRM_WIN32) && !defined(__BEOS__)
- if (IS_ABSOLUTE_PATH(path, path_length)) {
- if (realpath(path, resolved_path)) {
- path = resolved_path;
- path_length = strlen(path);
- }
- } else { /* Concat current directory with relative path and then run realpath() on it */
- char *tmp;
- char *ptr;
-
- ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
- if (!tmp) {
- return 1;
- }
- memcpy(ptr, state->cwd, state->cwd_length);
- ptr += state->cwd_length;
- *ptr++ = DEFAULT_SLASH;
- memcpy(ptr, path, path_length);
- ptr += path_length;
- *ptr = '\0';
- if (realpath(tmp, resolved_path)) {
- path = resolved_path;
- path_length = strlen(path);
- }
- free(tmp);
- }
-#endif
- free_path = path_copy = tsrm_strndup(path, path_length);
-
- old_state = (cwd_state *) malloc(sizeof(cwd_state));
- CWD_STATE_COPY(old_state, state);
-#if VIRTUAL_CWD_DEBUG
- fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
-#endif
- if (IS_ABSOLUTE_PATH(path_copy, path_length)) {
- copy_amount = COPY_WHEN_ABSOLUTE;
- is_absolute = 1;
-#ifdef TSRM_WIN32
- } else if (IS_UNC_PATH(path_copy, path_length)) {
- copy_amount = 2;
- is_absolute = 1;
- } else if (IS_SLASH(path_copy[0])) {
- copy_amount = 2;
-#endif
- }
-
- if (copy_amount != -1) {
- state->cwd = (char *) realloc(state->cwd, copy_amount + 1);
- if (copy_amount) {
- if (is_absolute) {
- memcpy(state->cwd, path_copy, copy_amount);
- path_copy += copy_amount;
- } else {
- memcpy(state->cwd, old_state->cwd, copy_amount);
- }
- }
- state->cwd[copy_amount] = '\0';
- state->cwd_length = copy_amount;
- }
-
-
- ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
- while (ptr) {
- ptr_length = strlen(ptr);
-
- if (IS_DIRECTORY_UP(ptr, ptr_length)) {
- char save;
-
- save = DEFAULT_SLASH;
-
-#define PREVIOUS state->cwd[state->cwd_length - 1]
-
- while (IS_ABSOLUTE_PATH(state->cwd, state->cwd_length) &&
- !IS_SLASH(PREVIOUS)) {
- save = PREVIOUS;
- PREVIOUS = '\0';
- state->cwd_length--;
- }
-
- if (!IS_ABSOLUTE_PATH(state->cwd, state->cwd_length)) {
- state->cwd[state->cwd_length++] = save;
- state->cwd[state->cwd_length] = '\0';
- } else {
- PREVIOUS = '\0';
- state->cwd_length--;
- }
- } else if (!IS_DIRECTORY_CURRENT(ptr, ptr_length)) {
- state->cwd = (char *) realloc(state->cwd, state->cwd_length+ptr_length+1+1);
-#ifdef TSRM_WIN32
- /* Windows 9x will consider C:\\Foo as a network path. Avoid it. */
- if (state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') {
- state->cwd[state->cwd_length++] = DEFAULT_SLASH;
- }
-#else
- state->cwd[state->cwd_length++] = DEFAULT_SLASH;
-#endif
- memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
- state->cwd_length += ptr_length;
- }
- ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
- }
-
- if (state->cwd_length == COPY_WHEN_ABSOLUTE) {
- state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
- state->cwd[state->cwd_length] = DEFAULT_SLASH;
- state->cwd[state->cwd_length+1] = '\0';
- state->cwd_length++;
- }
-
- if (verify_path && verify_path(state)) {
- CWD_STATE_FREE(state);
-
- *state = *old_state;
-
- ret = 1;
- } else {
- CWD_STATE_FREE(old_state);
- ret = 0;
- }
-
- free(old_state);
-
- free(free_path);
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "virtual_file_ex() = %s\n",state->cwd);
-#endif
- return (ret);
-}
-
-CWD_API int virtual_chdir(const char *path TSRMLS_DC)
-{
- return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok)?-1:0;
-}
-
-CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC)
-{
- int length = strlen(path);
- char *temp;
- int retval;
-
- if (length == 0) {
- return 1; /* Can't cd to empty string */
- }
- while(--length >= 0 && !IS_SLASH(path[length])) {
- }
-
- if (length == -1) {
- /* No directory only file name */
- errno = ENOENT;
- return -1;
- }
-
- if (length == COPY_WHEN_ABSOLUTE && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
- length++;
- }
- temp = (char *) tsrm_do_alloca(length+1);
- memcpy(temp, path, length);
- temp[length] = 0;
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "Changing directory to %s\n", temp);
-#endif
- retval = p_chdir(temp TSRMLS_CC);
- tsrm_free_alloca(temp);
- return retval;
-}
-
-CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- retval = virtual_file_ex(&new_state, path, NULL);
-
- if (!retval) {
- int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
- memcpy(real_path, new_state.cwd, len);
- real_path[len] = '\0';
- return real_path;
- }
-
- return NULL;
-}
-
-CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- retval = virtual_file_ex(&new_state, path, verify_path);
-
- *filepath = new_state.cwd;
-
- return retval;
-
-}
-
-CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC)
-{
- return virtual_filepath_ex(path, filepath, php_is_file_ok TSRMLS_CC);
-}
-
-CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC)
-{
- cwd_state new_state;
- FILE *f;
-
- if (path[0] == '\0') { /* Fail to open empty path */
- return NULL;
- }
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- f = fopen(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-#if HAVE_UTIME
-CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL);
-
- ret = utime(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-#endif
-
-CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL);
-
- ret = chmod(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-
-#ifndef TSRM_WIN32
-CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL);
-
- ret = chown(new_state.cwd, owner, group);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-#endif
-
-CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...)
-{
- cwd_state new_state;
- int f;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- if (flags & O_CREAT) {
- mode_t mode;
- va_list arg;
-
- va_start(arg, flags);
- mode = (mode_t) va_arg(arg, int);
- va_end(arg);
-
- f = open(new_state.cwd, flags, mode);
- } else {
- f = open(new_state.cwd, flags);
- }
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int f;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- f = creat(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
-{
- cwd_state old_state;
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&old_state, &CWDG(cwd));
- virtual_file_ex(&old_state, oldname, NULL);
- oldname = old_state.cwd;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, newname, NULL);
- newname = new_state.cwd;
-
- retval = rename(oldname, newname);
-
- CWD_STATE_FREE(&old_state);
- CWD_STATE_FREE(&new_state);
-
- return retval;
-}
-
-CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- retval = stat(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#ifndef TSRM_WIN32
-
-CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- retval = lstat(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#endif
-
-CWD_API int virtual_unlink(const char *path TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL);
-
- retval = unlink(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL);
-
-#ifdef TSRM_WIN32
- retval = mkdir(new_state.cwd);
-#else
- retval = mkdir(new_state.cwd, mode);
-#endif
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL);
-
- retval = rmdir(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#ifdef TSRM_WIN32
-DIR *opendir(const char *name);
-#endif
-
-CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC)
-{
- cwd_state new_state;
- DIR *retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL);
-
- retval = opendir(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#ifndef TSRM_WIN32
-
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
-{
- int command_length;
- char *command_line;
- char *ptr;
- FILE *retval;
-
- command_length = strlen(command);
-
- ptr = command_line = (char *) malloc(command_length + sizeof("cd ; ") + CWDG(cwd).cwd_length+1);
- if (!command_line) {
- return NULL;
- }
- memcpy(ptr, "cd ", sizeof("cd ")-1);
- ptr += sizeof("cd ")-1;
-
- if (CWDG(cwd).cwd_length == 0) {
- *ptr++ = DEFAULT_SLASH;
- } else {
- memcpy(ptr, CWDG(cwd).cwd, CWDG(cwd).cwd_length);
- ptr += CWDG(cwd).cwd_length;
- }
-
- *ptr++ = ' ';
- *ptr++ = ';';
- *ptr++ = ' ';
-
- memcpy(ptr, command, command_length+1);
- retval = popen(command_line, type);
-
- free(command_line);
- return retval;
-}
-
-#else
-
-/* On Windows the trick of prepending "cd cwd; " doesn't work so we need to perform
- a real chdir() and mutex it
- */
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
-{
- char prev_cwd[MAXPATHLEN];
- char *getcwd_result;
- FILE *retval;
-
- getcwd_result = getcwd(prev_cwd, MAXPATHLEN);
- if (!getcwd_result) {
- return NULL;
- }
-
-#ifdef ZTS
- tsrm_mutex_lock(cwd_mutex);
-#endif
-
- chdir(CWDG(cwd).cwd);
- retval = popen(command, type);
- chdir(prev_cwd);
-
-#ifdef ZTS
- tsrm_mutex_unlock(cwd_mutex);
-#endif
-
- return retval;
-}
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/TSRM/tsrm_virtual_cwd.h b/TSRM/tsrm_virtual_cwd.h
deleted file mode 100644
index 52afebe0da..0000000000
--- a/TSRM/tsrm_virtual_cwd.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef VIRTUAL_CWD_H
-#define VIRTUAL_CWD_H
-
-#include "TSRM.h"
-#include "tsrm_config_common.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-
-#ifdef HAVE_UTIME_H
-#include <utime.h>
-#endif
-
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-#ifndef TSRM_WIN32
-#include <unistd.h>
-#endif
-
-#ifdef TSRM_WIN32
-#include "readdir.h"
-#include <sys/utime.h>
-/* mode_t isn't defined on Windows */
-typedef unsigned short mode_t;
-
-#define DEFAULT_SLASH '\\'
-#define DEFAULT_DIR_SEPARATOR ';'
-#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
-#define COPY_WHEN_ABSOLUTE 2
-#define IS_ABSOLUTE_PATH(path, len) \
- (len >= 2 && isalpha(path[0]) && path[1] == ':')
-#define IS_UNC_PATH(path, len) \
- (len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
-
-#else
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#define DEFAULT_SLASH '/'
-
-#ifdef __riscos__
-#define DEFAULT_DIR_SEPARATOR ';'
-#else
-#define DEFAULT_DIR_SEPARATOR ':'
-#endif
-
-#define IS_SLASH(c) ((c) == '/')
-
-#endif
-
-
-#ifndef COPY_WHEN_ABSOLUTE
-#define COPY_WHEN_ABSOLUTE 0
-#endif
-
-#ifndef IS_ABSOLUTE_PATH
-#define IS_ABSOLUTE_PATH(path, len) \
- (IS_SLASH(path[0]))
-#endif
-
-#ifdef TSRM_EXPORTS
-#define CWD_EXPORTS
-#endif
-
-#ifdef TSRM_WIN32
-# ifdef CWD_EXPORTS
-# define CWD_API __declspec(dllexport)
-# else
-# define CWD_API __declspec(dllimport)
-# endif
-#else
-#define CWD_API
-#endif
-
-typedef struct _cwd_state {
- char *cwd;
- int cwd_length;
-} cwd_state;
-
-typedef int (*verify_path_func)(const cwd_state *);
-
-CWD_API void virtual_cwd_startup(void);
-CWD_API void virtual_cwd_shutdown(void);
-CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC);
-CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC);
-CWD_API int virtual_chdir(const char *path TSRMLS_DC);
-CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC);
-CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC);
-CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC);
-CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC);
-CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC);
-CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...);
-CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC);
-CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC);
-CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC);
-#ifndef TSRM_WIN32
-CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC);
-#endif
-CWD_API int virtual_unlink(const char *path TSRMLS_DC);
-CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC);
-CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC);
-CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC);
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC);
-#if HAVE_UTIME
-CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC);
-#endif
-CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC);
-#ifndef TSRM_WIN32
-CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC);
-#endif
-
-CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path);
-
-typedef struct _virtual_cwd_globals {
- cwd_state cwd;
-} virtual_cwd_globals;
-
-#ifdef ZTS
-# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
-#else
-# define CWDG(v) (cwd_globals.v)
-#endif
-
-/* The actual macros to be used in programs using TSRM
- * If the program defines VIRTUAL_DIR it will use the
- * virtual_* functions
- */
-
-#ifdef VIRTUAL_DIR
-
-#define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size TSRMLS_CC)
-#define VCWD_FOPEN(path, mode) virtual_fopen(path, mode TSRMLS_CC)
-/* Because open() has two modes, we have to macros to replace it */
-#define VCWD_OPEN(path, flags) virtual_open(path TSRMLS_CC, flags)
-#define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path TSRMLS_CC, flags, mode)
-#define VCWD_CREAT(path, mode) virtual_creat(path, mode TSRMLS_CC)
-#define VCWD_CHDIR(path) virtual_chdir(path TSRMLS_CC)
-#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir TSRMLS_CC)
-#define VCWD_GETWD(buf)
-#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
-#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
-#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
-#ifdef TSRM_WIN32
-#define VCWD_LSTAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
-#else
-#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
-#endif
-#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
-#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
-#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
-#define VCWD_OPENDIR(pathname) virtual_opendir(pathname TSRMLS_CC)
-#define VCWD_POPEN(command, type) virtual_popen(command, type TSRMLS_CC)
-#if HAVE_UTIME
-#define VCWD_UTIME(path, time) virtual_utime(path, time TSRMLS_CC)
-#endif
-#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode TSRMLS_CC)
-#ifndef TSRM_WIN32
-#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group TSRMLS_CC)
-#endif
-
-#else
-
-#define VCWD_GETCWD(buff, size) getcwd(buff, size)
-#define VCWD_FOPEN(path, mode) fopen(path, mode)
-#define VCWD_OPEN(path, flags) open(path, flags)
-#define VCWD_OPEN_MODE(path, flags, mode) open(path, flags, mode)
-#define VCWD_CREAT(path, mode) creat(path, mode)
-#define VCWD_RENAME(oldname, newname) rename(oldname, newname)
-#define VCWD_CHDIR(path) chdir(path)
-#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
-#define VCWD_GETWD(buf) getwd(buf)
-#define VCWD_STAT(path, buff) stat(path, buff)
-#define VCWD_LSTAT(path, buff) lstat(path, buff)
-#define VCWD_UNLINK(path) unlink(path)
-#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
-#define VCWD_RMDIR(pathname) rmdir(pathname)
-#define VCWD_OPENDIR(pathname) opendir(pathname)
-#define VCWD_POPEN(command, type) popen(command, type)
-
-#ifndef TSRM_WIN32
-#define VCWD_REALPATH(path, real_path) realpath(path, real_path)
-#else
-#define VCWD_REALPATH(path, real_path) strcpy(real_path, path)
-#endif
-
-#if HAVE_UTIME
-#define VCWD_UTIME(path, time) utime(path, time)
-#endif
-#define VCWD_CHMOD(path, mode) chmod(path, mode)
-#ifndef TSRM_WIN32
-#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
-#endif
-
-#endif
-
-#endif /* VIRTUAL_CWD_H */
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
deleted file mode 100644
index 09999af69e..0000000000
--- a/TSRM/tsrm_win32.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <io.h>
-#include <process.h>
-#include <time.h>
-
-#include "TSRM.h"
-
-#ifdef TSRM_WIN32
-#include <windows.h>
-#include "tsrm_win32.h"
-
-#ifdef ZTS
-static ts_rsrc_id win32_globals_id;
-#else
-static tsrm_win32_globals win32_globals;
-#endif
-
-static void tsrm_win32_ctor(tsrm_win32_globals *globals TSRMLS_DC)
-{
- globals->process = NULL;
- globals->shm = NULL;
- globals->process_size = 0;
- globals->shm_size = 0;
- globals->comspec = _strdup((GetVersion()<0x80000000)?"cmd.exe":"command.com");
-}
-
-static void tsrm_win32_dtor(tsrm_win32_globals *globals TSRMLS_DC)
-{
- shm_pair *ptr;
-
- if (globals->process) {
- free(globals->process);
- }
-
- if (globals->shm) {
- for (ptr = globals->shm; ptr < (globals->shm + globals->shm_size); ptr++) {
- UnmapViewOfFile(ptr->addr);
- CloseHandle(ptr->segment);
- UnmapViewOfFile(ptr->descriptor);
- CloseHandle(ptr->info);
- }
- free(globals->shm);
- }
-
- free(globals->comspec);
-}
-
-TSRM_API void tsrm_win32_startup(void)
-{
-#ifdef ZTS
- ts_allocate_id(&win32_globals_id, sizeof(tsrm_win32_globals), (ts_allocate_ctor)tsrm_win32_ctor, (ts_allocate_ctor)tsrm_win32_dtor);
-#else
- tsrm_win32_ctor(&win32_globals TSRMLS_CC);
-#endif
-}
-
-TSRM_API void tsrm_win32_shutdown(void)
-{
-#ifndef ZTS
- tsrm_win32_dtor(&win32_globals TSRMLS_CC);
-#endif
-}
-
-static process_pair *process_get(FILE *stream TSRMLS_DC)
-{
- process_pair *ptr;
- process_pair *newptr;
-
- for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) {
- if (ptr->stream == stream) {
- break;
- }
- }
-
- if (ptr < (TWG(process) + TWG(process_size))) {
- return ptr;
- }
-
- newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair));
- if (newptr == NULL) {
- return NULL;
- }
-
- TWG(process) = newptr;
- ptr = newptr + TWG(process_size);
- TWG(process_size)++;
- return ptr;
-}
-
-static shm_pair *shm_get(int key, void *addr)
-{
- shm_pair *ptr;
- shm_pair *newptr;
- TSRMLS_FETCH();
-
- for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
- if (!ptr->descriptor) {
- continue;
- }
- if (!addr && ptr->descriptor->shm_perm.key == key) {
- break;
- } else if (ptr->addr == addr) {
- break;
- }
- }
-
- if (ptr < (TWG(shm) + TWG(shm_size))) {
- return ptr;
- }
-
- newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
- if (newptr == NULL) {
- return NULL;
- }
-
- TWG(shm) = newptr;
- ptr = newptr + TWG(shm_size);
- TWG(shm_size)++;
- return ptr;
-}
-
-static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
- HANDLE copy, self = GetCurrentProcess();
- if (!DuplicateHandle(self, fh, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE)) {
- return NULL;
- }
- return copy;
-}
-
-TSRM_API FILE *popen(const char *command, const char *type)
-{
- FILE *stream = NULL;
- int fno, str_len = strlen(type), read, mode;
- STARTUPINFO startup;
- PROCESS_INFORMATION process;
- SECURITY_ATTRIBUTES security;
- HANDLE in, out;
- char *cmd;
- process_pair *proc;
- TSRMLS_FETCH();
-
- security.nLength = sizeof(SECURITY_ATTRIBUTES);
- security.bInheritHandle = TRUE;
- security.lpSecurityDescriptor = NULL;
-
- if (!str_len || !CreatePipe(&in, &out, &security, 2048L)) {
- return NULL;
- }
-
- memset(&startup, 0, sizeof(STARTUPINFO));
- memset(&process, 0, sizeof(PROCESS_INFORMATION));
-
- startup.cb = sizeof(STARTUPINFO);
- startup.dwFlags = STARTF_USESTDHANDLES;
- startup.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-
- read = (type[0] == 'r') ? TRUE : FALSE;
- mode = ((str_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
-
-
- if (read) {
- in = dupHandle(in, FALSE);
- startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
- startup.hStdOutput = out;
- } else {
- out = dupHandle(out, FALSE);
- startup.hStdInput = in;
- startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
- }
-
- cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c "));
- sprintf(cmd, "%s /c %s", TWG(comspec), command);
- if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &process)) {
- return NULL;
- }
- free(cmd);
-
- CloseHandle(process.hThread);
- proc = process_get(NULL TSRMLS_CC);
-
- if (read) {
- fno = _open_osfhandle((long)in, _O_RDONLY | mode);
- CloseHandle(out);
- } else {
- fno = _open_osfhandle((long)out, _O_WRONLY | mode);
- CloseHandle(in);
- }
-
- stream = _fdopen(fno, type);
- proc->prochnd = process.hProcess;
- proc->stream = stream;
- return stream;
-}
-
-TSRM_API int pclose(FILE *stream)
-{
- DWORD termstat = 0;
- process_pair *process;
- TSRMLS_FETCH();
-
- if ((process = process_get(stream TSRMLS_CC)) == NULL) {
- return 0;
- }
-
- fflush(process->stream);
- fclose(process->stream);
-
- WaitForSingleObject(process->prochnd, INFINITE);
- GetExitCodeProcess(process->prochnd, &termstat);
- process->stream = NULL;
- CloseHandle(process->prochnd);
-
- return termstat;
-}
-
-TSRM_API int shmget(int key, int size, int flags)
-{
- shm_pair *shm;
- char shm_segment[26], shm_info[29];
- HANDLE shm_handle, info_handle;
- BOOL created = FALSE;
-
- if (size < 0) {
- return -1;
- }
-
- sprintf(shm_segment, "TSRM_SHM_SEGMENT:%d", key);
- sprintf(shm_info, "TSRM_SHM_DESCRIPTOR:%d", key);
-
- shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
- info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
-
- if ((!shm_handle && !info_handle)) {
- if (flags & IPC_EXCL) {
- return -1;
- }
- if (flags & IPC_CREAT) {
- shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
- info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
- created = TRUE;
- }
- if ((!shm_handle || !info_handle)) {
- return -1;
- }
- }
-
- shm = shm_get(key, NULL);
- shm->segment = shm_handle;
- shm->info = info_handle;
- shm->descriptor = MapViewOfFileEx(shm->info, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
-
- if (created) {
- shm->descriptor->shm_perm.key = key;
- shm->descriptor->shm_segsz = size;
- shm->descriptor->shm_ctime = time(NULL);
- shm->descriptor->shm_cpid = getpid();
- shm->descriptor->shm_perm.mode = flags;
-
- shm->descriptor->shm_perm.cuid = shm->descriptor->shm_perm.cgid= 0;
- shm->descriptor->shm_perm.gid = shm->descriptor->shm_perm.uid = 0;
- shm->descriptor->shm_atime = shm->descriptor->shm_dtime = 0;
- shm->descriptor->shm_lpid = shm->descriptor->shm_nattch = 0;
- shm->descriptor->shm_perm.mode = shm->descriptor->shm_perm.seq = 0;
- }
-
- if (shm->descriptor->shm_perm.key != key || size > shm->descriptor->shm_segsz ) {
- CloseHandle(shm->segment);
- UnmapViewOfFile(shm->descriptor);
- CloseHandle(shm->info);
- return -1;
- }
-
- return key;
-}
-
-TSRM_API void *shmat(int key, const void *shmaddr, int flags)
-{
- shm_pair *shm = shm_get(key, NULL);
-
- if (!shm->segment) {
- return (void*)-1;
- }
-
- shm->descriptor->shm_atime = time(NULL);
- shm->descriptor->shm_lpid = getpid();
- shm->descriptor->shm_nattch++;
-
- shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
-
- return shm->addr;
-}
-
-TSRM_API int shmdt(const void *shmaddr)
-{
- shm_pair *shm = shm_get(0, (void*)shmaddr);
-
- if (!shm->segment) {
- return -1;
- }
-
- shm->descriptor->shm_dtime = time(NULL);
- shm->descriptor->shm_lpid = getpid();
- shm->descriptor->shm_nattch--;
-
- return UnmapViewOfFile(shm->addr) ? 0 : -1;
-}
-
-TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf) {
- shm_pair *shm = shm_get(key, NULL);
-
- if (!shm->segment) {
- return -1;
- }
-
- switch (cmd) {
- case IPC_STAT:
- memcpy(buf, shm->descriptor, sizeof(struct shmid_ds));
- return 0;
-
- case IPC_SET:
- shm->descriptor->shm_ctime = time(NULL);
- shm->descriptor->shm_perm.uid = buf->shm_perm.uid;
- shm->descriptor->shm_perm.gid = buf->shm_perm.gid;
- shm->descriptor->shm_perm.mode = buf->shm_perm.mode;
- return 0;
-
- case IPC_RMID:
- if (shm->descriptor->shm_nattch < 1) {
- shm->descriptor->shm_perm.key = -1;
- }
- return 0;
-
- default:
- return -1;
- }
-}
-#endif \ No newline at end of file
diff --git a/TSRM/tsrm_win32.h b/TSRM/tsrm_win32.h
deleted file mode 100644
index 7931beafc4..0000000000
--- a/TSRM/tsrm_win32.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef TSRM_WIN32_H
-#define TSRM_WIN32_H
-
-#include "TSRM.h"
-
-#ifdef TSRM_WIN32
-#include <windows.h>
-
-struct ipc_perm {
- int key;
- unsigned short uid;
- unsigned short gid;
- unsigned short cuid;
- unsigned short cgid;
- unsigned short mode;
- unsigned short seq;
-};
-
-struct shmid_ds {
- struct ipc_perm shm_perm;
- int shm_segsz;
- time_t shm_atime;
- time_t shm_dtime;
- time_t shm_ctime;
- unsigned short shm_cpid;
- unsigned short shm_lpid;
- short shm_nattch;
-};
-
-typedef struct {
- FILE *stream;
- HANDLE prochnd;
-} process_pair;
-
-typedef struct {
- void *addr;
- HANDLE info;
- HANDLE segment;
- struct shmid_ds *descriptor;
-} shm_pair;
-
-typedef struct {
- process_pair *process;
- shm_pair *shm;
- int process_size;
- int shm_size;
- char *comspec;
-} tsrm_win32_globals;
-
-#ifdef ZTS
-# define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
-#else
-# define TWG(v) (win32_globals.v)
-#endif
-
-#endif
-
-#define IPC_PRIVATE 0
-#define IPC_CREAT 00001000
-#define IPC_EXCL 00002000
-#define IPC_NOWAIT 00004000
-
-#define IPC_RMID 0
-#define IPC_SET 1
-#define IPC_STAT 2
-#define IPC_INFO 3
-
-#define SHM_R PAGE_READONLY
-#define SHM_W PAGE_READWRITE
-
-#define SHM_RDONLY FILE_MAP_READ
-#define SHM_RND FILE_MAP_WRITE
-#define SHM_REMAP FILE_MAP_COPY
-
-
-TSRM_API void tsrm_win32_startup(void);
-TSRM_API void tsrm_win32_shutdown(void);
-
-TSRM_API FILE *popen(const char *command, const char *type);
-TSRM_API int pclose(FILE *stream);
-
-TSRM_API int shmget(int key, int size, int flags);
-TSRM_API void *shmat(int key, const void *shmaddr, int flags);
-TSRM_API int shmdt(const void *shmaddr);
-TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
-
-#endif \ No newline at end of file
diff --git a/Zend/FlexLexer.h b/Zend/FlexLexer.h
deleted file mode 100644
index fd65258570..0000000000
--- a/Zend/FlexLexer.h
+++ /dev/null
@@ -1,186 +0,0 @@
-// $Header$
-
-// FlexLexer.h -- define interfaces for lexical analyzer classes generated
-// by flex
-
-// Copyright (c) 1993 The Regents of the University of California.
-// All rights reserved.
-//
-// This code is derived from software contributed to Berkeley by
-// Kent Williams and Tom Epperly.
-//
-// Redistribution and use in source and binary forms with or without
-// modification are permitted provided that: (1) source distributions retain
-// this entire copyright notice and comment, and (2) distributions including
-// binaries display the following acknowledgement: ``This product includes
-// software developed by the University of California, Berkeley and its
-// contributors'' in the documentation or other materials provided with the
-// distribution and in all advertising materials mentioning features or use
-// of this software. Neither the name of the University nor the names of
-// its contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-
-// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-// This file defines FlexLexer, an abstract class which specifies the
-// external interface provided to flex C++ lexer objects, and yyFlexLexer,
-// which defines a particular lexer class.
-//
-// If you want to create multiple lexer classes, you use the -P flag
-// to rename each yyFlexLexer to some other xxFlexLexer. You then
-// include <FlexLexer.h> in your other sources once per lexer class:
-//
-// #undef yyFlexLexer
-// #define yyFlexLexer xxFlexLexer
-// #include <FlexLexer.h>
-//
-// #undef yyFlexLexer
-// #define yyFlexLexer zzFlexLexer
-// #include <FlexLexer.h>
-// ...
-
-#ifndef FLEXLEXER_H
-// Never included before - need to define base class.
-#define FLEXLEXER_H
-#include <iostream.h>
-
-extern "C++" {
-
-struct yy_buffer_state;
-typedef int yy_state_type;
-
-class FlexLexer {
-public:
- virtual ~FlexLexer() { }
-
- const char* YYText() { return yytext; }
- int YYLeng() { return yyleng; }
-
- virtual void
- yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0;
- virtual struct yy_buffer_state*
- yy_create_buffer( istream* s, int size ) = 0;
- virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0;
- virtual void yyrestart( istream* s ) = 0;
-
- virtual int yylex() = 0;
-
- // Call yylex with new input/output sources.
- int yylex( istream* new_in, ostream* new_out = 0 )
- {
- switch_streams( new_in, new_out );
- return yylex();
- }
-
- // Switch to new input/output streams. A nil stream pointer
- // indicates "keep the current one".
- virtual void switch_streams( istream* new_in = 0,
- ostream* new_out = 0 ) = 0;
-
- int lineno() const { return yylineno; }
-
- int debug() const { return yy_flex_debug; }
- void set_debug( int flag ) { yy_flex_debug = flag; }
-
-protected:
- char* yytext;
- int yyleng;
- int yylineno; // only maintained if you use %option yylineno
- int yy_flex_debug; // only has effect with -d or "%option debug"
-};
-
-}
-#endif
-
-#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
-// Either this is the first time through (yyFlexLexerOnce not defined),
-// or this is a repeated include to define a different flavor of
-// yyFlexLexer, as discussed in the flex man page.
-#define yyFlexLexerOnce
-
-class yyFlexLexer : public FlexLexer {
-public:
- // arg_yyin and arg_yyout default to the cin and cout, but we
- // only make that assignment when initializing in yylex().
- yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 );
-
- virtual ~yyFlexLexer();
-
- void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
- struct yy_buffer_state* yy_create_buffer( istream* s, int size );
- void yy_delete_buffer( struct yy_buffer_state* b );
- void yyrestart( istream* s );
-
- virtual int yylex();
- virtual void switch_streams( istream* new_in, ostream* new_out );
-
-protected:
- virtual int LexerInput( char* buf, int max_size );
- virtual void LexerOutput( const char* buf, int size );
- virtual void LexerError( const char* msg );
-
- void yyunput( int c, char* buf_ptr );
- int yyinput();
-
- void yy_load_buffer_state();
- void yy_init_buffer( struct yy_buffer_state* b, istream* s );
- void yy_flush_buffer( struct yy_buffer_state* b );
-
- int yy_start_stack_ptr;
- int yy_start_stack_depth;
- int* yy_start_stack;
-
- void yy_push_state( int new_state );
- void yy_pop_state();
- int yy_top_state();
-
- yy_state_type yy_get_previous_state();
- yy_state_type yy_try_NUL_trans( yy_state_type current_state );
- int yy_get_next_buffer();
-
- istream* yyin; // input source for default LexerInput
- ostream* yyout; // output sink for default LexerOutput
-
- struct yy_buffer_state* yy_current_buffer;
-
- // yy_hold_char holds the character lost when yytext is formed.
- char yy_hold_char;
-
- // Number of characters read into yy_ch_buf.
- int yy_n_chars;
-
- // Points to current character in buffer.
- char* yy_c_buf_p;
-
- int yy_init; // whether we need to initialize
- int yy_start; // start state number
-
- // Flag which is used to allow yywrap()'s to do buffer switches
- // instead of setting up a fresh yyin. A bit of a hack ...
- int yy_did_buffer_switch_on_eof;
-
- // The following are not always needed, but may be depending
- // on use of certain flex features (like REJECT or yymore()).
-
- yy_state_type yy_last_accepting_state;
- char* yy_last_accepting_cpos;
-
- yy_state_type* yy_state_buf;
- yy_state_type* yy_state_ptr;
-
- char* yy_full_match;
- int* yy_full_state;
- int yy_full_lp;
-
- int yy_lp;
- int yy_looking_for_trail_begin;
-
- int yy_more_flag;
- int yy_more_len;
- int yy_more_offset;
- int yy_prev_more_offset;
-};
-
-#endif
diff --git a/Zend/LICENSE b/Zend/LICENSE
deleted file mode 100644
index 5837d7cf3c..0000000000
--- a/Zend/LICENSE
+++ /dev/null
@@ -1,56 +0,0 @@
---------------------------------------------------------------------
- The Zend Engine License, version 2.00
-Copyright (c) 1999-2002 Zend Technologies Ltd. All rights reserved.
---------------------------------------------------------------------
-
-Redistribution and use in source and binary forms, with or without
-modification, is permitted provided that the following conditions
-are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- 3. The names "Zend" and "Zend Engine" must not be used to endorse
- or promote products derived from this software without prior
- permission from Zend Technologies Ltd. For written permission,
- please contact license@zend.com.
-
- 4. Zend Technologies Ltd. may publish revised and/or new versions
- of the license from time to time. Each version will be given a
- distinguishing version number.
- Once covered code has been published under a particular version
- of the license, you may always continue to use it under the
- terms of that version. You may also choose to use such covered
- code under the terms of any subsequent version of the license
- published by Zend Technologies Ltd. No one other than Zend
- Technologies Ltd. has the right to modify the terms applicable
- to covered code created under this License.
-
- 5. Redistributions of any form whatsoever must retain the following
- acknowledgment:
- "This product includes the Zend Engine, freely available at
- http://www.zend.com"
-
- 6. All advertising materials mentioning features or use of this
- software must display the following acknowledgment:
- "The Zend Engine is freely available at http://www.zend.com"
-
-THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND
-ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND
-TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
---------------------------------------------------------------------
diff --git a/Zend/Makefile.am b/Zend/Makefile.am
deleted file mode 100644
index ee7a738369..0000000000
--- a/Zend/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-## Process this file with automake to produce Makefile.in -*- makefile -*-
-
-#CLEANFILES = zend_language_parser.c zend_language_parser.h zend_language_scanner.c zend_language_parser.output zend_ini_parser.c zend_ini_parser.h zend_ini_scanner.c zend_ini_parser.output
-
-AUTOMAKE_OPTIONS=foreign
-noinst_LTLIBRARIES=libZend.la
-
-libZend_la_SOURCES=\
- zend_language_parser.y zend_language_scanner.l \
- zend_ini_parser.y zend_ini_scanner.l \
- zend_alloc.c zend_compile.c zend_constants.c zend_dynamic_array.c \
- zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \
- zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
- zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
- zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
- zend_ini.c zend_qsort.c zend_objects.c
-
-libZend_la_LDFLAGS = @EXTRA_LIBS@
-
-# automake isn't too clever about "non-standard" use of lex and yacc
-
-$(libZend_la_OBJECTS): zend_language_parser.h
-
-zend_ini_scanner.lo: zend_ini_parser.h
-
-# Language parser/scanner rules
-
-zend_language_scanner.c: $(srcdir)/zend_language_scanner.l
- $(LEX) -Pzend -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_language_scanner.l
-
-zend_language_parser.h: zend_language_parser.c
-zend_language_parser.c: $(srcdir)/zend_language_parser.y
- $(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o zend_language_parser.c
-
-# INI parser/scanner rules
-
-zend_ini_parser.c: $(srcdir)/zend_ini_parser.y
- $(YACC) -p ini_ -v -d $(srcdir)/zend_ini_parser.y -o zend_ini_parser.c
-
-zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l
- $(LEX) -Pini_ -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_ini_scanner.l
-
-zend_ini_parser.h: zend_ini_parser.c
-
-depend:
-
-zend_execute.lo: $(srcdir)/zend_execute.c
- $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c
-
diff --git a/Zend/RFCs/001.txt b/Zend/RFCs/001.txt
deleted file mode 100644
index bf1d847b97..0000000000
--- a/Zend/RFCs/001.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-Revamped object model using object handles
-===========================================
-
-Background
-----------
-
-In the Zend Engine 1.0 (and its predecessor the PHP 3 scripting
-engine) the object model's design is that instantiated objects are
-language values. This means that when programmers are performing
-operations, such variable assignment and passing parameters to
-functions, objects are handled very similarly to the way other
-primitive types are handled such as integers and strings.
-Semantically this means that the whole object is being copied. The
-approach Java takes is different where one refers to objects by handle
-and not by value (one can think of a handle as an objects' ID).
-
-Need
-----
-
-Unfortunately, the approach taken up to now has severely limited the
-Zend Engine's object oriented model, both feature and simplicity
-wise. One of the main problems with the former approach is that object
-instantiation and duplication is very hard to control, a problem which
-can not only lead to inefficient development but also often to strange
-run-time behavior. Changing the object model to a handle oriented
-model will allow the addressing of many needs such as destructors,
-de-referencing method return values, tight control of object
-duplication and more.
-
-Overview
---------
-
-The proposed object model is very much influenced by the Java
-model. In general, when you create a new object you will be getting a
-handle to the object instead of the object itself. When this handle is
-sent to functions, assigned and copied it is only the handle which is
-copied/sent/assigned. The object itself is never copied nor
-duplicated. This results in all handles of this object to always point
-at the same object making it a very consistent solution and saving
-unnecessary duplication and confusing behavior.
-
-Functionality
--------------
-
-After this change the basic use of objects will be almost identical to
-previous versions of the scripting engine. However, you won't bump
-into awkward and confusing copying & destructing of objects. In order
-to create and use a new object instance you will do the following:
-$object = new MyClass(); $object->method();
-
-The previous code will assign $object the handle of a new instance of
-the class MyClass and call one of its methods.
-
-
-Consider the following code:
-
-1 class MyClass
-2 {
-3 function setMember($value)
-4 {
-5 $this->member = $value;
-6 }
-7
-8 function getMember()
-9 {
-10 return $this->member;
-11 }
-12 }
-13
-14 function foo($obj)
-15 {
-16 $obj->setMember("foo");
-17 }
-18
-19 $object = new MyClass();
-20 $object->setMember("bar");
-21 foo($object);
-22 print $object->getMember();
-
-Without the new Java-like handles, at line 20 the objects' data member
-member is set to the string value of "bar". Because of the internal
-representation of objects in the Zend Engine 1.0, the object is marked
-as a reference, and when it is sent by value to the function foo, it
-is duplicated (!). Therefore, the call to foo() on line 21 will
-result in the $obj->setMember("foo") call being called on a duplicate
-of $object. Line 22 will then result in "bar" being printed.
-
-This is how the scripting engine has worked until today. Most
-developers are probably unaware of the fact that they aren't always
-talking to the same object but often duplicates; others may have
-realized this can usually be solved by always passing objects by
-reference (unless a replica is actually desired, which is uncommon).
-
-The new object model will allow for a much more intuitive
-implementation of the code. On line 21, the object's handle (ID) is
-passed to foo() by value. Inside foo(), the object is fetched
-according to this handle and, therefore, the setMember() method is
-called on the originally instantiated object and not a copy. Line 22
-will therefore result in "foo" being printed. This approach gives
-developers tighter control of when objects are created and duplicated.
-An additional not-as-important benefit is that the object handle will
-be passed to foo() by value, which most probably will also save
-unnecessary duplication of the value containing the ID itself and thus
-additionally improving run-time performance.
-
-This was just a simple description of why the new object model solves
-awkward behavior and makes object handling much easier, intuitive and
-efficient. The importance of this change goes far beyond what is
-mentioned in this section as you will see in further sections which
-describe new features with a majority of them being based on this
-change.
-
-Compatibility Notes
---------------------
-
-Many PHP programmers aren't even aware of the copying quirks of the
-current object model and, therefore, there is a relatively good chance
-that the amount of PHP applications that will work out of the box or
-after a very small amount of modifications would be high.
-
-To simplify migration, version 2.0 will support an optional
-'auto-clone' feature, which will perform a cloning of the object
-whenever it would have been copied in version 1.0. Optionally, it
-will also be possible to request that the engine will emit an E_NOTICE
-message whenever such an automatic clone occurs, in order to allow
-developers to gradually migrate to the version 2.0-style behavior
-(without automatic clones).
-
-Dependencies
-------------
-
-The new object model is not dependent on other features. Many of the
-other Zend Engine 2.0 features, such as the $foo->bar()->barbara()
-syntax, destructors and others completely rely on this new object
-model.
-
diff --git a/Zend/RFCs/002.txt b/Zend/RFCs/002.txt
deleted file mode 100644
index 263c4116c9..0000000000
--- a/Zend/RFCs/002.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-Title: Zend 2.0 Namespaces
-Version: $Revision$
-Status: draft
-Maintainer: Stig S. Bakken <ssb@fast.no>
-Created: 2001-09-08
-Modified: 2001-09-08
-
-
-1. Background/Need
-==================
-
-PHP and Zend 1.0 have come to a point where a lot of reusable code is
-being written; from simple functions and classes to entire application
-frameworks. It is becoming increasingly difficult to avoid symbol
-name collisions with the current scoping methods.
-
-The symbol scopes available in Zend 1.0 are the global scope, the
-class scope and the function scope. All scopes but classes may
-contain variables, only the class and global scopes may contain
-functions, while only the global scope may contain constants and
-classes. This means that all of Zend 1.0's scoping methods are
-inherently limited for solving symbol name collision problems.
-
-
-2. Overview
-===========
-
-Namespaces in Zend 2.0 provide a way to manage the symbol collision
-problem by making it possible to define multiple symbol tables able to
-contain all types of symbols. Zend will get the notion of a current
-namespace, defaulting to the current global one. The current name
-space may be changed on a file-by-file basis. Symbols in other name
-spaces than the current one may be referenced using a new namespace
-operator. It will be possible to "import" symbols from one namespace
-into another.
-
-
-3. Functionality
-================
-
-3.1. Namespace Syntax
-=====================
-
-The namespace operator ":" is used to refer to symbols in other
-namespaces than the current one:
-
-Class: Namespace:class
-Function: Namespace:function
-Static method: Namespace:class::method
-Variable: $Namespace:variable
-Constant: Namespace:CONSTANT
-Class variable: $Namespace:class::variable
-
-To refer to symbols in the global namespace, symbols are prefixed with
-only the namespace operator:
-
-Class: :class
-Function: :function
-Static method: :class::method
-Variable: $:variable
-Constant: :CONSTANT
-Class variable: $:class::variable
-
-Note: $:variable will effectively be just another syntax for
-$GLOBALS['variable'].
-
-A namespace may have a name containing a ":", it is always the last
-":" character in the symbol qualifier that is the actual namespace
-operator:
-
-Class: Name:Space:class
-Function: Name:Space:function
-Static method: Name:Space:class::method
-Variable: $Name:Space:variable
-Constant: Name:Space:CONSTANT
-Class variable: $Name:Space:class::variable
-
-(Here, the ":" between "Name" and "Space" is part of the name, it is
-the one after "Space" that is the namespace operator.)
-
-
-3.2. Defining Namespaces
-========================
-
-Individual files may define a namespace that will apply to the entire
-file. If no "namespace" operator occurs in the file, it will be in
-the global namespace:
-
- 1 namespace HTML;
- 2
- 3 class Form {
- 4 function Form() {
- 5 // constructor
- 6 }
- 7 // ...
- 8 }
-
-Or with the "nested" name syntax:
-
- 1 namespace HTML:Form;
- 2
- 3 class Image {
- 4 var $src;
- 5 function Image($src) {
- 6 $this->src = $src;
- 7 }
- 8 // ...
- 9 }
-
-Code executed within the "HTML" namespace may refer to the Form class
-as just "Form". Code executed from within other namespaces has to
-refer to it as "HTML:Form". The "namespace" statement must occur
-before any other statements in the file.
-
-# [ssb 2001-09-08]:
-# Should it be possible to "add" symbols to a namespace by including a
-# second file with the same namespace statement?
-
-
-3.3. Importing Symbols
-======================
-
-It is possible to import symbols from another namespace into the
-current one with the "import" statement:
-
- import * from HTML; // all symbols
-
- import Form from HTML; // single symbols
-
- import Form,Table from HTML; // multiple symbols
-
-There is a potential for name clashes between symols of different
-types that have the same qualifier syntax. These are resolved in this
-order: class, function, constant.
-
-Optionally, the symbol type may be explicitly given to import (as
-"class", "function", "variable" or "constant"):
-
- import class Form from HTML;
-
-And finally, you may import all symbols of a given type:
-
- import constant * from HTML:Table;
-
-The namespace with its symbols must already be defined before using
-"import".
-
-
-4. Compatibility Notes
-======================
-
-Old code that does not take advantage of namespaces will run without
-modifications.
-
-
-5. Dependencies
-===============
-
-The class variable syntax depends on this class variables being
-implemented in the new ZE2 object model.
-
-
-6. Acknowledgements
-===================
-
-Andi Gutmans <andi@zend.com> and Zeev Suraski <zeev@zend.com> for
-initial ZE2 namespaces proposal
-
-Dean Hall <php@apt7.com> for the initial symbol qualification syntax
diff --git a/Zend/RFCs/003.txt b/Zend/RFCs/003.txt
deleted file mode 100644
index aa90691b19..0000000000
--- a/Zend/RFCs/003.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-Title: Loose type requirements for functions
-Version: $Revision$
-Status: draft
-Maintainer: Brian Moon <brianm@dealnews.com>
-Created: 2001-09-17
-Modified: 2001-09-17
-
-
-1. Background/Need
-==================
-
-Many internal function of PHP will reject parameters because of their
-type (the array and variable function come to mind). For userland
-this is not an easy task as there is no uniform way to do it. An
-addition to the engine for requiring loose types would allow
-delevopers to know that the data passed to their functions is of the
-correct type and reduce the need for duplicating the same code in
-every function to check for the type of data.
-
-
-2. Overview
-===========
-
-Loose typing mostly means evaluating the contents of the variable and
-not the type of the variable itself. The requirements for this would
-and should work much like several of the is_* functions do now.
-
-The typing of parameters would be optional and those not typed would
-simply continue to be treated as they are now.
-
-3. Functionality
-================
-
-3.1. Allowed Types
-==================
-
-Only loose types should be needed to ensure the data is usable by the
-function. Duplicating the functionallity of is_scalar, is_resource,
-is_array and is_object should give developers all the information they
-need to use a variable correctly.
-
-3.2. Syntax
-===========
-
-The current function syntax should be expanded to allow typing of
-variables inline in a C style.
-
-function foo ($var){
-}
-
-could be changed to require an array such as:
-
-function foo (array $var){
-}
-
-3.3. Errors
-===========
-
-Mis-matches in type should be reported as fatal errors and should halt
-the execution of a script as that function can not be run and code
-following could not reliably run.
-
-
-4. Compatibility Notes
-======================
-
-Old code that does not take advantage of this will run without
-modifications.
-
-
-
-
diff --git a/Zend/ZEND_CHANGES b/Zend/ZEND_CHANGES
deleted file mode 100644
index fda1c2ca7b..0000000000
--- a/Zend/ZEND_CHANGES
+++ /dev/null
@@ -1,256 +0,0 @@
-Changes in the Zend Engine 2.0
-
- * New object model.
-
- The Zend Engine's handling of objects has been completely
- changed in order to allow for new features, but also to increase
- its performance.
-
- Objects were handled in previous versions like primitive types
- (for instance integers and strings). The drawback of this method
- is, that semantically the whole object was copied when a
- variable was assigned or parameters were passed to a method. The
- new approach refers to objects by handle and not by value (one
- can think of a handle as an objects' ID).
-
- Many PHP programmers aren't even aware of the copying quirks of
- the old object model and, therefore, there is a relatively good
- chance that the amount of PHP applications that will work out of
- the box or after a very small amount of modifications would be
- high.
-
- To simplify migration, the Zend Engine 2.0 supports an optional
- 'auto-clone' feature, which performs a cloning of the object
- whenever it would have been copied in version 1.0. Optionally,
- it emits an E_NOTICE message whenever such an automatic clone
- occurs, in order to allow developers to gradually migrate to the
- version 2.0-style behavior (without automatic clones).
-
- * delete statement.
-
- The Zend Engine 1.0 had no means to force deletion of an object
- if there are still references to it. The newly introduces delete
- statement calls the object’s destructor and frees it even if the
- object is referenced by some other places in the engine. Other
- references to the deleted object become stale and trying to
- access them results in a fatal error.
-
- Note that if you have a user-defined function delete() in an old
- script, this script will yield a parser error with the Zend
- Engine 2.0, since 'delete' is now a reserved word.
-
- * Exceptions.
-
- The Zend Engine 1.0 had no exception handling. The Zend Engine 2.0
- introduces a exception model similar to that of other programming
- languages.
-
- Example
-
- try {
- code
-
- if (failure) {
- throw new MyException(Failure);
- }
-
- code
- } catch ($exception) {
- handle exception
-
- throw $exception; // Re-throw exception.
- }
-
- Old code that does not use exceptions will run without
- modifications.
-
- * Namespaces.
-
- The Zend Engine 1.0 provided only three scopes: the global
- scope, the class scope and the function scope. All scopes but
- classes could contain variables, only the class and global
- scopes could contain functions, while only the global scope
- could contain constants and classes. This means that all of the
- Zend Engine 1.0's scoping methods were inherently limited for
- solving symbol name collision problems.
-
- The Zend Engine 2.0 introduces the concept of namespaces to
- manage the symbol collision problem by making it possible to
- define multiple symbol tables able to contain all types of
- symbols. The Zend Engine is aware of a current namespace,
- defaulting to the current global one. The current namespace may
- be changed on a file-by-file basis. Symbols in other namespaces
- than the current one may be referenced using a new namespace
- operator. It is possible to "import" symbols from one namespace
- into another.
-
- Old code that does not take advantage of namespaces will run
- without modifications.
-
- * Static member variables of static classes can now be
- initialized.
-
- <?php
- class foo
- {
- static $my_static = 5;
- }
-
- print foo::$my_static;
- ?>
-
- * Class constants.
-
- <?php
- class foo
- {
- const hey = "hello";
- }
-
- print foo::hey;
- ?>
-
-Changes in the Zend Engine 1.0
-
- The Zend Engine was designed from the ground up for increased speed,
- reduced memory consumption and more reliable execution. We dare say
- it meets all of these goals and does so pretty well. Beyond that,
- there are several improvements in the language engine features:
-
- * References support.
-
- $foo = &$a; would make $foo and $a be two names to the same
- variable. This works with arrays as well, on either side; e.g.,
- $foo = &$a[7]; would make $foo and $a[7] be two names to the
- same variable. Changing one would change the other and vice
- versa.
-
- * Object overloading support.
-
- This feature allows various OO libraries to use the OO notation
- of PHP to access their functionality. Right now, no use is made
- of that feature, but we'd have a COM module ready by the time
- PHP 4.0 is released. A CORBA module would probably follow.
-
- * include() and eval() are now functions, and not statements.
-
- That means they return a value. The default return value from
- include() and eval() is 1, so that you can do if (include())
- without further coding. The return value may be changed by
- returning a value from the global scope of the included file or
- the evaluated string. For example, if 'return 7;' is executed in
- the global scope of foo.inc, include("foo.inc") would evaluate
- to 7.
-
- * Automatic resource deallocation.
-
- Several people have been bitten by the fact that PHP 3.0 had no
- concept of reference counting. The Zend Engine adds full
- reference counting for every value in the system, including
- resources. As soon as a resource is no longer referenced from
- any variable, it is automatically destroyed to save memory and
- resources. The most obvious example for the advantage in this is
- a loop that has an SQL query inside it, something like '$result
- = sql_query(...);'. In PHP 3.0, every iteration resulted in
- another SQL result-set allocated in the memory, and all of the
- result sets weren't destroyed until the end of the script's
- execution. With the Zend Engine, as soon as we overwrite an old
- result set with a new one, the old result set which is no longer
- referenced, is destroyed.
-
- * Full support for nesting arrays and objects within each other,
- in as many levels as you want.
-
- * true and false are now constants of type boolean.
-
- Comparing any other value to them would convert that value to a
- boolean first, and conduct the comparison later. That means, for
- example, that 5==true would evaluate to true (in PHP 3.0, true
- was nothing but a constant for the integer value of 1, so
- 5==true was identical to 5==1, which was false).
-
- * Runtime binding of function names.
-
- This complex name has a simple explanation - you can now call
- functions before they're declared!
-
- * Added here-docs support.
-
- * Added foreach.
-
- Two syntaxes supported:
-
- foreach(array_expr as $val) statement
- foreach(array_expr as $key => $val) statement
-
- * A true unset() implementation.
-
- A variable or element that is unset(), is now sent to oblivion
- in its entirely, no trace remains from it.
-
- * Output buffering support.
-
- Use ob_start() to begin output buffering, ob_end_flush() to end
- buffering and send out the buffered contents, ob_end_clean() to
- end buffering without sending the buffered contents, and
- ob_get_contents() to retreive the current contents of the output
- buffer. Header information (header(), content type, cookies) are
- not buffered. By turning on output buffering, you can
- effectively send header information all throughout your file,
- regardless of whether you've emitted body output or not.
-
- * Full variable reference within quoted strings:
-
- ${expr} - full indirect reference support for scalar
- variables
- {variable} - full variable support
-
- For example:
-
- $foo[5]["bar"] = "foobar";
- print "{$foo[5]["bar"]}"; // would print "foobar"
-
- * Ability to call member functions of other classes from within
- member functions or from the global scope.
-
- You can now, for example, override a parent function with a
- child function, and call the parent function from it.
-
- * Runtime information for classes (class name, parent, available
- functions, etc.).
-
- * Much more efficient syntax highlighter - runs much quicker,
- performs more reliably, and generates much tighter HTML.
-
- * A full-featured debugger has been integrated with the language
- (supports breakpoints, expression evaluation, step-in/over,
- function call backtrace, and more).
-
- The Zend Engine claims 100% compatability with the engine of PHP
- 3.0, and is shamelessly lying about it. Here's why:
-
- * Static variable initializers only accept scalar values
- (in PHP 3.0 they accepted any valid expression). The impact
- should be somewhere in between void and non existent, since
- initializing a static variable with anything but a simple
- static value makes no sense at all.
-
- * The scope of break and continue is local to that of an
- include()'d file or an eval()'d string. The impact should
- be somewhat smaller of the one above.
-
- * The return statement no longer works from a require()'d file. It
- hardly worked in PHP 3.0, so the impact should be fairly small. If
- you want this functionality - use include() instead.
-
- * unset() is no longer a function, but a statement.
-
- * The following letter combination is not supported within
- encapsulated strings: "{$". If you have a string that includes
- this letter combination, for example, print "{$somevar"; (which
- printed the letter { and the contents of the variable $somevar in
- PHP 3.0), it will result in a parse error with the Zend Engine.
- In this case, you would have to change the code to print
- "\{$somevar"; This incompatability is due to the full variable
- reference within quoted strings feature added in the Zend
- Engine.
diff --git a/Zend/Zend.dsp b/Zend/Zend.dsp
deleted file mode 100644
index 03a7bd73e2..0000000000
--- a/Zend/Zend.dsp
+++ /dev/null
@@ -1,506 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Zend" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=Zend - Win32 Release_inline
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Zend.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Zend.mak" CFG="Zend - Win32 Release_inline"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Zend - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "Zend - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "Zend - Win32 Release_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "Zend - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D ZEND_DEBUG=0 /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x40d /d "NDebug"
-# ADD RSC /l 0x40d /d "NDebug"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug" /D "_LIB" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x40d /d "_Debug"
-# ADD RSC /l 0x40d /d "_Debug"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "Zend___Win32_Release_inline"
-# PROP BASE Intermediate_Dir "Zend___Win32_Release_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Release_inline"
-# PROP Intermediate_Dir "Release_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D ZEND_DEBUG=0 /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x40d /d "NDebug"
-# ADD RSC /l 0x40d /d "NDebug"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "Zend - Win32 Release"
-# Name "Zend - Win32 Debug"
-# Name "Zend - Win32 Release_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\zend.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_alloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_API.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_builtin_functions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_compile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_constants.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute_API.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_extensions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_hash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_highlight.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_indent.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.c"
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_scanner.c"
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_list.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_llist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_objects.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_opcode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_operators.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ptr_stack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_qsort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_sprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_stack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_variables.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\FlexLexer.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_alloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_API.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_builtin_functions.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_compile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_constants.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_errors.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_extensions.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_fast_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_globals.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_highlight.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_indent.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini.h
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.h"
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_scanner.h"
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_list.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_llist.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_modules.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_operators.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ptr_stack.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_qsort.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_stack.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_variables.h
-# End Source File
-# End Group
-# Begin Group "Parsers"
-
-# PROP Default_Filter "y"
-# Begin Source File
-
-SOURCE=.\zend_ini_parser.y
-
-!IF "$(CFG)" == "Zend - Win32 Release"
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\zend_ini_parser.y
-
-BuildCmds= \
- bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-
-"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.y"
-
-!IF "$(CFG)" == "Zend - Win32 Release"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Scanners"
-
-# PROP Default_Filter "l"
-# Begin Source File
-
-SOURCE=.\flex.skl
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_scanner.l
-
-!IF "$(CFG)" == "Zend - Win32 Release"
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\zend_ini_scanner.l
-
-"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_scanner.l"
-
-!IF "$(CFG)" == "Zend - Win32 Release"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Text Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\ZEND_BUGS
-# End Source File
-# Begin Source File
-
-SOURCE=.\ZEND_CHANGES
-# End Source File
-# Begin Source File
-
-SOURCE=.\ZEND_TODO
-# End Source File
-# End Group
-# Begin Group "Resources"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\zend.ico
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/Zend/Zend.m4 b/Zend/Zend.m4
deleted file mode 100644
index 409c040833..0000000000
--- a/Zend/Zend.m4
+++ /dev/null
@@ -1,202 +0,0 @@
-dnl
-dnl $Id$
-dnl
-dnl This file contains Zend specific autoconf functions.
-dnl
-
-AC_DEFUN(LIBZEND_BISON_CHECK,[
-
-if test "$YACC" != "bison -y"; then
- AC_MSG_WARN(You will need bison if you want to regenerate the Zend parser.)
-else
- AC_MSG_CHECKING(bison version)
- set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'`
- if test "${1}" = "1" -a "${2}" -lt "28"; then
- AC_MSG_WARN(You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2}).)
- fi
- AC_MSG_RESULT(${1}.${2} (ok))
-fi
-
-])
-
-AC_DEFUN(LIBZEND_BASIC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_YACC])
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_CC_C_O])
-AC_REQUIRE([AC_PROG_LEX])
-AC_REQUIRE([AC_HEADER_STDC])
-AC_REQUIRE([AC_PROG_LIBTOOL])
-
-LIBZEND_BISON_CHECK
-
-dnl Ugly hack to get around a problem with gcc on AIX.
-if test "$CC" = "gcc" -a "$ac_cv_prog_cc_g" = "yes" -a \
- "`uname -sv`" = "AIX 4"; then
- CFLAGS=`echo $CFLAGS | sed -e 's/-g//'`
-fi
-
-dnl Hack to work around a Mac OS X cpp problem
-dnl Known versions needing this workaround are 5.3 and 5.4
-if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then
- CPPFLAGS="$CPPFLAGS -traditional-cpp"
-fi
-
-AC_CHECK_HEADERS(
-limits.h \
-malloc.h \
-string.h \
-unistd.h \
-stdarg.h \
-sys/types.h \
-sys/time.h \
-signal.h \
-unix.h \
-dlfcn.h)
-
-AC_TYPE_SIZE_T
-AC_TYPE_SIGNAL
-
-AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"])
-AC_CHECK_FUNC(dlopen,[AC_DEFINE(HAVE_LIBDL, 1,[ ])])
-
-dnl
-dnl Ugly hack to check if dlsym() requires a leading underscore in symbol name.
-dnl
-AC_MSG_CHECKING([whether dlsym() requires a leading underscore in symbol names])
-_LT_AC_TRY_DLOPEN_SELF([
- AC_MSG_RESULT(no)
-], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(DLSYM_NEEDS_UNDERSCORE, 1, [Define if dlsym() requires a leading underscore in symbol names. ])
-], [
- AC_MSG_RESULT(no)
-], [])
-
-dnl This is required for QNX and may be some BSD derived systems
-AC_CHECK_TYPE( uint, unsigned int )
-AC_CHECK_TYPE( ulong, unsigned long )
-
-
-dnl Checks for library functions.
-AC_FUNC_VPRINTF
-AC_FUNC_MEMCMP
-AC_FUNC_ALLOCA
-AC_CHECK_FUNCS(memcpy strdup getpid kill strtod strtol finite fpclass)
-AC_ZEND_BROKEN_SPRINTF
-
-AC_CHECK_FUNCS(finite isfinite isinf isnan)
-
-ZEND_FP_EXCEPT
-
-])
-
-
-
-
-
-AC_DEFUN(LIBZEND_ENABLE_DEBUG,[
-
-AC_ARG_ENABLE(debug,
-[ --enable-debug Compile with debugging symbols],[
- ZEND_DEBUG=$enableval
-],[
- ZEND_DEBUG=no
-])
-
-])
-
-
-
-
-
-
-
-
-
-
-
-
-AC_DEFUN(LIBZEND_OTHER_CHECKS,[
-
-AC_ARG_ENABLE(experimental-zts,
-[ --enable-experimental-zts This will most likely break your build],[
- ZEND_EXPERIMENTAL_ZTS=$enableval
-],[
- ZEND_EXPERIMENTAL_ZTS=no
-])
-
-AC_ARG_ENABLE(inline-optimization,
-[ --enable-inline-optimization If you have much memory and are using
- gcc, you might try this.],[
- ZEND_INLINE_OPTIMIZATION=$enableval
-],[
- ZEND_INLINE_OPTIMIZATION=no
-])
-
-AC_ARG_ENABLE(memory-limit,
-[ --enable-memory-limit Compile with memory limit support. ], [
- ZEND_MEMORY_LIMIT=$enableval
-],[
- ZEND_MEMORY_LIMIT=no
-])
-
-AC_MSG_CHECKING(whether to enable experimental ZTS)
-AC_MSG_RESULT($ZEND_EXPERIMENTAL_ZTS)
-
-AC_MSG_CHECKING(whether to enable inline optimization for GCC)
-AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
-
-AC_MSG_CHECKING(whether to enable a memory limit)
-AC_MSG_RESULT($ZEND_MEMORY_LIMIT)
-
-AC_MSG_CHECKING(whether to enable Zend debugging)
-AC_MSG_RESULT($ZEND_DEBUG)
-
-if test "$ZEND_DEBUG" = "yes"; then
- AC_DEFINE(ZEND_DEBUG,1,[ ])
- echo " $CFLAGS" | grep ' -g' >/dev/null || DEBUG_CFLAGS="-g"
- if test "$CFLAGS" = "-g -O2"; then
- CFLAGS=-g
- fi
- test -n "$GCC" && DEBUG_CFLAGS="$DEBUG_CFLAGS -Wall"
- test -n "$GCC" && test "$USE_MAINTAINER_MODE" = "yes" && \
- DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations"
-else
- AC_DEFINE(ZEND_DEBUG,0,[ ])
-fi
-
-test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
-
-if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then
- AC_DEFINE(ZTS,1,[ ])
- CFLAGS="$CFLAGS -DZTS"
- LIBZEND_CPLUSPLUS_CHECKS
-fi
-
-if test "$ZEND_MEMORY_LIMIT" = "yes"; then
- AC_DEFINE(MEMORY_LIMIT, 1, [Memory limit])
-else
- AC_DEFINE(MEMORY_LIMIT, 0, [Memory limit])
-fi
-
-
-changequote({,})
-if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
- INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
-else
- INLINE_CFLAGS="$CFLAGS"
-fi
-changequote([,])
-
-AC_C_INLINE
-
-AC_SUBST(INLINE_CFLAGS)
-
-])
-
-
-AC_DEFUN(LIBZEND_CPLUSPLUS_CHECKS,[
-
-])
-
diff --git a/Zend/ZendCore.dep b/Zend/ZendCore.dep
deleted file mode 100644
index 39a5c0fb0b..0000000000
--- a/Zend/ZendCore.dep
+++ /dev/null
@@ -1,258 +0,0 @@
-# Microsoft Developer Studio Generated Dependency File, included by ZendCore.mak
-
-.\zend_alloc.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
-
-
-.\alloca.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_config.w32.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_compile.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_modules.h"\
- ".\zend_operators.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_API.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
-
-
-.\zend_constants.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend_constants.h"\
- ".\zend_operators.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_execute.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_constants.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_modules.h"\
- ".\zend_operators.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_API.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
-
-
-.\zend_highlight.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_execute.h"\
- ".\zend_highlight.h"\
- ".\zend_llist.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_language_parser.tab.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
-
-
-.\zend_llist.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend_llist.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_opcode.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_modules.h"\
- ".\zend_operators.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_API.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
-
-
-.\zend_operators.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_operators.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
-
-
-.\zend_ptr_stack.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend_ptr_stack.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_stack.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend_stack.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_variables.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_constants.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_modules.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_API.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
- ".\zend_list.h"\
-
-
-.\zend.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend_operators.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_API.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_compile.h"\
- ".\zend_config.w32.h"\
- ".\zend_constants.h"\
- ".\zend_execute.h"\
- ".\zend_llist.h"\
- ".\zend_modules.h"\
- ".\zend_operators.h"\
- ".\zend_ptr_stack.h"\
- ".\zend_stack.h"\
- ".\zend_variables.h"\
- ".\zend.h"\
- ".\zend_API.h"\
- ".\zend_errors.h"\
- ".\zend_globals.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
- ".\zend_list.h"\
-
-
-.\zend_hash.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_config.w32.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
-
-
-.\zend_ini.c : \
- "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
- ".\zend_alloc.h"\
- ".\zend_config.w32.h"\
- ".\zend.h"\
- ".\zend_errors.h"\
- ".\zend_hash.h"\
- ".\zend_ini.h"\
-
-
-!IF "$(CFG)" == "ZendCore - Win32 Release"
-
-!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
-
-!ENDIF
-
-!IF "$(CFG)" == "ZendCore - Win32 Release"
-
-!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
-
-!ENDIF
-
-!IF "$(CFG)" == "ZendCore - Win32 Release"
-
-!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
-
-!ENDIF
-
-!IF "$(CFG)" == "ZendCore - Win32 Release"
-
-!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
-
-!ENDIF
-
diff --git a/Zend/ZendTS.dsp b/Zend/ZendTS.dsp
deleted file mode 100644
index 573a41397e..0000000000
--- a/Zend/ZendTS.dsp
+++ /dev/null
@@ -1,659 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ZendTS" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=ZendTS - Win32 Release_TSDbg
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ZendTS.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ZendTS.mak" CFG="ZendTS - Win32 Release_TSDbg"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ZendTS - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "ZendTS - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "ZendTS - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE "ZendTS - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug_TS" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x40d /d "NDebug_TS"
-# ADD RSC /l 0x40d /d "NDebug_TS"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug_TS" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug_TS" /D ZEND_DEBUG=1 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x40d /d "_Debug_TS"
-# ADD RSC /l 0x40d /d "_Debug_TS"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "ZendTS___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "ZendTS___Win32_Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x40d /d "NDebug_TS"
-# ADD RSC /l 0x40d /d "NDebug_TS"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Output_Dir "ZendTS___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "ZendTS___Win32_Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Output_Dir "Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x40d /d "NDebug_TS"
-# ADD RSC /l 0x40d /d "NDebug_TS"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "ZendTS - Win32 Release_TS"
-# Name "ZendTS - Win32 Debug_TS"
-# Name "ZendTS - Win32 Release_TS_inline"
-# Name "ZendTS - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\zend.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_alloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_API.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_builtin_functions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_compile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_constants.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_dynamic_array.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute_API.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_extensions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_hash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_highlight.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_indent.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.c"
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_language_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_list.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_llist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_objects.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_opcode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_operators.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ptr_stack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_qsort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_sprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_stack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_variables.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\FlexLexer.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_alloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_API.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_builtin_functions.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_compile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_constants.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_dynamic_array.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_errors.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_execute_locks.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_extensions.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_fast_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_globals.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_globals_macros.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_highlight.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_indent.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_parser.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_scanner.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_istdiostream.h
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.h"
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_scanner.h"
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_list.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_llist.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_modules.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_objects.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_operators.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ptr_stack.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_qsort.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_stack.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_variables.h
-# End Source File
-# End Group
-# Begin Group "Parsers"
-
-# PROP Default_Filter "y"
-# Begin Source File
-
-SOURCE=.\zend_ini_parser.y
-
-!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\zend_ini_parser.y
-
-BuildCmds= \
- bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-
-"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\zend_ini_parser.y
-
-BuildCmds= \
- bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-
-"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\zend_ini_parser.y
-
-BuildCmds= \
- bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-
-"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\zend_ini_parser.y
-
-BuildCmds= \
- bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-
-"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_parser.y"
-
-!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputDir=.
-InputPath=".\zend_language_parser.y"
-
-BuildCmds= \
- bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-
-"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Scanners"
-
-# PROP Default_Filter "l"
-# Begin Source File
-
-SOURCE=.\flex.skl
-# End Source File
-# Begin Source File
-
-SOURCE=.\zend_ini_scanner.l
-
-!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
-
-# Begin Custom Build
-InputPath=.\zend_ini_scanner.l
-
-"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
-
-# Begin Custom Build
-InputPath=.\zend_ini_scanner.l
-
-"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
-
-# Begin Custom Build
-InputPath=.\zend_ini_scanner.l
-
-"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputPath=.\zend_ini_scanner.l
-
-"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=".\zend_language_scanner.l"
-
-!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputPath=".\zend_language_scanner.l"
-
-"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Text Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\LICENSE
-# End Source File
-# Begin Source File
-
-SOURCE=.\ZEND_BUGS
-# End Source File
-# Begin Source File
-
-SOURCE=.\ZEND_CHANGES
-# End Source File
-# End Group
-# Begin Group "Resources"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\zend.ico
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/Zend/acconfig.h b/Zend/acconfig.h
deleted file mode 100644
index d5cfefee44..0000000000
--- a/Zend/acconfig.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#define ZEND_API
-#define ZEND_DLEXPORT
-
-@TOP@
-
-#undef uint
-#undef ulong
-
-/* Define if you want to enable memory limit support */
-#define MEMORY_LIMIT 0
-
-@BOTTOM@
-
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#ifdef HAVE_IEEEFP_H
-# include <ieeefp.h>
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#if ZEND_BROKEN_SPRINTF
-int zend_sprintf(char *buffer, const char *format, ...);
-#else
-# define zend_sprintf sprintf
-#endif
-
-#include <math.h>
-
-#ifdef HAVE_ISNAN
-#define zend_isnan(a) isnan(a)
-#elif defined(NAN)
-#define zend_isnan(a) (((a)==NAN)?1:0)
-#elif defined(HAVE_FPCLASS)
-#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
-#else
-#define zend_isnan(a) 0
-#endif
-
-#ifdef HAVE_ISINF
-#define zend_isinf(a) isinf(a)
-#elif defined(INFINITY)
-/* Might not work, but is required by ISO C99 */
-#define zend_isinf(a) (((a)==INFINITY)?1:0)
-#elif defined(HAVE_FPCLASS)
-#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
-#else
-#define zend_isinf(a) 0
-#endif
-
-#ifdef HAVE_FINITE
-#define zend_finite(a) finite(a)
-#elif defined(HAVE_ISFINITE) || defined(isfinite)
-#define zend_finite(a) isfinite(a)
-#elif defined(fpclassify)
-#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
-#else
-#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4
deleted file mode 100644
index 395f7220db..0000000000
--- a/Zend/acinclude.m4
+++ /dev/null
@@ -1,47 +0,0 @@
-dnl $Id$
-dnl
-dnl This file contains local autoconf functions.
-
-AC_DEFUN(ZEND_FP_EXCEPT,[
- AC_CACHE_CHECK(whether fp_except is defined, ac_cv_type_fp_except,[
- AC_TRY_COMPILE([
-#include <floatingpoint.h>
-],[
-fp_except x = (fp_except) 0;
-],[
- ac_cv_type_fp_except=yes
-],[
- ac_cv_type_fp_except=no
-],[
- ac_cv_type_fp_except=no
-])])
- if test "$ac_cv_type_fp_except" = "yes"; then
- AC_DEFINE(HAVE_FP_EXCEPT, 1, [whether floatingpoint.h defines fp_except])
- fi
-])
-
-dnl
-dnl Check for broken sprintf()
-dnl
-AC_DEFUN(AC_ZEND_BROKEN_SPRINTF,[
- AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
- AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
- ac_cv_broken_sprintf=no
- ],[
- ac_cv_broken_sprintf=yes
- ],[
- ac_cv_broken_sprintf=no
- ])
- ])
- if test "$ac_cv_broken_sprintf" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(ZEND_BROKEN_SPRINTF, $ac_result, [Whether sprintf is broken])
-])
-
-AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
- LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
-])
-
diff --git a/Zend/build.mk b/Zend/build.mk
deleted file mode 100644
index 6105ff12c4..0000000000
--- a/Zend/build.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Makefile to generate build tools
-#
-# Standard usage:
-# make -f build.mk
-#
-# Written by Sascha Schumann
-#
-# $Id$
-
-
-LT_TARGETS = ltmain.sh ltconfig
-
-config_h_in = zend_config.h.in
-
-makefile_am_files = Makefile.am
-makefile_in_files = $(makefile_am_files:.am=.in)
-makefile_files = $(makefile_am_files:e.am=e)
-
-targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
-
-all: $(targets)
-
-clean:
- rm -f $(targets)
-
-$(LT_TARGETS):
- rm -f $(LT_TARGETS)
- libtoolize --automake $(AMFLAGS) -f
-
-$(makefile_in_files): $(makefile_am_files)
- automake -a -i $(AMFLAGS) $(makefile_files)
-
-aclocal.m4: configure.in acinclude.m4
- aclocal
-
-$(config_h_in): configure.in acconfig.h
-# explicitly remove target since autoheader does not seem to work
-# correctly otherwise (timestamps are not updated)
- @rm -f $@
- autoheader
-
-configure: aclocal.m4 configure.in
- autoconf
diff --git a/Zend/buildconf b/Zend/buildconf
deleted file mode 100755
index fe8dee6f76..0000000000
--- a/Zend/buildconf
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-case "$1" in
---copy)
- automake_flags=--copy
- shift
-;;
-esac
-
-libtoolize --force --automake $automake_flags
-
-mv aclocal.m4 aclocal.m4.old 2>/dev/null
-aclocal
-if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}aclocal.m4"
- mv aclocal.m4.old aclocal.m4
-else
- echo "buildconf: created or modified ${1}aclocal.m4"
-fi
-
-autoheader
-
-automake --add-missing --include-deps $automake_flags
-
-mv configure configure.old 2>/dev/null
-autoconf
-if cmp configure.old configure > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}configure"
- mv configure.old configure
-else
- echo "buildconf: created or modified ${1}configure"
-fi
-
diff --git a/Zend/configure.in b/Zend/configure.in
deleted file mode 100644
index ea2a24adf3..0000000000
--- a/Zend/configure.in
+++ /dev/null
@@ -1,45 +0,0 @@
-dnl $Id$
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT(zend.c)
-AM_INIT_AUTOMAKE(zend, 0.80A, nodefine)
-AM_CONFIG_HEADER(zend_config.h)
-AM_SANITY_CHECK
-AM_MAINTAINER_MODE
-AC_PROG_CC
-AM_PROG_LEX
-AM_PROG_CC_STDC
-ZEND_VERSION=$VERSION
-
-dnl We want this one before the checks, so the checks can modify CFLAGS.
-test -z "$CFLAGS" && auto_cflags=1
-
-sinclude(Zend.m4)
-
-LIBZEND_BASIC_CHECKS
-
-AM_PROG_LIBTOOL
-if test "$enable_debug" != "yes"; then
- AM_SET_LIBTOOL_VARIABLE([--silent])
-fi
-
-dnl
-dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary
-dnl and source packages. This should be harmless on other OSs.
-dnl
-if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then
- CFLAGS="$CFLAGS -I/usr/pkg/include"
- LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
-fi
-
-LIBZEND_ENABLE_DEBUG
-LIBZEND_OTHER_CHECKS
-
-EXTRA_LIBS="$LIBS"
-LIBS=""
-AC_SUBST(EXTRA_LIBS)
-AC_OUTPUT(Makefile)
-
-# Local Variables:
-# tab-width: 4
-# End:
diff --git a/Zend/flex.skl b/Zend/flex.skl
deleted file mode 100644
index 30b944e23a..0000000000
--- a/Zend/flex.skl
+++ /dev/null
@@ -1,1628 +0,0 @@
-/* A Lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header$
- */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-%-
-#include <stdio.h>
-%*
-
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
-
-
-#ifdef __cplusplus
-
-#include <stdlib.h>
-%+
-class istream;
-%*
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_PROTOS
-#define YY_USE_CONST
-
-#endif /* __STDC__ */
-#endif /* ! __cplusplus */
-
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-#undef YY_USE_PROTOS
-#define YY_USE_PROTOS
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN yy_start = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START ((yy_start - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( SCNG(yy_in) TSRMLS_CC )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#define YY_BUF_SIZE 16384
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-extern int yyleng;
-%-
-%*
-
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, yytext_ptr TSRMLS_CC )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
-
-struct yy_buffer_state
- {
-%-
- FILE *yy_input_file;
-%+
- istream* yy_input_file;
-%*
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
- };
-
-%- Standard (non-C++) definition
-#define yy_current_buffer SCNG(current_buffer)
-#define yy_hold_char SCNG(_yy_hold_char)
-%*
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- */
-#define YY_CURRENT_BUFFER yy_current_buffer
-
-
-%- Standard (non-C++) definition
-/* yy_hold_char holds the character lost when yytext is formed. */
-
-#if 0
-static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-#endif
-
-/* Points to current character in buffer. */
-#define yy_c_buf_p SCNG(c_buf_p)
-#define yy_init SCNG(init)
-#define yy_start SCNG(start)
-
-#ifdef ZTS
-#define TSRMLS_D void ***tsrm_ls
-#define TSRMLS_DC , TSRMLS_D
-#define TSRMLS_C tsrm_ls
-#define TSRMLS_CC , TSRMLS_C
-#else
-#define TSRMLS_D
-#define TSRMLS_DC
-#define TSRMLS_C
-#define TSRMLS_CC
-#endif
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
- */
-/* static int yy_did_buffer_switch_on_eof; */
-#define yy_did_buffer_switch_on_eof SCNG(_yy_did_buffer_switch_on_eof)
-
-void yyrestart YY_PROTO(( FILE *input_file TSRMLS_DC ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer TSRMLS_DC ));
-void yy_load_buffer_state YY_PROTO(( TSRMLS_D ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size TSRMLS_DC ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b TSRMLS_DC ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file TSRMLS_DC ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b TSRMLS_DC ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer TSRMLS_CC )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size TSRMLS_DC ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str TSRMLS_DC ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len TSRMLS_DC ));
-
-%*
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC ); \
- yy_current_buffer->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
-
-%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
-#undef yyleng
-#define yyleng SCNG(yy_leng)
-#undef yytext
-#define yytext SCNG(yy_text)
-#undef yytext_ptr
-#define yytext_ptr SCNG(yy_text)
-#undef yyin
-#define yyin SCNG(yy_in)
-#undef yyout
-#define yyout SCNG(yy_out)
-#undef yy_last_accepting_state
-#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
-#undef yy_last_accepting_cpos
-#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
-#undef yy_more_flag
-#define yy_more_flag SCNG(_yy_more_flag)
-#undef yy_more_len
-#define yy_more_len SCNG(_yy_more_len)
-
-
-%- Standard (non-C++) definition
-static yy_state_type yy_get_previous_state YY_PROTO(( TSRMLS_D ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state TSRMLS_DC ));
-static int yy_get_next_buffer YY_PROTO(( TSRMLS_D ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-%*
-
-#undef TSRMLS_D
-#undef TSRMLS_DC
-#undef TSRMLS_C
-#undef TSRMLS_CC
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
-%% code to fiddle yytext and yyleng for yymore() goes here
- yy_hold_char = *yy_cp; \
- *yy_cp = '\0'; \
-%% code to copy yytext_ptr to yytext[] goes here, if %array
- yy_c_buf_p = yy_cp;
-
-#undef yyleng
-#undef yytext
-#undef yytext_ptr
-#undef yyin
-#undef yyout
-#undef yy_last_accepting_state
-#undef yy_last_accepting_cpos
-#undef yy_more_flag
-#undef yy_more_len
-
-
-%% data tables for the DFA and the user's section 1 definitions go here
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
-#else
-extern int yywrap YY_PROTO(( void ));
-#endif
-#endif
-
-%-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr TSRMLS_DC ));
-#endif
-%*
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
-#endif
-
-#ifndef YY_NO_INPUT
-%- Standard (non-C++) definition
-#ifdef __cplusplus
-static int 3 YY_PROTO(( TSRMLS_D ));
-#else
-static int input YY_PROTO(( TSRMLS_D ));
-#endif
-%*
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state TSRMLS_DC ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( TSRMLS_D ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-
-#ifndef ECHO
-%- Standard (non-C++) definition
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, SCNG(yy_out) )
-%+ C++ definition
-#define ECHO LexerOutput( yytext, yyleng )
-%*
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-%% fread()/read() definition of YY_INPUT goes here unless we're doing C++
-%+ C++ definition
- if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
-%*
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-%-
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-%+
-#define YY_FATAL_ERROR(msg) LexerError( msg )
-%*
-#endif
-
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-%- Standard (non-C++) definition
-#define YY_DECL int yylex YY_PROTO(( void ))
-%+ C++ definition
-#define YY_DECL int yyFlexLexer::yylex()
-%*
-#endif
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-%% YY_RULE_SETUP definition goes here
-
-YY_DECL
- {
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-%% user's declarations go here
-
- if ( yy_init )
- {
- yy_init = 0;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! yy_start )
- yy_start = 1; /* first start state */
-
- if ( ! SCNG(yy_in) )
-%-
- SCNG(yy_in) = stdin;
-%+
- SCNG(yy_in) = &cin;
-%*
-
- if ( ! SCNG(yy_out) )
-%-
- SCNG(yy_out) = stdout;
-%+
- SCNG(yy_out) = &cout;
-%*
-
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC );
-
- yy_load_buffer_state(TSRMLS_C);
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
-%% yymore()-related code goes here
- yy_cp = yy_c_buf_p;
-
- /* Support of yytext. */
- *yy_cp = yy_hold_char;
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
-%% code to set up and find next match goes here
-
-yy_find_action:
-%% code to find the action number goes here
-
- YY_DO_BEFORE_ACTION;
-
-%% code for yylineno update goes here
-
-do_action: /* This label is used only to access EOF actions. */
-
-%% debug code goes here
-
- switch ( yy_act )
- { /* beginning of action switch */
-%% actions go here
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- SCNG(yy_n_chars) = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = SCNG(yy_in);
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state(TSRMLS_C);
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state TSRMLS_CC );
-
- yy_bp = yytext_ptr + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
-%% code to do back-up for compressed tables and set up yy_cp goes here
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer(TSRMLS_C) )
- {
- case EOB_ACT_END_OF_FILE:
- {
- yy_did_buffer_switch_on_eof = 0;
-
- if ( yywrap() )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * yytext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state(TSRMLS_C);
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)];
-
- yy_current_state = yy_get_previous_state(TSRMLS_C);
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
- } /* end of yylex */
-
-%+
-yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout )
- {
- SCNG(yy_in) = arg_yyin;
- SCNG(yy_out) = arg_yyout;
- yy_c_buf_p = 0;
- yy_init = 1;
- yy_start = 0;
- yy_flex_debug = 0;
- yylineno = 1; // this will only get updated if %option yylineno
-
- yy_did_buffer_switch_on_eof = 0;
-
- yy_looking_for_trail_begin = 0;
- yy_more_flag = 0;
- yy_more_len = 0;
- yy_more_offset = yy_prev_more_offset = 0;
-
- yy_start_stack_ptr = yy_start_stack_depth = 0;
- yy_start_stack = 0;
-
- yy_current_buffer = 0;
-
-#ifdef YY_USES_REJECT
- yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];
-#else
- yy_state_buf = 0;
-#endif
- }
-
-yyFlexLexer::~yyFlexLexer()
- {
- delete yy_state_buf;
- yy_delete_buffer( yy_current_buffer TSRMLS_CC );
- }
-
-void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )
- {
- if ( new_in )
- {
- yy_delete_buffer( SCNG(yy_current_buffer TSRMLS_CC ) );
- yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE TSRMLS_CC ) TSRMLS_CC );
- }
-
- if ( new_out )
- SCNG(yy_out) = new_out;
- }
-
-int yyFlexLexer::LexerInput( char* buf, int max_size )
- {
- if ( SCNG(yy_in)->eof() || SCNG(yy_in)->fail() )
- return 0;
-
- if (yy_current_buffer->yy_is_interactive) {
- SCNG(yy_in)->get( buf[0] );
-
- if ( SCNG(yy_in)->eof() )
- return 0;
-
- if ( SCNG(yy_in)->bad() )
- return -1;
-
- return 1;
- } else {
- (void) SCNG(yy_in)->read( buf, max_size );
-
- if ( SCNG(yy_in)->bad() )
- return -1;
- else
- return SCNG(yy_in)->gcount();
- }
- }
-
-void yyFlexLexer::LexerOutput( const char* buf, int size )
- {
- (void) SCNG(yy_out)->write( buf, size );
- }
-%*
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-
-%-
-static int yy_get_next_buffer(TSRMLS_D)
-%+
-int yyFlexLexer::yy_get_next_buffer(TSRMLS_D)
-%*
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
- register int number_to_move, i;
- int ret_val;
-
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars) + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( yy_current_buffer->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- yy_current_buffer->yy_n_chars = SCNG(yy_n_chars) = 0;
-
- else
- {
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
- YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- SCNG(yy_n_chars), num_to_read );
-
- yy_current_buffer->yy_n_chars = SCNG(yy_n_chars);
- }
-
- if ( SCNG(yy_n_chars) == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( SCNG(yy_in) TSRMLS_CC );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- SCNG(yy_n_chars) += number_to_move;
- yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
- return ret_val;
- }
-
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-%-
-static yy_state_type yy_get_previous_state(TSRMLS_D)
-%+
-yy_state_type yyFlexLexer::yy_get_previous_state(TSRMLS_D)
-%*
- {
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
-%% code to get the start state into yy_current_state goes here
-
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
- {
-%% code to find the next state goes here
- }
-
- return yy_current_state;
- }
-
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
-
-%-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state TSRMLS_DC )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state TSRMLS_CC )
-yy_state_type yy_current_state;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state TSRMLS_DC )
-%*
- {
- register int yy_is_jam;
-%% code to find the next state, and perhaps do backing up, goes here
-
- return yy_is_jam ? 0 : yy_current_state;
- }
-
-
-%-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp TSRMLS_DC )
-#else
-static void yyunput( c, yy_bp TSRMLS_CC )
-int c;
-register char *yy_bp;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-void yyFlexLexer::yyunput( int c, register char* yy_bp TSRMLS_DC )
-%*
- {
- register char *yy_cp = yy_c_buf_p;
-
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = SCNG(yy_n_chars) + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
- register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
-
- while ( source > yy_current_buffer->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- SCNG(yy_n_chars) = yy_current_buffer->yy_buf_size;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
-%% update yylineno here
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-%-
-#endif /* ifndef YY_NO_UNPUT */
-%*
-
-
-%-
-#ifdef __cplusplus
-static int yyinput(TSRMLS_D)
-#else
-static int input(TSRMLS_C)
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-int yyFlexLexer::yyinput(TSRMLS_D)
-%*
- {
- int c;
-
- *yy_c_buf_p = yy_hold_char;
-
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] )
- /* This was really a NUL. */
- *yy_c_buf_p = '\0';
-
- else
- { /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
-
- switch ( yy_get_next_buffer(TSRMLS_C) )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- yyrestart( SCNG(yy_in) TSRMLS_CC );
-
- /* fall through */
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( yywrap() )
- return EOF;
-
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput(TSRMLS_C);
-#else
- return input(TSRMLS_C);
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
-
-%% update BOL and yylineno
-
- return c;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file TSRMLS_DC )
-#else
-void yyrestart( input_file TSRMLS_CC )
-FILE *input_file;
-#endif
-%+
-void yyFlexLexer::yyrestart( istream* input_file TSRMLS_DC )
-%*
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC );
-
- yy_init_buffer( yy_current_buffer, input_file TSRMLS_CC );
- yy_load_buffer_state(TSRMLS_C);
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer TSRMLS_DC)
-#else
-void yy_switch_to_buffer( new_buffer TSRMLS_CC)
-YY_BUFFER_STATE new_buffer;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer TSRMLS_DC )
-%*
- {
- if ( yy_current_buffer == new_buffer )
- return;
-
- if ( yy_current_buffer )
- {
- /* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = SCNG(yy_n_chars);
- }
-
- yy_current_buffer = new_buffer;
- yy_load_buffer_state(TSRMLS_C);
-
- /* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
- * to go ahead and always set it.
- */
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( TSRMLS_D )
-#else
-void yy_load_buffer_state(TSRMLS_C)
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-void yyFlexLexer::yy_load_buffer_state()
-%*
- {
- SCNG(yy_n_chars) = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- SCNG(yy_in) = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size TSRMLS_DC )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size TSRMLS_CC )
-FILE *file;
-int size;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( istream* file, int size TSRMLS_DC )
-%*
- {
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- yy_init_buffer( b, file TSRMLS_CC );
-
- return b;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b TSRMLS_DC )
-#else
-void yy_delete_buffer( b TSRMLS_CC )
-YY_BUFFER_STATE b;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b TSRMLS_DC )
-%*
- {
- if ( ! b )
- return;
-
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
-
-%-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file TSRMLS_DC )
-#else
-void yy_init_buffer( b, file TSRMLS_CC )
-YY_BUFFER_STATE b;
-FILE *file;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-
-%+
-extern "C" int isatty YY_PROTO(( int ));
-void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, istream* file TSRMLS_DC )
-%*
-
- {
- yy_flush_buffer( b TSRMLS_CC );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
-%-
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
-%+
- b->yy_is_interactive = (file == (istream *) &cin) ? 1 : 0;
-%*
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b TSRMLS_DC )
-#else
-void yy_flush_buffer( b TSRMLS_CC )
-YY_BUFFER_STATE b;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-
-%+
-void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b TSRMLS_DC )
-%*
- {
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == yy_current_buffer )
- yy_load_buffer_state(TSRMLS_C);
- }
-%*
-
-
-#ifndef YY_NO_SCAN_BUFFER
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size TSRMLS_DC )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size TSRMLS_CC )
-char *base;
-yy_size_t size;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
- {
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- yy_switch_to_buffer( b TSRMLS_CC );
-
- return b;
- }
-%*
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str TSRMLS_DC )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str TSRMLS_CC )
-yyconst char *yy_str;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len TSRMLS_CC );
- }
-%*
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len TSRMLS_DC )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len TSRMLS_CC )
-yyconst char *bytes;
-int len;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
- {
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- int i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
-
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = yy_scan_buffer( buf, n TSRMLS_CC);
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
- }
-%*
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-%-
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state TSRMLS_DC )
-#else
-static void yy_push_state( new_state TSRMLS_CC )
-int new_state;
-#ifdef ZTS
-void ***tsrm_ls;
-#endif
-#endif
-%+
-void yyFlexLexer::yy_push_state( int new_state TSRMLS_DC )
-%*
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
-
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
-
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
-
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
-
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
-
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
-
- BEGIN(new_state);
- }
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-%-
-static void yy_pop_state(TSRMLS_D)
-%+
-void yyFlexLexer::yy_pop_state(TSRMLS_D)
-%*
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
-
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-%-
-static int yy_top_state()
-%+
-int yyFlexLexer::yy_top_state()
-%*
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-%-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
-
-%+
-
-void yyFlexLexer::LexerError( yyconst char msg[] )
- {
- cerr << msg << '\n';
- exit( YY_EXIT_FAILURE );
- }
-%*
-
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
-
-
-/* Internal utility routines. */
-
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
- }
-#endif
-
-#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
- register int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
- }
-#endif
-
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
- return (void *) malloc( size );
- }
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
- }
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
-
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
diff --git a/Zend/zend.c b/Zend/zend.c
deleted file mode 100644
index a6314dfd1b..0000000000
--- a/Zend/zend.c
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_extensions.h"
-#include "zend_modules.h"
-#include "zend_constants.h"
-#include "zend_list.h"
-#include "zend_API.h"
-#include "zend_builtin_functions.h"
-#include "zend_ini.h"
-
-#ifdef ZTS
-# define GLOBAL_FUNCTION_TABLE &global_main_class.function_table
-# define GLOBAL_CLASS_TABLE &global_main_class.class_table
-# define GLOBAL_CONSTANTS_TABLE &global_main_class.constants_table
-# define GLOBAL_AUTO_GLOBALS_TABLE global_auto_globals_table
-#else
-# define GLOBAL_FUNCTION_TABLE CG(function_table)
-# define GLOBAL_CLASS_TABLE CG(class_table)
-# define GLOBAL_CONSTANTS_TABLE CG(zend_constants)
-# define GLOBAL_AUTO_GLOBALS_TABLE CG(auto_globals)
-#endif
-
-#if defined(ZEND_WIN32) && ZEND_DEBUG
-BOOL WINAPI IsDebuggerPresent(VOID);
-#endif
-
-/* true multithread-shared globals */
-ZEND_API zend_class_entry zend_standard_class_def;
-ZEND_API int (*zend_printf)(const char *format, ...);
-ZEND_API zend_write_func_t zend_write;
-ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
-ZEND_API void (*zend_block_interruptions)(void);
-ZEND_API void (*zend_unblock_interruptions)(void);
-ZEND_API void (*zend_ticks_function)(int ticks);
-ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-
-static void (*zend_message_dispatcher_p)(long message, void *data);
-static int (*zend_get_configuration_directive_p)(char *name, uint name_length, zval *contents);
-
-
-#ifdef ZTS
-ZEND_API int compiler_globals_id;
-ZEND_API int executor_globals_id;
-ZEND_API int alloc_globals_id;
-zend_class_entry global_main_class;
-HashTable *global_auto_globals_table;
-#endif
-
-zend_utility_values zend_uv;
-
-ZEND_API zval zval_used_for_init; /* True global variable */
-
-/* version information */
-static char *zend_version_info;
-static uint zend_version_info_length;
-#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2001 Zend Technologies\n"
-
-
-#define PRINT_ZVAL_INDENT 4
-
-static void print_hash(HashTable *ht, int indent)
-{
- zval **tmp;
- char *string_key;
- HashPosition iterator;
- ulong num_key;
- uint str_len;
- int i;
-
- for (i=0; i<indent; i++) {
- ZEND_PUTS(" ");
- }
- ZEND_PUTS("(\n");
- indent += PRINT_ZVAL_INDENT;
- zend_hash_internal_pointer_reset_ex(ht, &iterator);
- while (zend_hash_get_current_data_ex(ht, (void **) &tmp, &iterator) == SUCCESS) {
- for (i=0; i<indent; i++) {
- ZEND_PUTS(" ");
- }
- ZEND_PUTS("[");
- switch (zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, &iterator)) {
- case HASH_KEY_IS_STRING:
- ZEND_PUTS(string_key);
- break;
- case HASH_KEY_IS_LONG:
- zend_printf("%ld", num_key);
- break;
- }
- ZEND_PUTS("] => ");
- zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT);
- ZEND_PUTS("\n");
- zend_hash_move_forward_ex(ht, &iterator);
- }
- indent -= PRINT_ZVAL_INDENT;
- for (i=0; i<indent; i++) {
- ZEND_PUTS(" ");
- }
- ZEND_PUTS(")\n");
-}
-
-
-ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy)
-{
- if (expr->type==IS_STRING) {
- *use_copy = 0;
- return;
- }
- switch (expr->type) {
- case IS_NULL:
- expr_copy->value.str.len = 0;
- expr_copy->value.str.val = empty_string;
- break;
- case IS_BOOL:
- if (expr->value.lval) {
- expr_copy->value.str.len = 1;
- expr_copy->value.str.val = estrndup("1", 1);
- } else {
- expr_copy->value.str.len = 0;
- expr_copy->value.str.val = empty_string;
- }
- break;
- case IS_RESOURCE:
- expr_copy->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG);
- expr_copy->value.str.len = sprintf(expr_copy->value.str.val, "Resource id #%ld", expr->value.lval);
- break;
- case IS_ARRAY:
- expr_copy->value.str.len = sizeof("Array")-1;
- expr_copy->value.str.val = estrndup("Array", expr_copy->value.str.len);
- break;
- case IS_OBJECT:
- expr_copy->value.str.len = sizeof("Object")-1;
- expr_copy->value.str.val = estrndup("Object", expr_copy->value.str.len);
- break;
- default:
- *expr_copy = *expr;
- zval_copy_ctor(expr_copy);
- convert_to_string(expr_copy);
- break;
- }
- expr_copy->type = IS_STRING;
- *use_copy = 1;
-}
-
-
-ZEND_API int zend_print_zval(zval *expr, int indent)
-{
- return zend_print_zval_ex(zend_write, expr, indent);
-}
-
-
-ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent)
-{
- zval expr_copy;
- int use_copy;
-
- zend_make_printable_zval(expr, &expr_copy, &use_copy);
- if (use_copy) {
- expr = &expr_copy;
- }
- if (expr->value.str.len==0) { /* optimize away empty strings */
- if (use_copy) {
- zval_dtor(expr);
- }
- return 0;
- }
- write_func(expr->value.str.val, expr->value.str.len);
- if (use_copy) {
- zval_dtor(expr);
- }
- return expr->value.str.len;
-}
-
-
-ZEND_API void zend_print_zval_r(zval *expr, int indent)
-{
- zend_print_zval_r_ex(zend_write, expr, indent);
-}
-
-
-ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent)
-{
- switch(expr->type) {
- case IS_ARRAY:
- ZEND_PUTS("Array\n");
- if (++expr->value.ht->nApplyCount>1) {
- ZEND_PUTS(" *RECURSION*");
- expr->value.ht->nApplyCount=0;
- return;
- }
- print_hash(expr->value.ht, indent);
- expr->value.ht->nApplyCount--;
- break;
- case IS_OBJECT:
- {
- zend_object *object = Z_OBJ_P(expr);
-
- if (++object->properties->nApplyCount>1) {
- ZEND_PUTS(" *RECURSION*");
- object->properties->nApplyCount=0;
- return;
- }
- zend_printf("%s Object\n", object->ce->name);
- print_hash(object->properties, indent);
- object->properties->nApplyCount--;
- break;
- }
- default:
- zend_print_variable(expr);
- break;
- }
-}
-
-
-static FILE *zend_fopen_wrapper(const char *filename, char **opened_path)
-{
- if (opened_path) {
- *opened_path = estrdup(filename);
- }
- return fopen(filename, "rb");
-}
-
-
-static void register_standard_class(void)
-{
- zend_standard_class_def.type = ZEND_INTERNAL_CLASS;
- zend_standard_class_def.name_length = sizeof("stdClass") - 1;
- zend_standard_class_def.name = zend_strndup("stdClass", zend_standard_class_def.name_length);
- zend_standard_class_def.parent = NULL;
- zend_hash_init_ex(&zend_standard_class_def.default_properties, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
- zend_hash_init_ex(&zend_standard_class_def.static_members, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
- zend_hash_init_ex(&zend_standard_class_def.constants_table, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
- zend_hash_init_ex(&zend_standard_class_def.class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
- zend_hash_init_ex(&zend_standard_class_def.function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1, 0);
- zend_standard_class_def.constructor = NULL;
- zend_standard_class_def.handle_function_call = NULL;
- zend_standard_class_def.handle_property_get = NULL;
- zend_standard_class_def.handle_property_set = NULL;
- zend_standard_class_def.refcount = (int *) malloc(sizeof(int));
- *zend_standard_class_def.refcount = 1;
- zend_hash_add(GLOBAL_CLASS_TABLE, "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry), NULL);
-}
-
-
-static void zend_set_default_compile_time_values(TSRMLS_D)
-{
- /* default compile-time values */
- CG(asp_tags) = 0;
- CG(short_tags) = 1;
- CG(allow_call_time_pass_reference) = 1;
- CG(extended_info) = 0;
-}
-
-
-#ifdef ZTS
-static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS_DC)
-{
- zend_function tmp_func;
- zend_class_entry tmp_class;
-
- compiler_globals->compiled_filename = NULL;
-
- compiler_globals->function_table = &compiler_globals->main_class.function_table;
- zend_hash_init_ex(compiler_globals->function_table, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
- zend_hash_copy(compiler_globals->function_table, GLOBAL_FUNCTION_TABLE, NULL, &tmp_func, sizeof(zend_function));
-
- compiler_globals->class_table = &compiler_globals->main_class.class_table;
- zend_hash_init_ex(compiler_globals->class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
- zend_hash_copy(compiler_globals->class_table, GLOBAL_CLASS_TABLE, (copy_ctor_func_t) zend_class_add_ref, &tmp_class, sizeof(zend_class_entry));
-
- zend_set_default_compile_time_values(TSRMLS_C);
-
- CG(interactive) = 0;
-
- compiler_globals->auto_globals = (HashTable *) malloc(sizeof(HashTable));
- zend_hash_init_ex(compiler_globals->auto_globals, 8, NULL, NULL, 1, 0);
- zend_hash_copy(compiler_globals->auto_globals, global_auto_globals_table, NULL, NULL, sizeof(void *) /* empty element */);
-}
-
-
-static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS_DC)
-{
- if (compiler_globals->function_table != GLOBAL_FUNCTION_TABLE) {
- zend_hash_destroy(compiler_globals->function_table);
- }
- if (compiler_globals->class_table != GLOBAL_CLASS_TABLE) {
- zend_hash_destroy(compiler_globals->class_table);
- }
- if (compiler_globals->auto_globals != global_auto_globals_table) {
- zend_hash_destroy(compiler_globals->auto_globals);
- free(compiler_globals->auto_globals);
- }
-}
-
-
-static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS_DC)
-{
- if (GLOBAL_CONSTANTS_TABLE) {
- zend_startup_constants(TSRMLS_C);
- zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE);
- }
- zend_init_rsrc_plist(TSRMLS_C);
- EG(lambda_count)=0;
- EG(user_error_handler) = NULL;
- EG(in_execution) = 0;
-}
-
-
-static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS_DC)
-{
- zend_shutdown_constants(TSRMLS_C);
- zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
- zend_ini_shutdown(TSRMLS_C);
-}
-
-
-static void zend_new_thread_end_handler(THREAD_T thread_id TSRMLS_DC)
-{
- zend_copy_ini_directives(TSRMLS_C);
- zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC);
-}
-
-#endif
-
-
-static void alloc_globals_ctor(zend_alloc_globals *alloc_globals_p TSRMLS_DC)
-{
- start_memory_manager(TSRMLS_C);
-}
-
-
-static void alloc_globals_dtor(zend_alloc_globals *alloc_globals_p TSRMLS_DC)
-{
- shutdown_memory_manager(0, 1);
-}
-
-
-#ifdef __FreeBSD__
-/* FreeBSD floating point precision fix */
-#include <floatingpoint.h>
-#endif
-
-
-static void scanner_globals_ctor(zend_scanner_globals *scanner_globals_p TSRMLS_DC)
-{
- scanner_globals_p->c_buf_p = (char *) 0;
- scanner_globals_p->init = 1;
- scanner_globals_p->start = 0;
- scanner_globals_p->current_buffer = NULL;
- scanner_globals_p->yy_in = NULL;
- scanner_globals_p->yy_out = NULL;
- scanner_globals_p->_yy_more_flag = 0;
- scanner_globals_p->_yy_more_len = 0;
-
-}
-
-
-int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions)
-{
-#ifdef ZTS
- zend_compiler_globals *compiler_globals;
- zend_executor_globals *executor_globals;
- void ***tsrm_ls;
-#ifdef ZTS
- extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
- extern ZEND_API ts_rsrc_id language_scanner_globals_id;
-#else
- extern zend_scanner_globals ini_scanner_globals;
- extern zend_scanner_globals language_scanner_globals;
-#endif
-
- ts_allocate_id(&alloc_globals_id, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor);
-#else
- alloc_globals_ctor(&alloc_globals TSRMLS_CC);
-#endif
-
-#ifdef __FreeBSD__
- /* FreeBSD floating point precision fix */
- fpsetmask(0);
-#endif
-
- zend_startup_extensions_mechanism();
-
- /* Set up utility functions and values */
- zend_error_cb = utility_functions->error_function;
- zend_printf = utility_functions->printf_function;
- zend_write = (zend_write_func_t) utility_functions->write_function;
- zend_fopen = utility_functions->fopen_function;
- if (!zend_fopen) {
- zend_fopen = zend_fopen_wrapper;
- }
- zend_message_dispatcher_p = utility_functions->message_handler;
- zend_block_interruptions = utility_functions->block_interruptions;
- zend_unblock_interruptions = utility_functions->unblock_interruptions;
- zend_get_configuration_directive_p = utility_functions->get_configuration_directive;
- zend_ticks_function = utility_functions->ticks_function;
-
- zend_compile_file = compile_file;
- zend_execute = execute;
-
- /* set up version */
- zend_version_info = strdup(ZEND_CORE_VERSION_INFO);
- zend_version_info_length = sizeof(ZEND_CORE_VERSION_INFO)-1;
-
-#ifndef ZTS
- GLOBAL_FUNCTION_TABLE = &compiler_globals.main_class.function_table;
- GLOBAL_CLASS_TABLE = &compiler_globals.main_class.class_table;
-#endif
- GLOBAL_AUTO_GLOBALS_TABLE = (HashTable *) malloc(sizeof(HashTable));
- zend_hash_init_ex(GLOBAL_FUNCTION_TABLE, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
- zend_hash_init_ex(GLOBAL_CLASS_TABLE, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
- zend_hash_init_ex(GLOBAL_AUTO_GLOBALS_TABLE, 8, NULL, NULL, 1, 0);
-
- register_standard_class();
- zend_hash_init_ex(&module_registry, 50, NULL, ZEND_MODULE_DTOR, 1, 0);
- zend_init_rsrc_list_dtors();
-
- /* This zval can be used to initialize allocate zval's to an uninit'ed value */
- zval_used_for_init.is_ref = 0;
- zval_used_for_init.refcount = 1;
- zval_used_for_init.type = IS_NULL;
-
-#ifdef ZTS
- ts_allocate_id(&compiler_globals_id, sizeof(zend_compiler_globals), (ts_allocate_ctor) compiler_globals_ctor, (ts_allocate_dtor) compiler_globals_dtor);
- ts_allocate_id(&executor_globals_id, sizeof(zend_executor_globals), (ts_allocate_ctor) executor_globals_ctor, (ts_allocate_dtor) executor_globals_dtor);
- ts_allocate_id(&language_scanner_globals_id, sizeof(zend_scanner_globals), (ts_allocate_ctor) scanner_globals_ctor, NULL);
- ts_allocate_id(&ini_scanner_globals_id, sizeof(zend_scanner_globals), (ts_allocate_ctor) scanner_globals_ctor, NULL);
- compiler_globals = ts_resource(compiler_globals_id);
- executor_globals = ts_resource(executor_globals_id);
- tsrm_ls = ts_resource_ex(0, NULL);
- compiler_globals_dtor(compiler_globals, tsrm_ls);
- compiler_globals->function_table = GLOBAL_FUNCTION_TABLE;
- compiler_globals->class_table = GLOBAL_CLASS_TABLE;
- compiler_globals->auto_globals = GLOBAL_AUTO_GLOBALS_TABLE;
- zend_startup_constants(tsrm_ls);
-#else
- zend_hash_init_ex(CG(auto_globals), 8, NULL, NULL, 1, 0);
- scanner_globals_ctor(&ini_scanner_globals TSRMLS_CC);
- scanner_globals_ctor(&language_scanner_globals TSRMLS_CC);
- zend_startup_constants();
- zend_set_default_compile_time_values(TSRMLS_C);
- EG(user_error_handler) = NULL;
-#endif
- zend_register_standard_constants(TSRMLS_C);
-
-#ifndef ZTS
- zend_init_rsrc_plist(TSRMLS_C);
-#endif
-
- if (start_builtin_functions) {
- zend_startup_builtin_functions(TSRMLS_C);
- }
-
- zend_ini_startup(TSRMLS_C);
-
-#ifdef ZTS
- tsrm_set_new_thread_end_handler(zend_new_thread_end_handler);
-#endif
-
- return SUCCESS;
-}
-
-
-void zend_shutdown(TSRMLS_D)
-{
-#ifdef ZEND_WIN32
- zend_shutdown_timeout_thread();
-#endif
-#ifndef ZTS
- zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
-#endif
- zend_destroy_rsrc_list_dtors();
- zend_hash_destroy(&module_registry);
- zend_hash_destroy(GLOBAL_FUNCTION_TABLE);
- zend_hash_destroy(GLOBAL_CLASS_TABLE);
- zend_hash_destroy(GLOBAL_AUTO_GLOBALS_TABLE);
- free(GLOBAL_AUTO_GLOBALS_TABLE);
- zend_shutdown_extensions(TSRMLS_C);
- free(zend_version_info);
-#ifndef ZTS
- zend_shutdown_constants();
-#endif
-}
-
-
-void zend_set_utility_values(zend_utility_values *utility_values)
-{
- zend_uv = *utility_values;
- zend_uv.import_use_extension_length = strlen(zend_uv.import_use_extension);
-}
-
-
-/* this should be compatible with the standard zenderror */
-void zenderror(char *error)
-{
- zend_error(E_PARSE, error);
-}
-
-
-BEGIN_EXTERN_C()
-ZEND_API void _zend_bailout(char *filename, uint lineno)
-{
- TSRMLS_FETCH();
-
- if (!EG(bailout_set)) {
- zend_output_debug_string(1, "%s(%d) : Bailed out without a bailout address!", filename, lineno);
- exit(-1);
- }
- CG(unclean_shutdown) = 1;
- CG(in_compilation) = EG(in_execution) = 0;
- longjmp(EG(bailout), FAILURE);
-}
-END_EXTERN_C()
-
-
-void zend_append_version_info(zend_extension *extension)
-{
- char *new_info;
- uint new_info_length;
-
- new_info_length = sizeof(" with v, by \n")
- + strlen(extension->name)
- + strlen(extension->version)
- + strlen(extension->copyright)
- + strlen(extension->author);
-
- new_info = (char *) malloc(new_info_length+1);
-
- sprintf(new_info, " with %s v%s, %s, by %s\n", extension->name, extension->version, extension->copyright, extension->author);
-
- zend_version_info = (char *) realloc(zend_version_info, zend_version_info_length+new_info_length+1);
- strcat(zend_version_info, new_info);
- zend_version_info_length += new_info_length;
- free(new_info);
-}
-
-
-ZEND_API char *get_zend_version()
-{
- return zend_version_info;
-}
-
-
-void zend_activate(TSRMLS_D)
-{
- init_compiler(TSRMLS_C);
- init_executor(TSRMLS_C);
- startup_scanner(TSRMLS_C);
-}
-
-
-void zend_activate_modules(TSRMLS_D)
-{
- zend_hash_apply(&module_registry, (apply_func_t) module_registry_request_startup TSRMLS_CC);
-}
-
-void zend_deactivate_modules(TSRMLS_D)
-{
- EG(opline_ptr) = NULL; /* we're no longer executing anything */
-
- zend_try {
- zend_hash_apply(&module_registry, (apply_func_t) module_registry_cleanup TSRMLS_CC);
- } zend_end_try();
-}
-
-void zend_deactivate(TSRMLS_D)
-{
- /* we're no longer executing anything */
- EG(opline_ptr) = NULL;
- EG(active_symbol_table) = NULL;
-
- zend_try {
- shutdown_scanner(TSRMLS_C);
- } zend_end_try();
-
- /* shutdown_executor() takes care of its own bailout handling */
- shutdown_executor(TSRMLS_C);
-
- zend_try {
- shutdown_compiler(TSRMLS_C);
- } zend_end_try();
-
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
-}
-
-
-BEGIN_EXTERN_C()
-ZEND_API void zend_message_dispatcher(long message, void *data)
-{
- if (zend_message_dispatcher_p) {
- zend_message_dispatcher_p(message, data);
- }
-}
-END_EXTERN_C()
-
-
-ZEND_API int zend_get_configuration_directive(char *name, uint name_length, zval *contents)
-{
- if (zend_get_configuration_directive_p) {
- return zend_get_configuration_directive_p(name, name_length, contents);
- } else {
- return FAILURE;
- }
-}
-
-
-#define ZEND_ERROR_BUFFER_SIZE 1024
-
-ZEND_API void zend_error(int type, const char *format, ...)
-{
- va_list args;
- zval ***params;
- zval *retval;
- zval *z_error_type, *z_error_message, *z_error_filename, *z_error_lineno, *z_context;
- char *error_filename;
- uint error_lineno;
- zval *orig_user_error_handler;
- TSRMLS_FETCH();
-
- /* Obtain relevant filename and lineno */
- switch (type) {
- case E_CORE_ERROR:
- case E_CORE_WARNING:
- error_filename = NULL;
- error_lineno = 0;
- break;
- case E_PARSE:
- case E_COMPILE_ERROR:
- case E_COMPILE_WARNING:
- case E_ERROR:
- case E_NOTICE:
- case E_WARNING:
- case E_USER_ERROR:
- case E_USER_WARNING:
- case E_USER_NOTICE:
- if (zend_is_compiling(TSRMLS_C)) {
- error_filename = zend_get_compiled_filename(TSRMLS_C);
- error_lineno = zend_get_compiled_lineno(TSRMLS_C);
- } else if (zend_is_executing(TSRMLS_C)) {
- error_filename = zend_get_executed_filename(TSRMLS_C);
- error_lineno = zend_get_executed_lineno(TSRMLS_C);
- } else {
- error_filename = NULL;
- error_lineno = 0;
- }
- break;
- default:
- error_filename = NULL;
- error_lineno = 0;
- break;
- }
- if (!error_filename) {
- error_filename = "Unknown";
- }
-
-
- va_start(args, format);
-
- /* if we don't have a user defined error handler */
- if (!EG(user_error_handler)) {
- zend_error_cb(type, error_filename, error_lineno, format, args);
- } else switch (type) {
- case E_ERROR:
- case E_PARSE:
- case E_CORE_ERROR:
- case E_CORE_WARNING:
- case E_COMPILE_ERROR:
- case E_COMPILE_WARNING:
- /* The error may not be safe to handle in user-space */
- zend_error_cb(type, error_filename, error_lineno, format, args);
- break;
- default:
- /* Handle the error in user space */
- ALLOC_INIT_ZVAL(z_error_message);
- ALLOC_INIT_ZVAL(z_error_type);
- ALLOC_INIT_ZVAL(z_error_filename);
- ALLOC_INIT_ZVAL(z_error_lineno);
- ALLOC_INIT_ZVAL(z_context);
- z_error_message->value.str.val = (char *) emalloc(ZEND_ERROR_BUFFER_SIZE);
-
-#ifdef HAVE_VSNPRINTF
- z_error_message->value.str.len = vsnprintf(z_error_message->value.str.val, ZEND_ERROR_BUFFER_SIZE, format, args);
- if (z_error_message->value.str.len > ZEND_ERROR_BUFFER_SIZE-1) {
- z_error_message->value.str.len = ZEND_ERROR_BUFFER_SIZE-1;
- }
-#else
- strncpy(z_error_message->value.str.val, format, ZEND_ERROR_BUFFER_SIZE);
- /* This is risky... */
- /* z_error_message->value.str.len = vsprintf(z_error_message->value.str.val, format, args); */
-#endif
- z_error_message->type = IS_STRING;
-
- z_error_type->value.lval = type;
- z_error_type->type = IS_LONG;
-
- if (error_filename) {
- z_error_filename->value.str.len = strlen(error_filename);
- z_error_filename->value.str.val = estrndup(error_filename, z_error_filename->value.str.len);
- z_error_filename->type = IS_STRING;
- }
-
- z_error_lineno->value.lval = error_lineno;
- z_error_lineno->type = IS_LONG;
-
- z_context->value.ht = EG(active_symbol_table);
- z_context->type = IS_ARRAY;
- ZVAL_ADDREF(z_context); /* we don't want this one to be freed */
-
- params = (zval ***) emalloc(sizeof(zval **)*5);
- params[0] = &z_error_type;
- params[1] = &z_error_message;
- params[2] = &z_error_filename;
- params[3] = &z_error_lineno;
- params[4] = &z_context;
-
- orig_user_error_handler = EG(user_error_handler);
- EG(user_error_handler) = NULL;
- if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) {
- zval_ptr_dtor(&retval);
- } else {
- /* The user error handler failed, use built-in error handler */
- zend_error_cb(type, error_filename, error_lineno, format, args);
- }
- EG(user_error_handler) = orig_user_error_handler;
-
- efree(params);
- zval_ptr_dtor(&z_error_message);
- zval_ptr_dtor(&z_error_type);
- zval_ptr_dtor(&z_error_filename);
- zval_ptr_dtor(&z_error_lineno);
- if (ZVAL_REFCOUNT(z_context)==2) {
- FREE_ZVAL(z_context);
- }
- break;
- }
-
- va_end(args);
-
- if (type==E_PARSE) {
- zend_init_compiler_data_structures(TSRMLS_C);
- }
-}
-
-
-ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...)
-{
-#if ZEND_DEBUG
- va_list args;
-
- va_start(args, format);
-# ifdef ZEND_WIN32
- {
- char output_buf[1024];
-
- vsnprintf(output_buf, 1024, format, args);
- OutputDebugString(output_buf);
- OutputDebugString("\n");
- if (trigger_break && IsDebuggerPresent()) {
- DebugBreak();
- }
- }
-# else
- vfprintf(stderr, format, args);
- fprintf(stderr, "\n");
-# endif
- va_end(args);
-#endif
-}
-
-
-ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...)
-{
- va_list files;
- int i;
- zend_file_handle *file_handle;
- zend_op_array *orig_op_array = EG(active_op_array);
- zval *local_retval=NULL;
-
- va_start(files, file_count);
- for (i=0; i<file_count; i++) {
- file_handle = va_arg(files, zend_file_handle *);
- if (!file_handle) {
- continue;
- }
- EG(active_op_array) = zend_compile_file(file_handle, ZEND_INCLUDE TSRMLS_CC);
- zend_destroy_file_handle(file_handle TSRMLS_CC);
- if (EG(active_op_array)) {
- EG(return_value_ptr_ptr) = retval ? retval : &local_retval;
- zend_execute(EG(active_op_array) TSRMLS_CC);
- if (EG(exception)) {
- zval_ptr_dtor(&EG(exception));
- } else if (!retval) {
- zval_ptr_dtor(EG(return_value_ptr_ptr));
- local_retval = NULL;
- }
- destroy_op_array(EG(active_op_array));
- efree(EG(active_op_array));
- } else if (type==ZEND_REQUIRE) {
- va_end(files);
- EG(active_op_array) = orig_op_array;
- return FAILURE;
- }
- }
- va_end(files);
- EG(active_op_array) = orig_op_array;
-
- return SUCCESS;
-}
-
-#define COMPILED_STRING_DESCRIPTION_FORMAT "%s(%d) : %s"
-
-ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC)
-{
- char *cur_filename;
- int cur_lineno;
- char *compiled_string_description;
-
- if (zend_is_compiling(TSRMLS_C)) {
- cur_filename = zend_get_compiled_filename(TSRMLS_C);
- cur_lineno = zend_get_compiled_lineno(TSRMLS_C);
- } else if (zend_is_executing(TSRMLS_C)) {
- cur_filename = zend_get_executed_filename(TSRMLS_C);
- cur_lineno = zend_get_executed_lineno(TSRMLS_C);
- } else {
- cur_filename = "Unknown";
- cur_lineno = 0;
- }
-
- compiled_string_description = emalloc(sizeof(COMPILED_STRING_DESCRIPTION_FORMAT)+strlen(name)+strlen(cur_filename)+MAX_LENGTH_OF_LONG);
- sprintf(compiled_string_description, COMPILED_STRING_DESCRIPTION_FORMAT, cur_filename, cur_lineno, name);
- return compiled_string_description;
-}
-
-
-void free_estring(char **str_p)
-{
- efree(*str_p);
-}
diff --git a/Zend/zend.h b/Zend/zend.h
deleted file mode 100644
index c869f7fecf..0000000000
--- a/Zend/zend.h
+++ /dev/null
@@ -1,560 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_H
-#define ZEND_H
-
-#define ZEND_VERSION "2.0.0-dev"
-
-#ifdef __cplusplus
-#define BEGIN_EXTERN_C() extern "C" {
-#define END_EXTERN_C() }
-#else
-#define BEGIN_EXTERN_C()
-#define END_EXTERN_C()
-#endif
-
-#include <stdio.h>
-
-/*
- * general definitions
- */
-
-#ifdef ZEND_WIN32
-# include "zend_config.w32.h"
-# define ZEND_PATHS_SEPARATOR ';'
-#elif defined(__riscos__)
-# include "zend_config.h"
-# define ZEND_PATHS_SEPARATOR ';'
-#else
-# include "zend_config.h"
-# define ZEND_PATHS_SEPARATOR ':'
-#endif
-
-/* all HAVE_XXX test have to be after the include of zend_config above */
-
-#ifdef HAVE_UNIX_H
-# include <unix.h>
-#endif
-
-#ifdef HAVE_STDARG_H
-# include <stdarg.h>
-#endif
-
-#ifdef HAVE_DLFCN_H
-# include <dlfcn.h>
-#endif
-
-#if defined(HAVE_LIBDL)
-
-# ifndef RTLD_LAZY
-# define RTLD_LAZY 1 /* Solaris 1, FreeBSD's (2.1.7.1 and older) */
-# endif
-
-# ifndef RTLD_GLOBAL
-# define RTLD_GLOBAL 0
-# endif
-
-# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL)
-# define DL_UNLOAD dlclose
-# if defined(DLSYM_NEEDS_UNDERSCORE)
-# define DL_FETCH_SYMBOL(h,s) dlsym((h), "_" ## s)
-# else
-# define DL_FETCH_SYMBOL dlsym
-# endif
-# define DL_HANDLE void *
-# define ZEND_EXTENSIONS_SUPPORT 1
-#elif defined(ZEND_WIN32)
-# define DL_LOAD(libname) LoadLibrary(libname)
-# define DL_FETCH_SYMBOL GetProcAddress
-# define DL_UNLOAD FreeLibrary
-# define DL_HANDLE HMODULE
-# define ZEND_EXTENSIONS_SUPPORT 1
-#else
-# define DL_HANDLE void *
-# define ZEND_EXTENSIONS_SUPPORT 0
-#endif
-
-/* AIX requires this to be the first thing in the file. */
-#ifndef __GNUC__
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32))
-# define do_alloca(p) alloca(p)
-# define free_alloca(p)
-#else
-# define do_alloca(p) emalloc(p)
-# define free_alloca(p) efree(p)
-#endif
-
-#if ZEND_DEBUG
-#define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno
-#define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D
-#define ZEND_FILE_LINE_ORIG_D char *__zend_orig_filename, uint __zend_orig_lineno
-#define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D
-#define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno
-#define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C
-#define ZEND_FILE_LINE_C __FILE__, __LINE__
-#define ZEND_FILE_LINE_CC , ZEND_FILE_LINE_C
-#define ZEND_FILE_LINE_EMPTY_C NULL, 0
-#define ZEND_FILE_LINE_EMPTY_CC , ZEND_FILE_LINE_EMPTY_C
-#define ZEND_FILE_LINE_ORIG_RELAY_C __zend_orig_filename, __zend_orig_lineno
-#define ZEND_FILE_LINE_ORIG_RELAY_CC , ZEND_FILE_LINE_ORIG_RELAY_C
-#else
-#define ZEND_FILE_LINE_D
-#define ZEND_FILE_LINE_DC
-#define ZEND_FILE_LINE_ORIG_D
-#define ZEND_FILE_LINE_ORIG_DC
-#define ZEND_FILE_LINE_RELAY_C
-#define ZEND_FILE_LINE_RELAY_CC
-#define ZEND_FILE_LINE_C
-#define ZEND_FILE_LINE_CC
-#define ZEND_FILE_LINE_EMPTY_C
-#define ZEND_FILE_LINE_EMPTY_CC
-#define ZEND_FILE_LINE_ORIG_RELAY_C
-#define ZEND_FILE_LINE_ORIG_RELAY_CC
-#endif /* ZEND_DEBUG */
-
-#ifdef ZTS
-#define ZTS_V 1
-#else
-#define ZTS_V 0
-#endif
-
-#include "zend_errors.h"
-#include "zend_alloc.h"
-
-typedef unsigned char zend_bool;
-typedef unsigned char zend_uchar;
-typedef unsigned int zend_uint;
-typedef unsigned long zend_ulong;
-typedef unsigned short zend_ushort;
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647L
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN (- LONG_MAX - 1)
-#endif
-
-#undef SUCCESS
-#undef FAILURE
-#define SUCCESS 0
-#define FAILURE -1 /* this MUST stay a negative number, or it may affect functions! */
-
-
-#include "zend_hash.h"
-#include "zend_llist.h"
-
-#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval *this_ptr, int return_value_used TSRMLS_DC
-#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, this_ptr, return_value_used TSRMLS_CC
-
-
-/*
- * zval
- */
-typedef struct _zval_struct zval;
-typedef struct _zend_class_entry zend_class_entry;
-
-typedef struct _zend_object {
- zend_class_entry *ce;
- HashTable *properties;
-} zend_object;
-
-typedef unsigned int zend_object_handle;
-
-typedef struct _zend_object_handlers zend_object_handlers;
-
-typedef struct _zend_object_value {
- zend_object_handle handle;
- zend_object_handlers *handlers;
-} zend_object_value;
-
-typedef zend_object *(*get_address_t)(zend_object_handle handle); /* Don't return zval ** so that we can't change it */
-typedef zval **(*get_property_address_t)(zend_object_handle handle, zval *offset, int type);
-typedef void (*add_ref_t)(zend_object_handle handle);
-typedef void (*del_ref_t)(zend_object_handle handle);
-typedef void (*delete_obj_t)(zend_object_handle handle);
-typedef zend_object_value (*clone_obj_t)(zend_object_handle handle);
-
-struct _zend_object_handlers {
- get_address_t get_address;
- get_property_address_t get_property_address;
- add_ref_t add_ref;
- del_ref_t del_ref;
- delete_obj_t delete_obj;
- clone_obj_t clone_obj;
-};
-
-#include "zend_objects.h"
-
-typedef union _zvalue_value {
- long lval; /* long value */
- double dval; /* double value */
- struct {
- char *val;
- int len;
- } str;
- HashTable *ht; /* hash table value */
-/* struct {
- zend_class_entry *ce;
- HashTable *properties;
- } obj;
-*/
- zend_object_value obj;
-} zvalue_value;
-
-
-struct _zval_struct {
- /* Variable information */
- zvalue_value value; /* value */
- zend_uchar type; /* active type */
- zend_uchar is_ref;
- zend_ushort refcount;
-};
-
-
-
-typedef struct _zend_function_entry {
- char *fname;
- void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
- unsigned char *func_arg_types;
-} zend_function_entry;
-
-
-typedef struct _zend_property_reference {
- int type; /* read, write or r/w */
- zval *object;
- zend_llist *elements_list;
-} zend_property_reference;
-
-
-
-typedef struct _zend_overloaded_element {
- int type; /* array offset or object proprety */
- zval element;
-} zend_overloaded_element;
-
-/* excpt.h on Digital Unix 4.0 defines function_table */
-#undef function_table
-
-/* A lot of stuff needs shifiting around in order to include zend_compile.h here */
-union _zend_function;
-
-struct _zend_class_entry {
- char type;
- char *name;
- uint name_length;
- struct _zend_class_entry *parent;
- int *refcount;
- zend_bool constants_updated;
-
- HashTable function_table;
- HashTable default_properties;
- HashTable class_table;
- HashTable static_members;
- HashTable constants_table;
- zend_function_entry *builtin_functions;
-
- union _zend_function *constructor;
-
- /* handlers */
- void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
- zval (*handle_property_get)(zend_property_reference *property_reference);
- int (*handle_property_set)(zend_property_reference *property_reference, zval *value);
-};
-
-
-
-typedef struct _zend_utility_functions {
- void (*error_function)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
- int (*printf_function)(const char *format, ...);
- int (*write_function)(const char *str, uint str_length);
- FILE *(*fopen_function)(const char *filename, char **opened_path);
- void (*message_handler)(long message, void *data);
- void (*block_interruptions)(void);
- void (*unblock_interruptions)(void);
- int (*get_configuration_directive)(char *name, uint name_length, zval *contents);
- void (*ticks_function)(int ticks);
-} zend_utility_functions;
-
-
-typedef struct _zend_utility_values {
- char *import_use_extension;
- uint import_use_extension_length;
-} zend_utility_values;
-
-
-typedef int (*zend_write_func_t)(const char *str, uint str_length);
-
-
-#undef MIN
-#undef MAX
-#define MAX(a, b) (((a)>(b))?(a):(b))
-#define MIN(a, b) (((a)<(b))?(a):(b))
-#define ZEND_STRL(str) (str), (sizeof(str)-1)
-#define ZEND_STRS(str) (str), (sizeof(str))
-#define ZEND_NORMALIZE_BOOL(n) \
- ((n) ? (((n)>0) ? 1 : -1) : 0)
-
-
-/* data types */
-#define IS_NULL 0
-#define IS_LONG 1
-#define IS_DOUBLE 2
-#define IS_STRING 3
-#define IS_ARRAY 4
-#define IS_OBJECT 5
-#define IS_BOOL 6
-#define IS_RESOURCE 7
-#define IS_CONSTANT 8
-#define IS_CONSTANT_ARRAY 9
-
-/* Special data type to temporarily mark large numbers */
-#define FLAG_IS_BC 10 /* for parser internal use only */
-
-/* Ugly hack to support constants as static array indices */
-#define IS_CONSTANT_INDEX 0x80
-
-
-/* overloaded elements data types */
-#define OE_IS_ARRAY (1<<0)
-#define OE_IS_OBJECT (1<<1)
-#define OE_IS_METHOD (1<<2)
-
-
-/* Argument passing types */
-#define BYREF_NONE 0
-#define BYREF_FORCE 1
-#define BYREF_ALLOW 2
-#define BYREF_FORCE_REST 3
-
-int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions);
-void zend_shutdown(TSRMLS_D);
-
-void zend_set_utility_values(zend_utility_values *utility_values);
-
-BEGIN_EXTERN_C()
-ZEND_API void _zend_bailout(char *filename, uint lineno);
-END_EXTERN_C()
-
-#define zend_bailout() _zend_bailout(__FILE__, __LINE__)
-
-#define zend_try \
- { \
- jmp_buf orig_bailout; \
- zend_bool orig_bailout_set=EG(bailout_set); \
- \
- EG(bailout_set) = 1; \
- memcpy(&orig_bailout, &EG(bailout), sizeof(jmp_buf)); \
- if (setjmp(EG(bailout))==0)
-#define zend_catch \
- else
-#define zend_end_try() \
- memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf)); \
- EG(bailout_set) = orig_bailout_set; \
- }
-#define zend_first_try EG(bailout_set)=0; zend_try
-
-ZEND_API char *get_zend_version(void);
-ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy);
-ZEND_API int zend_print_zval(zval *expr, int indent);
-ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent);
-ZEND_API void zend_print_zval_r(zval *expr, int indent);
-ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent);
-ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...);
-
-#if ZEND_DEBUG
-#define Z_DBG(expr) (expr)
-#else
-#define Z_DBG(expr)
-#endif
-
-ZEND_API extern char *empty_string;
-
-ZEND_API void free_estring(char **str_p);
-
-#define STR_FREE(ptr) if (ptr && ptr!=empty_string) { efree(ptr); }
-#define STR_FREE_REL(ptr) if (ptr && ptr!=empty_string) { efree_rel(ptr); }
-
-#define STR_REALLOC(ptr, size) \
- if (ptr!=empty_string) { \
- ptr = (char *) erealloc(ptr, size); \
- } else { \
- ptr = (char *) emalloc(size); \
- memset(ptr, 0, size); \
- }
-
-/* output support */
-#define ZEND_WRITE(str, str_len) zend_write((str), (str_len))
-#define ZEND_PUTS(str) zend_write((str), strlen((str)))
-#define ZEND_PUTC(c) zend_write(&(c), 1), (c)
-
-
-BEGIN_EXTERN_C()
-extern ZEND_API int (*zend_printf)(const char *format, ...);
-extern ZEND_API zend_write_func_t zend_write;
-extern ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
-extern ZEND_API void (*zend_block_interruptions)(void);
-extern ZEND_API void (*zend_unblock_interruptions)(void);
-extern ZEND_API void (*zend_ticks_function)(int ticks);
-extern ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-
-
-ZEND_API void zend_error(int type, const char *format, ...);
-
-void zenderror(char *error);
-
-extern ZEND_API zend_class_entry zend_standard_class_def;
-extern zend_utility_values zend_uv;
-extern ZEND_API zval zval_used_for_init;
-
-END_EXTERN_C()
-
-#define ZEND_UV(name) (zend_uv.name)
-
-
-#define HANDLE_BLOCK_INTERRUPTIONS() if (zend_block_interruptions) { zend_block_interruptions(); }
-#define HANDLE_UNBLOCK_INTERRUPTIONS() if (zend_unblock_interruptions) { zend_unblock_interruptions(); }
-
-BEGIN_EXTERN_C()
-ZEND_API void zend_message_dispatcher(long message, void *data);
-END_EXTERN_C()
-
-ZEND_API int zend_get_configuration_directive(char *name, uint name_length, zval *contents);
-
-
-/* Messages for applications of Zend */
-#define ZMSG_FAILED_INCLUDE_FOPEN 1L
-#define ZMSG_FAILED_REQUIRE_FOPEN 2L
-#define ZMSG_FAILED_HIGHLIGHT_FOPEN 3L
-#define ZMSG_MEMORY_LEAK_DETECTED 4L
-#define ZMSG_MEMORY_LEAK_REPEATED 5L
-#define ZMSG_LOG_SCRIPT_NAME 6L
-
-
-#define ZVAL_ADDREF(pz) (++(pz)->refcount)
-#define ZVAL_DELREF(pz) (--(pz)->refcount)
-#define ZVAL_REFCOUNT(pz) ((pz)->refcount)
-
-#define INIT_PZVAL(z) \
- (z)->refcount = 1; \
- (z)->is_ref = 0;
-
-#define INIT_ZVAL(z) z = zval_used_for_init;
-
-#define ALLOC_INIT_ZVAL(zp) \
- ALLOC_ZVAL(zp); \
- INIT_ZVAL(*zp);
-
-#define MAKE_STD_ZVAL(zv) \
- ALLOC_ZVAL(zv); \
- INIT_PZVAL(zv);
-
-#define PZVAL_IS_REF(z) ((z)->is_ref)
-
-#define SEPARATE_ZVAL(ppzv) \
- { \
- zval *orig_ptr = *(ppzv); \
- \
- if (orig_ptr->refcount>1) { \
- orig_ptr->refcount--; \
- ALLOC_ZVAL(*(ppzv)); \
- **(ppzv) = *orig_ptr; \
- zval_copy_ctor(*(ppzv)); \
- (*(ppzv))->refcount=1; \
- (*(ppzv))->is_ref = 0; \
- } \
- }
-
-#define SEPARATE_ZVAL_IF_NOT_REF(ppzv) \
- if (!PZVAL_IS_REF(*ppzv)) { \
- SEPARATE_ZVAL(ppzv); \
- }
-
-#define SEPARATE_ZVAL_TO_MAKE_IS_REF(ppzv) \
- if (!PZVAL_IS_REF(*ppzv)) { \
- SEPARATE_ZVAL(ppzv); \
- (*(ppzv))->is_ref = 1; \
- }
-
-#define COPY_PZVAL_TO_ZVAL(zv, pzv) \
- (zv) = *(pzv); \
- if ((pzv)->refcount>1) { \
- zval_copy_ctor(&(zv)); \
- (pzv)->refcount--; \
- } else { \
- FREE_ZVAL(pzv); \
- } \
- INIT_PZVAL(&(zv));
-
-#define REPLACE_ZVAL_VALUE(ppzv_dest, pzv_src, copy) { \
- int is_ref, refcount; \
- \
- SEPARATE_ZVAL_IF_NOT_REF(ppzv_dest); \
- is_ref = (*ppzv_dest)->is_ref; \
- refcount = (*ppzv_dest)->refcount; \
- zval_dtor(*ppzv_dest); \
- **ppzv_dest = *pzv_src; \
- if (copy) { \
- zval_copy_ctor(*ppzv_dest); \
- } \
- (*ppzv_dest)->is_ref = is_ref; \
- (*ppzv_dest)->refcount = refcount; \
-}
-
-#define ZEND_MAX_RESERVED_RESOURCES 4
-
-#ifdef ZEND_WIN32
-/* Only use this macro if you know for sure that all of the switches values
- are covered by its case statements */
-#define EMPTY_SWITCH_DEFAULT_CASE() \
- default: \
- __assume(0); \
- break;
-#else
-#define EMPTY_SWITCH_DEFAULT_CASE()
-#endif
-
-#endif /* ZEND_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend.ico b/Zend/zend.ico
deleted file mode 100644
index 80978a6c7e..0000000000
--- a/Zend/zend.ico
+++ /dev/null
Binary files differ
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
deleted file mode 100644
index b61e797e01..0000000000
--- a/Zend/zend_API.c
+++ /dev/null
@@ -1,1400 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_execute.h"
-#include "zend_API.h"
-#include "zend_modules.h"
-#include "zend_constants.h"
-
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-/* these variables are true statics/globals, and have to be mutex'ed on every access */
-static int module_count=0;
-ZEND_API HashTable module_registry;
-
-/* this function doesn't check for too many parameters */
-ZEND_API int zend_get_parameters(int ht, int param_count, ...)
-{
- void **p;
- int arg_count;
- va_list ptr;
- zval **param, *param_ptr;
- TSRMLS_FETCH();
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- if (param_count>arg_count) {
- return FAILURE;
- }
-
- va_start(ptr, param_count);
-
- while (param_count-->0) {
- param = va_arg(ptr, zval **);
- param_ptr = *(p-arg_count);
- if (!PZVAL_IS_REF(param_ptr) && param_ptr->refcount>1) {
- zval *new_tmp;
-
- ALLOC_ZVAL(new_tmp);
- *new_tmp = *param_ptr;
- zval_copy_ctor(new_tmp);
- INIT_PZVAL(new_tmp);
- param_ptr = new_tmp;
- ((zval *) *(p-arg_count))->refcount--;
- *(p-arg_count) = param_ptr;
- }
- *param = param_ptr;
- arg_count--;
- }
- va_end(ptr);
-
- return SUCCESS;
-}
-
-
-ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval **argument_array TSRMLS_DC)
-{
- void **p;
- int arg_count;
- zval *param_ptr;
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- if (param_count>arg_count) {
- return FAILURE;
- }
-
- while (param_count-->0) {
- param_ptr = *(p-arg_count);
- if (!PZVAL_IS_REF(param_ptr) && param_ptr->refcount>1) {
- zval *new_tmp;
-
- ALLOC_ZVAL(new_tmp);
- *new_tmp = *param_ptr;
- zval_copy_ctor(new_tmp);
- INIT_PZVAL(new_tmp);
- param_ptr = new_tmp;
- ((zval *) *(p-arg_count))->refcount--;
- *(p-arg_count) = param_ptr;
- }
- *(argument_array++) = param_ptr;
- arg_count--;
- }
-
- return SUCCESS;
-}
-
-
-
-
-/* Zend-optimized Extended functions */
-/* this function doesn't check for too many parameters */
-ZEND_API int zend_get_parameters_ex(int param_count, ...)
-{
- void **p;
- int arg_count;
- va_list ptr;
- zval ***param;
- TSRMLS_FETCH();
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- if (param_count>arg_count) {
- return FAILURE;
- }
-
- va_start(ptr, param_count);
- while (param_count-->0) {
- param = va_arg(ptr, zval ***);
- *param = (zval **) p-(arg_count--);
- }
- va_end(ptr);
-
- return SUCCESS;
-}
-
-
-ZEND_API int _zend_get_parameters_array_ex(int param_count, zval ***argument_array TSRMLS_DC)
-{
- void **p;
- int arg_count;
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- if (param_count>arg_count) {
- return FAILURE;
- }
-
- while (param_count-->0) {
- *(argument_array++) = (zval **) p-(arg_count--);
- }
-
- return SUCCESS;
-}
-
-
-ZEND_API void zend_wrong_param_count(TSRMLS_D)
-{
- zend_error(E_WARNING, "Wrong parameter count for %s()", get_active_function_name(TSRMLS_C));
-}
-
-
-/* Argument parsing API -- andrei */
-
-static char *zend_zval_type_name(zval *arg)
-{
- switch (Z_TYPE_P(arg)) {
- case IS_NULL:
- return "null";
-
- case IS_LONG:
- return "integer";
-
- case IS_DOUBLE:
- return "double";
-
- case IS_STRING:
- return "string";
-
- case IS_ARRAY:
- return "array";
-
- case IS_OBJECT:
- return "object";
-
- case IS_BOOL:
- return "boolean";
-
- case IS_RESOURCE:
- return "resource";
-
- default:
- return "unknown";
- }
-}
-
-static int zend_check_class(zval *obj, zend_class_entry *expected_ce)
-{
- zend_class_entry *ce;
-
- if (Z_TYPE_P(obj) != IS_OBJECT) {
- return 0;
- }
-
- for (ce = Z_OBJCE_P(obj); ce != NULL; ce = ce->parent) {
- if (ce == expected_ce) {
- return 1;
- }
- }
- return 0;
-}
-
-static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec)
-{
- char *spec_walk = *spec;
- char c = *spec_walk++;
- int return_null = 0;
-
- while (*spec_walk == '/' || *spec_walk == '!') {
- if (*spec_walk == '/') {
- SEPARATE_ZVAL_IF_NOT_REF(arg);
- } else if (*spec_walk == '!' && Z_TYPE_PP(arg) == IS_NULL) {
- return_null = 1;
- }
- spec_walk++;
- }
-
- switch (c) {
- case 'l':
- {
- long *p = va_arg(*va, long *);
- switch (Z_TYPE_PP(arg)) {
- case IS_STRING:
- {
- double d;
- int type;
-
- if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), p, &d, 0)) == 0) {
- return "long";
- } else if (type == IS_DOUBLE) {
- *p = (long) d;
- }
- }
- break;
-
- case IS_NULL:
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- convert_to_long_ex(arg);
- *p = Z_LVAL_PP(arg);
- break;
-
- case IS_ARRAY:
- case IS_OBJECT:
- case IS_RESOURCE:
- default:
- return "long";
- }
- }
- break;
-
- case 'd':
- {
- double *p = va_arg(*va, double *);
- switch (Z_TYPE_PP(arg)) {
- case IS_STRING:
- {
- long l;
- int type;
-
- if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &l, p, 0)) == 0) {
- return "double";
- } else if (type == IS_LONG) {
- *p = (double) l;
- }
- }
- break;
-
- case IS_NULL:
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- convert_to_double_ex(arg);
- *p = Z_DVAL_PP(arg);
- break;
-
- case IS_ARRAY:
- case IS_OBJECT:
- case IS_RESOURCE:
- default:
- return "double";
- }
- }
- break;
-
- case 's':
- {
- char **p = va_arg(*va, char **);
- int *pl = va_arg(*va, int *);
- switch (Z_TYPE_PP(arg)) {
- case IS_NULL:
- if (return_null) {
- *p = NULL;
- *pl = 0;
- break;
- }
- /* break omitted intentionally */
-
- case IS_STRING:
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- convert_to_string_ex(arg);
- *p = Z_STRVAL_PP(arg);
- *pl = Z_STRLEN_PP(arg);
- break;
-
- case IS_ARRAY:
- case IS_OBJECT:
- case IS_RESOURCE:
- default:
- return "string";
- }
- }
- break;
-
- case 'b':
- {
- zend_bool *p = va_arg(*va, zend_bool *);
- switch (Z_TYPE_PP(arg)) {
- case IS_NULL:
- case IS_STRING:
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- convert_to_boolean_ex(arg);
- *p = Z_BVAL_PP(arg);
- break;
-
- case IS_ARRAY:
- case IS_OBJECT:
- case IS_RESOURCE:
- default:
- return "boolean";
- }
- }
- break;
-
- case 'r':
- {
- zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_RESOURCE) {
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
- *p = NULL;
- } else {
- return "resource";
- }
- } else
- *p = *arg;
- }
- break;
-
- case 'a':
- {
- zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_ARRAY) {
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
- *p = NULL;
- } else {
- return "array";
- }
- } else
- *p = *arg;
- }
- break;
-
- case 'o':
- {
- zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_OBJECT) {
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
- *p = NULL;
- } else {
- return "object";
- }
- } else
- *p = *arg;
- }
- break;
-
- case 'O':
- {
- zval **p = va_arg(*va, zval **);
- zend_class_entry *ce = va_arg(*va, zend_class_entry *);
- if (Z_TYPE_PP(arg) != IS_OBJECT || !zend_check_class(*arg, ce)) {
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
- *p = NULL;
- } else {
- return ce->name;
- }
- } else
- *p = *arg;
- }
- break;
-
- case 'z':
- {
- zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
- *p = NULL;
- } else {
- *p = *arg;
- }
- }
- break;
-
- default:
- return "unknown";
- }
-
- *spec = spec_walk;
-
- return NULL;
-}
-
-static int zend_parse_arg(int arg_num, zval **arg, va_list *va, char **spec, int quiet TSRMLS_DC)
-{
- char *expected_type = NULL;
- char buf[1024];
-
- expected_type = zend_parse_arg_impl(arg, va, spec);
- if (expected_type) {
- if (!quiet) {
- sprintf(buf, "%s() expects parameter %d to be %s, %s given",
- get_active_function_name(TSRMLS_C), arg_num, expected_type,
- zend_zval_type_name(*arg));
- zend_error(E_WARNING, buf);
- }
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int flags TSRMLS_DC)
-{
- char *spec_walk;
- char buf[1024];
- int c, i;
- int min_num_args = -1;
- int max_num_args = 0;
- zval **arg;
- void **p;
- int arg_count;
- int quiet = flags & ZEND_PARSE_PARAMS_QUIET;
-
- for (spec_walk = type_spec; *spec_walk; spec_walk++) {
- c = *spec_walk;
- switch (c) {
- case 'l': case 'd':
- case 's': case 'b':
- case 'r': case 'a':
- case 'o': case 'O':
- case 'z':
- max_num_args++;
- break;
-
- case '|':
- min_num_args = max_num_args;
- break;
-
- case '/':
- case '!':
- /* Pass */
- break;
-
- default:
- if (!quiet) {
- zend_error(E_WARNING, "%s(): bad type specifier while parsing parameters", get_active_function_name(TSRMLS_C));
- }
- return FAILURE;
- }
- }
-
- if (min_num_args < 0) {
- min_num_args = max_num_args;
- }
-
- if (num_args < min_num_args || num_args > max_num_args) {
- if (!quiet) {
- sprintf(buf, "%s() expects %s %d parameter%s, %d given",
- get_active_function_name(TSRMLS_C),
- min_num_args == max_num_args ? "exactly" : num_args < min_num_args ? "at least" : "at most",
- num_args < min_num_args ? min_num_args : max_num_args,
- (num_args < min_num_args ? min_num_args : max_num_args) == 1 ? "" : "s",
- num_args);
- zend_error(E_WARNING, buf);
- }
- return FAILURE;
- }
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- if (num_args > arg_count) {
- zend_error(E_WARNING, "%s(): could not obtain parameters for parsing",
- get_active_function_name(TSRMLS_C));
- return FAILURE;
- }
-
- i = 0;
- while (num_args-- > 0) {
- arg = (zval **) p - (arg_count-i);
- if (*type_spec == '|') {
- type_spec++;
- }
- if (zend_parse_arg(i+1, arg, va, &type_spec, quiet TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- i++;
- }
-
- return SUCCESS;
-}
-
-ZEND_API int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...)
-{
- va_list va;
- int retval;
-
- va_start(va, type_spec);
- retval = zend_parse_va_args(num_args, type_spec, &va, flags TSRMLS_CC);
- va_end(va);
-
- return retval;
-}
-
-ZEND_API int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...)
-{
- va_list va;
- int retval;
-
- va_start(va, type_spec);
- retval = zend_parse_va_args(num_args, type_spec, &va, 0 TSRMLS_CC);
- va_end(va);
-
- return retval;
-}
-
-/* Argument parsing API -- andrei */
-
-
-ZEND_API int _array_init(zval *arg ZEND_FILE_LINE_DC)
-{
- ALLOC_HASHTABLE_REL(arg->value.ht);
-
- zend_hash_init(arg->value.ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- arg->type = IS_ARRAY;
- return SUCCESS;
-}
-
-
-ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *class_type, HashTable *properties ZEND_FILE_LINE_DC TSRMLS_DC)
-{
- zval *tmp;
- zend_object *object;
-
- if (!class_type->constants_updated) {
- zend_hash_apply_with_argument(&class_type->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
- zend_hash_apply_with_argument(&class_type->static_members, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
- class_type->constants_updated = 1;
- }
-
- arg->type = IS_OBJECT;
- arg->value.obj = zend_objects_new(&object, class_type);
-
- if (properties) {
- object->properties = properties;
- } else {
- ALLOC_HASHTABLE_REL(object->properties);
- zend_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(object->properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- }
- return SUCCESS;
-}
-
-ZEND_API int _object_init_ex(zval *arg, zend_class_entry *class_type ZEND_FILE_LINE_DC TSRMLS_DC)
-{
- return _object_and_properties_init(arg, class_type, 0 ZEND_FILE_LINE_CC TSRMLS_CC);
-}
-
-ZEND_API int _object_init(zval *arg ZEND_FILE_LINE_DC TSRMLS_DC)
-{
- return _object_init_ex(arg, &zend_standard_class_def ZEND_FILE_LINE_CC TSRMLS_CC);
-}
-
-
-ZEND_API int add_assoc_function(zval *arg, char *key, void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS))
-{
- zend_error(E_WARNING, "add_assoc_function() is no longer supported");
- return FAILURE;
-}
-
-
-ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, n);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_assoc_null_ex(zval *arg, char *key, uint key_len)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_BOOL(tmp, b);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_RESOURCE(tmp, r);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_DOUBLE(tmp, d);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value)
-{
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_long(zval *arg, uint index, long n)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, n);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_null(zval *arg, uint index)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_index_bool(zval *arg, uint index, int b)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_BOOL(tmp, b);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_resource(zval *arg, uint index, int r)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_RESOURCE(tmp, r);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_double(zval *arg, uint index, double d)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_DOUBLE(tmp, d);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_string(zval *arg, uint index, char *str, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_stringl(zval *arg, uint index, char *str, uint length, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_index_zval(zval *arg, uint index, zval *value)
-{
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &value, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_long(zval *arg, long n)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, n);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_null(zval *arg)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_bool(zval *arg, int b)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_BOOL(tmp, b);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_resource(zval *arg, int r)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_RESOURCE(tmp, r);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_double(zval *arg, double d)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_DOUBLE(tmp, d);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_next_index_zval(zval *arg, zval *value)
-{
- return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &value, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_get_index_long(zval *arg, uint index, long l, void **dest)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, l);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_get_index_double(zval *arg, uint index, double d, void **dest)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_DOUBLE(tmp, d);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_get_index_string(zval *arg, uint index, char *str, void **dest, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_get_index_stringl(zval *arg, uint index, char *str, uint length, void **dest, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
-}
-
-
-ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, n);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_BOOL(tmp, b);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_RESOURCE(tmp, n);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_DOUBLE(tmp, d);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-
-ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, str, duplicate);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
-{
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, str, length, duplicate);
-
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
-}
-
-ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value)
-{
- return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
-}
-
-ZEND_API int zend_startup_module(zend_module_entry *module)
-{
- if (module) {
- module->module_number = zend_next_free_module();
- if (module->module_startup_func) {
- TSRMLS_FETCH();
-
- if (module->module_startup_func(MODULE_PERSISTENT, module->module_number TSRMLS_CC)==FAILURE) {
- zend_error(E_CORE_ERROR,"Unable to start %s module", module->name);
- return FAILURE;
- }
- }
- module->type = MODULE_PERSISTENT;
- zend_register_module(module);
- }
- return SUCCESS;
-}
-
-
-/* registers all functions in *library_functions in the function hash */
-int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC)
-{
- zend_function_entry *ptr = functions;
- zend_function function;
- zend_internal_function *internal_function = (zend_internal_function *)&function;
- int count=0, unload=0;
- HashTable *target_function_table = function_table;
- int error_type;
-
- if (type==MODULE_PERSISTENT) {
- error_type = E_CORE_WARNING;
- } else {
- error_type = E_WARNING;
- }
-
- if (!target_function_table) {
- target_function_table = CG(function_table);
- }
- internal_function->type = ZEND_INTERNAL_FUNCTION;
-
- while (ptr->fname) {
- internal_function->handler = ptr->handler;
- internal_function->arg_types = ptr->func_arg_types;
- internal_function->function_name = ptr->fname;
- if (!internal_function->handler) {
- zend_error(error_type, "Null function defined as active function");
- zend_unregister_functions(functions, count, target_function_table TSRMLS_CC);
- return FAILURE;
- }
- if (zend_hash_add(target_function_table, ptr->fname, strlen(ptr->fname)+1, &function, sizeof(zend_function), NULL) == FAILURE) {
- unload=1;
- break;
- }
- ptr++;
- count++;
- }
- if (unload) { /* before unloading, display all remaining bad function in the module */
- while (ptr->fname) {
- if (zend_hash_exists(target_function_table, ptr->fname, strlen(ptr->fname)+1)) {
- zend_error(error_type, "Function registration failed - duplicate name - %s", ptr->fname);
- }
- ptr++;
- }
- zend_unregister_functions(functions, count, target_function_table TSRMLS_CC);
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* count=-1 means erase all functions, otherwise,
- * erase the first count functions
- */
-void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table TSRMLS_DC)
-{
- zend_function_entry *ptr = functions;
- int i=0;
- HashTable *target_function_table = function_table;
-
- if (!target_function_table) {
- target_function_table = CG(function_table);
- }
- while (ptr->fname) {
- if (count!=-1 && i>=count) {
- break;
- }
-#if 0
- zend_printf("Unregistering %s()\n", ptr->fname);
-#endif
- zend_hash_del(target_function_table, ptr->fname, strlen(ptr->fname)+1);
- ptr++;
- i++;
- }
-}
-
-
-ZEND_API int zend_register_module(zend_module_entry *module)
-{
- TSRMLS_FETCH();
-
-#if 0
- zend_printf("%s: Registering module %d\n", module->name, module->module_number);
-#endif
- if (module->functions && zend_register_functions(module->functions, NULL, module->type TSRMLS_CC)==FAILURE) {
- zend_error(E_CORE_WARNING,"%s: Unable to register functions, unable to load", module->name);
- return FAILURE;
- }
- module->module_started=1;
- return zend_hash_add(&module_registry, module->name, strlen(module->name)+1, (void *)module, sizeof(zend_module_entry), NULL);
-}
-
-
-void module_destructor(zend_module_entry *module)
-{
- TSRMLS_FETCH();
-
- if (module->type == MODULE_TEMPORARY) {
- zend_clean_module_rsrc_dtors(module->module_number TSRMLS_CC);
- clean_module_constants(module->module_number TSRMLS_CC);
- if (module->request_shutdown_func)
- module->request_shutdown_func(module->type, module->module_number TSRMLS_CC);
- }
-
- if (module->module_started && module->module_shutdown_func) {
-#if 0
- zend_printf("%s: Module shutdown\n", module->name);
-#endif
- module->module_shutdown_func(module->type, module->module_number TSRMLS_CC);
- }
- module->module_started=0;
- if (module->functions) {
- zend_unregister_functions(module->functions, -1, NULL TSRMLS_CC);
- }
-
-#if HAVE_LIBDL
- if (module->handle) {
- dlclose(module->handle);
- }
-#endif
-}
-
-
-/* call request startup for all modules */
-int module_registry_request_startup(zend_module_entry *module TSRMLS_DC)
-{
- if (module->request_startup_func) {
-#if 0
- zend_printf("%s: Request startup\n", module->name);
-#endif
- if (module->request_startup_func(module->type, module->module_number TSRMLS_CC)==FAILURE) {
- zend_error(E_WARNING, "request_startup() for %s module failed", module->name);
- exit(1);
- }
- }
- return 0;
-}
-
-
-/* for persistent modules - call request shutdown and flag NOT to erase
- * for temporary modules - do nothing, and flag to erase
- */
-int module_registry_cleanup(zend_module_entry *module TSRMLS_DC)
-{
- switch(module->type) {
- case MODULE_PERSISTENT:
- if (module->request_shutdown_func) {
-#if 0
- zend_printf("%s: Request shutdown\n", module->name);
-#endif
- module->request_shutdown_func(module->type, module->module_number TSRMLS_CC);
- }
- return 0;
- break;
- case MODULE_TEMPORARY:
- return 1;
- break;
- }
- return 0;
-}
-
-
-/* return the next free module number */
-int zend_next_free_module(void)
-{
- return ++module_count;
-}
-
-/* If parent_ce is not NULL then it inherits from parent_ce
- * If parent_ce is NULL and parent_name isn't then it looks for the parent and inherits from it
- * If both parent_ce and parent_name are NULL it does a regular class registration
- * If parent_name is specified but not found NULL is returned
- */
-ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name TSRMLS_DC)
-{
- zend_class_entry *register_class;
-
- if (!parent_ce && parent_name) {
- if (zend_hash_find(CG(class_table), parent_name, strlen(parent_name)+1, (void **) &parent_ce)==FAILURE) {
- return NULL;
- }
- }
-
- register_class = zend_register_internal_class(class_entry TSRMLS_CC);
-
- if (parent_ce) {
- zend_do_inheritance(register_class, parent_ce);
- }
- return register_class;
-}
-
-ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry TSRMLS_DC)
-{
- zend_class_entry *register_class;
- char *lowercase_name = zend_strndup(class_entry->name, class_entry->name_length);
-
- zend_str_tolower(lowercase_name, class_entry->name_length);
-
- class_entry->type = ZEND_INTERNAL_CLASS;
- class_entry->parent = NULL;
- class_entry->refcount = (int *) malloc(sizeof(int));
- *class_entry->refcount = 1;
- class_entry->constants_updated = 0;
- zend_hash_init(&class_entry->default_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
- zend_hash_init(&class_entry->static_members, 0, NULL, ZVAL_PTR_DTOR, 1);
- zend_hash_init(&class_entry->constants_table, 0, NULL, ZVAL_PTR_DTOR, 1);
- zend_hash_init(&class_entry->function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1);
- zend_hash_init(&class_entry->class_table, 10, NULL, ZEND_CLASS_DTOR, 1);
-
- if (class_entry->builtin_functions) {
- zend_register_functions(class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);
- }
-
- zend_hash_update(CG(class_table), lowercase_name, class_entry->name_length+1, class_entry, sizeof(zend_class_entry), (void **) &register_class);
- free(lowercase_name);
- return register_class;
-}
-
-
-ZEND_API zend_module_entry *zend_get_module(int module_number)
-{
- zend_module_entry *module;
-
- if (zend_hash_index_find(&module_registry, module_number, (void **) &module)==SUCCESS) {
- return module;
- } else {
- return NULL;
- }
-}
-
-ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
- int is_ref, int num_symbol_tables, ...)
-{
- HashTable *symbol_table;
- va_list symbol_table_list;
-
- if (num_symbol_tables <= 0) return FAILURE;
-
- symbol->is_ref = is_ref;
-
- va_start(symbol_table_list, num_symbol_tables);
- while (num_symbol_tables-- > 0) {
- symbol_table = va_arg(symbol_table_list, HashTable *);
- zend_hash_update(symbol_table, name, name_length + 1, &symbol, sizeof(zval *), NULL);
- zval_add_ref(&symbol);
- }
- va_end(symbol_table_list);
- return SUCCESS;
-}
-
-
-
-
-/* Disabled functions support */
-
-static ZEND_FUNCTION(display_disabled_function)
-{
- zend_error(E_WARNING, "%s() has been disabled for security reasons", get_active_function_name(TSRMLS_C));
-}
-
-
-static zend_function_entry disabled_function[] = {
- ZEND_FE(display_disabled_function, NULL)
- { NULL, NULL, NULL }
-};
-
-
-ZEND_API int zend_disable_function(char *function_name, uint function_name_length TSRMLS_DC)
-{
- if (zend_hash_del(CG(function_table), function_name, function_name_length+1)==FAILURE) {
- return FAILURE;
- }
- disabled_function[0].fname = function_name;
- return zend_register_functions(disabled_function, CG(function_table), MODULE_PERSISTENT TSRMLS_CC);
-}
-
-zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name)
-{
- char *lcname;
- int retval = 0;
- TSRMLS_FETCH();
-
- switch (Z_TYPE_P(callable)) {
- case IS_STRING:
- if (callable_name)
- *callable_name = estrndup(Z_STRVAL_P(callable), Z_STRLEN_P(callable));
-
- if (syntax_only)
- return 1;
-
- lcname = estrndup(Z_STRVAL_P(callable), Z_STRLEN_P(callable));
- zend_str_tolower(lcname, Z_STRLEN_P(callable));
- if (zend_hash_exists(EG(function_table), lcname, Z_STRLEN_P(callable)+1))
- retval = 1;
- efree(lcname);
- break;
-
- case IS_ARRAY:
- {
- zval **method;
- zval **obj;
- zend_class_entry *ce = NULL;
- char callable_name_len;
-
- if (zend_hash_num_elements(Z_ARRVAL_P(callable)) == 2 &&
- zend_hash_index_find(Z_ARRVAL_P(callable), 0, (void **) &obj) == SUCCESS &&
- zend_hash_index_find(Z_ARRVAL_P(callable), 1, (void **) &method) == SUCCESS &&
- (Z_TYPE_PP(obj) == IS_OBJECT || Z_TYPE_PP(obj) == IS_STRING) &&
- Z_TYPE_PP(method) == IS_STRING) {
-
- if (Z_TYPE_PP(obj) == IS_STRING) {
- if (callable_name) {
- char *ptr;
-
- callable_name_len = Z_STRLEN_PP(obj) + Z_STRLEN_PP(method) + sizeof("::");
- ptr = *callable_name = emalloc(callable_name_len);
- memcpy(ptr, Z_STRVAL_PP(obj), Z_STRLEN_PP(obj));
- ptr += Z_STRLEN_PP(obj);
- memcpy(ptr, "::", sizeof("::") - 1);
- ptr += sizeof("::") - 1;
- memcpy(ptr, Z_STRVAL_PP(method), Z_STRLEN_PP(method) + 1);
- }
-
- if (syntax_only)
- return 1;
-
- lcname = estrndup(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj));
- zend_str_tolower(lcname, Z_STRLEN_PP(obj));
- zend_hash_find(EG(class_table), lcname, Z_STRLEN_PP(obj) + 1, (void**)&ce);
- efree(lcname);
- } else {
- ce = Z_OBJCE_PP(obj);
-
- if (callable_name) {
- char *ptr;
-
- callable_name_len = ce->name_length + Z_STRLEN_PP(method) + sizeof("::");
- ptr = *callable_name = emalloc(callable_name_len);
- memcpy(ptr, ce->name, ce->name_length);
- ptr += ce->name_length;
- memcpy(ptr, "::", sizeof("::") - 1);
- ptr += sizeof("::") - 1;
- memcpy(ptr, Z_STRVAL_PP(method), Z_STRLEN_PP(method) + 1);
- }
-
- if (syntax_only)
- return 1;
- }
-
- if (ce) {
- lcname = estrndup(Z_STRVAL_PP(method), Z_STRLEN_PP(method));
- zend_str_tolower(lcname, Z_STRLEN_PP(method));
- if (zend_hash_exists(&ce->function_table, lcname, Z_STRLEN_PP(method)+1))
- retval = 1;
- efree(lcname);
- }
- } else if (callable_name)
- *callable_name = estrndup("Array", sizeof("Array")-1);
- }
- break;
-
- default:
- if (callable_name) {
- zval expr_copy;
- int use_copy;
-
- zend_make_printable_zval(callable, &expr_copy, &use_copy);
- *callable_name = estrndup(Z_STRVAL(expr_copy), Z_STRLEN(expr_copy));
- zval_dtor(&expr_copy);
- }
- break;
- }
-
- return retval;
-}
-
-ZEND_API char *zend_get_module_version(char *module_name)
-{
- zend_module_entry *module;
-
- if (zend_hash_find(&module_registry, module_name, strlen(module_name) + 1,
- (void**)&module) == FAILURE) {
- return NULL;
- }
- return module->version;
-}
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
deleted file mode 100644
index 47cac6466e..0000000000
--- a/Zend/zend_API.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_API_H
-#define ZEND_API_H
-
-#include "zend_modules.h"
-#include "zend_list.h"
-#include "zend_fast_cache.h"
-#include "zend_operators.h"
-#include "zend_variables.h"
-#include "zend_execute.h"
-
-#define ZEND_FN(name) zif_##name
-#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
-#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))
-
-#define ZEND_NAMED_FE(zend_name, name, arg_types) { #zend_name, name, arg_types },
-#define ZEND_FE(name, arg_types) ZEND_NAMED_FE(name, ZEND_FN(name), arg_types)
-#define ZEND_FALIAS(name, alias, arg_types) ZEND_NAMED_FE(name, ZEND_FN(alias), arg_types)
-#define ZEND_STATIC_FE(name, impl_name, arg_types) { name, impl_name, arg_types },
-
-/* Name macros */
-#define ZEND_MODULE_STARTUP_N(module) zm_startup_##module
-#define ZEND_MODULE_SHUTDOWN_N(module) zm_shutdown_##module
-#define ZEND_MODULE_ACTIVATE_N(module) zm_activate_##module
-#define ZEND_MODULE_DEACTIVATE_N(module) zm_deactivate_##module
-#define ZEND_MODULE_INFO_N(module) zm_info_##module
-
-/* Declaration macros */
-#define ZEND_MODULE_STARTUP_D(module) int ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS)
-#define ZEND_MODULE_SHUTDOWN_D(module) int ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS)
-#define ZEND_MODULE_ACTIVATE_D(module) int ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS)
-#define ZEND_MODULE_DEACTIVATE_D(module) int ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS)
-#define ZEND_MODULE_INFO_D(module) void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS)
-
-#define ZEND_GET_MODULE(name) \
- ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name##_module_entry; }
-
-#define ZEND_BEGIN_MODULE_GLOBALS(module_name) \
- typedef struct _zend_##module_name##_globals {
-#define ZEND_END_MODULE_GLOBALS(module_name) \
- } zend_##module_name##_globals;
-
-#ifdef ZTS
-
-#define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
- ts_rsrc_id module_name##_globals_id;
-#define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
- extern ts_rsrc_id module_name##_globals_id;
-#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
- ts_allocate_id(&module_name##_globals_id, sizeof(zend_##module_name##_globals), (ts_allocate_ctor) globals_ctor, (ts_allocate_dtor) globals_dtor);
-
-#else
-
-#define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
- zend_##module_name##_globals module_name##_globals;
-#define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
- extern zend_##module_name##_globals module_name##_globals;
-#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
- globals_ctor(&module_name##_globals);
-
-#endif
-
-
-
-#define INIT_CLASS_ENTRY(class_container, class_name, functions) \
- { \
- class_container.name = strdup(class_name); \
- class_container.name_length = sizeof(class_name)-1; \
- class_container.builtin_functions = functions; \
- class_container.constructor = NULL; \
- class_container.handle_function_call = NULL; \
- class_container.handle_property_get = NULL; \
- class_container.handle_property_set = NULL; \
- }
-
-#define INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset) \
- { \
- class_container.name = strdup(class_name); \
- class_container.name_length = sizeof(class_name)-1; \
- class_container.builtin_functions = functions; \
- class_container.constructor = NULL; \
- class_container.handle_function_call = handle_fcall; \
- class_container.handle_property_get = handle_propget; \
- class_container.handle_property_set = handle_propset; \
- }
-
-
-
-int zend_next_free_module(void);
-
-ZEND_API int zend_get_parameters(int ht, int param_count, ...);
-ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval **argument_array TSRMLS_DC);
-ZEND_API int zend_get_parameters_ex(int param_count, ...);
-ZEND_API int _zend_get_parameters_array_ex(int param_count, zval ***argument_array TSRMLS_DC);
-
-#define zend_get_parameters_array(ht, param_count, argument_array) \
- _zend_get_parameters_array(ht, param_count, argument_array TSRMLS_CC)
-#define zend_get_parameters_array_ex(param_count, argument_array) \
- _zend_get_parameters_array_ex(param_count, argument_array TSRMLS_CC)
-
-
-/* Parameter parsing API -- andrei */
-
-#define ZEND_PARSE_PARAMS_QUIET 1<<1
-ZEND_API int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...);
-ZEND_API int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...);
-
-/* End of parameter parsing API -- andrei */
-
-int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC);
-void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table TSRMLS_DC);
-ZEND_API int zend_register_module(zend_module_entry *module_entry);
-
-ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry TSRMLS_DC);
-ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name TSRMLS_DC);
-
-ZEND_API zend_module_entry *zend_get_module(int module_number);
-ZEND_API int zend_disable_function(char *function_name, uint function_name_length TSRMLS_DC);
-
-ZEND_API void zend_wrong_param_count(TSRMLS_D);
-ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name);
-ZEND_API char *zend_get_module_version(char *module_name);
-
-#define getThis() (this_ptr)
-
-#define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT()
-#define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret)
-#define ARG_COUNT(dummy) (ht)
-#define ZEND_NUM_ARGS() (ht)
-#define ZEND_WRONG_PARAM_COUNT() { zend_wrong_param_count(TSRMLS_C); return; }
-#define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { zend_wrong_param_count(TSRMLS_C); return ret; }
-
-#ifndef ZEND_WIN32
-#define DLEXPORT
-#endif
-
-ZEND_API int zend_startup_module(zend_module_entry *module);
-
-#define array_init(arg) _array_init((arg) ZEND_FILE_LINE_CC)
-#define object_init(arg) _object_init((arg) ZEND_FILE_LINE_CC TSRMLS_CC)
-#define object_init_ex(arg, ce) _object_init_ex((arg), (ce) ZEND_FILE_LINE_CC TSRMLS_CC)
-#define object_and_properties_init(arg, ce, properties) _object_and_properties_init((arg), (ce), (properties) ZEND_FILE_LINE_CC TSRMLS_CC)
-ZEND_API int _array_init(zval *arg ZEND_FILE_LINE_DC);
-ZEND_API int _object_init(zval *arg ZEND_FILE_LINE_DC TSRMLS_DC);
-ZEND_API int _object_init_ex(zval *arg, zend_class_entry *ce ZEND_FILE_LINE_DC TSRMLS_DC);
-ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *ce, HashTable *properties ZEND_FILE_LINE_DC TSRMLS_DC);
-
-/* no longer supported */
-ZEND_API int add_assoc_function(zval *arg, char *key, void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
-
-ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n);
-ZEND_API int add_assoc_null_ex(zval *arg, char *key, uint key_len);
-ZEND_API int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b);
-ZEND_API int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r);
-ZEND_API int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d);
-ZEND_API int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
-ZEND_API int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
-ZEND_API int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value);
-
-#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key)+1, __n)
-#define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
-#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key)+1, __b)
-#define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key)+1, __r)
-#define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key)+1, __d)
-#define add_assoc_string(__arg, __key, __str, __duplicate) add_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
-#define add_assoc_stringl(__arg, __key, __str, __length, __duplicate) add_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
-#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key)+1, __value)
-
-/* unset() functions are only suported for legacy modules and null() functions should be used */
-#define add_assoc_unset(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
-#define add_index_unset(__arg, __key) add_index_null(__arg, __key)
-#define add_next_index_unset(__arg) add_next_index_null(__arg)
-#define add_property_unset(__arg, __key) add_property_null(__arg, __key)
-
-ZEND_API int add_index_long(zval *arg, uint idx, long n);
-ZEND_API int add_index_null(zval *arg, uint idx);
-ZEND_API int add_index_bool(zval *arg, uint idx, int b);
-ZEND_API int add_index_resource(zval *arg, uint idx, int r);
-ZEND_API int add_index_double(zval *arg, uint idx, double d);
-ZEND_API int add_index_string(zval *arg, uint idx, char *str, int duplicate);
-ZEND_API int add_index_stringl(zval *arg, uint idx, char *str, uint length, int duplicate);
-ZEND_API int add_index_zval(zval *arg, uint index, zval *value);
-
-ZEND_API int add_next_index_long(zval *arg, long n);
-ZEND_API int add_next_index_null(zval *arg);
-ZEND_API int add_next_index_bool(zval *arg, int b);
-ZEND_API int add_next_index_resource(zval *arg, int r);
-ZEND_API int add_next_index_double(zval *arg, double d);
-ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate);
-ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate);
-ZEND_API int add_next_index_zval(zval *arg, zval *value);
-
-ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate);
-ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate);
-
-#define add_get_assoc_string(__arg, __key, __str, __dest, __duplicate) add_get_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __dest, __duplicate)
-#define add_get_assoc_stringl(__arg, __key, __str, __length, __dest, __duplicate) add_get_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __dest, __duplicate)
-
-ZEND_API int add_get_index_long(zval *arg, uint idx, long l, void **dest);
-ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
-ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
-ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
-
-ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l);
-ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len);
-ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b);
-ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r);
-ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d);
-ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
-ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
-ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value);
-
-#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
-#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
-#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
-#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
-#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d)
-#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
-#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
-#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)
-
-ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC);
-ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);
-
-ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
- int is_ref, int num_symbol_tables, ...);
-
-#define add_method(arg, key, method) add_assoc_function((arg), (key), (method))
-
-#if ZEND_DEBUG
-#define CHECK_ZVAL_STRING(z) \
- if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s)", (z)->value.str.val);
-#define CHECK_ZVAL_STRING_REL(z) \
- if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", (z)->value.str.val ZEND_FILE_LINE_RELAY_CC);
-#else
-#define CHECK_ZVAL_STRING(z)
-#define CHECK_ZVAL_STRING_REL(z)
-#endif
-
-#define ZVAL_RESOURCE(z, l) { \
- (z)->type = IS_RESOURCE; \
- (z)->value.lval = l; \
- }
-
-#define ZVAL_BOOL(z, b) { \
- (z)->type = IS_BOOL; \
- (z)->value.lval = b; \
- }
-
-#define ZVAL_NULL(z) { \
- (z)->type = IS_NULL; \
- }
-
-#define ZVAL_LONG(z, l) { \
- (z)->type = IS_LONG; \
- (z)->value.lval = l; \
- }
-
-#define ZVAL_DOUBLE(z, d) { \
- (z)->type = IS_DOUBLE; \
- (z)->value.dval = d; \
- }
-
-#define ZVAL_STRING(z, s, duplicate) { \
- char *__s=(s); \
- (z)->value.str.len = strlen(__s); \
- (z)->value.str.val = (duplicate?estrndup(__s, (z)->value.str.len):__s); \
- (z)->type = IS_STRING; \
- }
-
-#define ZVAL_STRINGL(z, s, l, duplicate) { \
- char *__s=(s); int __l=l; \
- (z)->value.str.len = __l; \
- (z)->value.str.val = (duplicate?estrndup(__s, __l):__s); \
- (z)->type = IS_STRING; \
- }
-
-#define ZVAL_EMPTY_STRING(z) { \
- (z)->value.str.len = 0; \
- (z)->value.str.val = empty_string; \
- (z)->type = IS_STRING; \
- }
-
-#define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)
-#define ZVAL_TRUE(z) ZVAL_BOOL(z, 1)
-
-#define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l)
-#define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b)
-#define RETVAL_NULL() ZVAL_NULL(return_value)
-#define RETVAL_LONG(l) ZVAL_LONG(return_value, l)
-#define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d)
-#define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate)
-#define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate)
-#define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value)
-#define RETVAL_FALSE ZVAL_BOOL(return_value, 0)
-#define RETVAL_TRUE ZVAL_BOOL(return_value, 1)
-
-#define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; }
-#define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }
-#define RETURN_NULL() { RETVAL_NULL(); return;}
-#define RETURN_LONG(l) { RETVAL_LONG(l); return; }
-#define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }
-#define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; }
-#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
-#define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }
-#define RETURN_FALSE { RETVAL_FALSE; return; }
-#define RETURN_TRUE { RETVAL_TRUE; return; }
-
-#define SET_VAR_STRING(n, v) { \
- { \
- zval *var; \
- ALLOC_ZVAL(var); \
- ZVAL_STRING(var, v, 0); \
- ZEND_SET_GLOBAL_VAR(n, var); \
- } \
- }
-
-#define SET_VAR_STRINGL(n, v, l) { \
- { \
- zval *var; \
- ALLOC_ZVAL(var); \
- ZVAL_STRINGL(var, v, l, 0); \
- ZEND_SET_GLOBAL_VAR(n, var); \
- } \
- }
-
-#define SET_VAR_LONG(n, v) { \
- { \
- zval *var; \
- ALLOC_ZVAL(var); \
- ZVAL_LONG(var, v); \
- ZEND_SET_GLOBAL_VAR(n, var); \
- } \
- }
-
-#define SET_VAR_DOUBLE(n, v) { \
- { \
- zval *var; \
- ALLOC_ZVAL(var); \
- ZVAL_DOUBLE(var, v); \
- ZEND_SET_GLOBAL_VAR(n, var); \
- } \
- }
-
-
-#define ZEND_SET_SYMBOL(symtable, name, var) \
- { \
- char *_name = (name); \
- \
- ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \
- }
-
-#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount, _is_ref) \
- { \
- zval **orig_var; \
- \
- if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS \
- && PZVAL_IS_REF(*orig_var)) { \
- (var)->refcount = (*orig_var)->refcount; \
- (var)->is_ref = 1; \
- \
- if (_refcount) { \
- (var)->refcount += _refcount-1; \
- } \
- zval_dtor(*orig_var); \
- **orig_var = *(var); \
- FREE_ZVAL(var); \
- } else { \
- (var)->is_ref = _is_ref; \
- if (_refcount) { \
- (var)->refcount = _refcount; \
- } \
- zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL); \
- } \
- }
-
-
-#define ZEND_SET_GLOBAL_VAR(name, var) \
- ZEND_SET_SYMBOL(&EG(symbol_table), name, var)
-
-#define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var, _refcount, _is_ref) \
- ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var, _refcount, _is_ref)
-
-#define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? Z_OBJPROP_P(p) : NULL)))
-#define ZVAL_IS_NULL(z) ((z)->type==IS_NULL)
-
-/* For compatibility */
-#define ZEND_MINIT ZEND_MODULE_STARTUP_N
-#define ZEND_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N
-#define ZEND_RINIT ZEND_MODULE_ACTIVATE_N
-#define ZEND_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N
-#define ZEND_MINFO ZEND_MODULE_INFO_N
-
-#define ZEND_MINIT_FUNCTION ZEND_MODULE_STARTUP_D
-#define ZEND_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D
-#define ZEND_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D
-#define ZEND_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D
-#define ZEND_MINFO_FUNCTION ZEND_MODULE_INFO_D
-
-#endif /* ZEND_API_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
deleted file mode 100644
index 8a383819c8..0000000000
--- a/Zend/zend_alloc.c
+++ /dev/null
@@ -1,769 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdlib.h>
-
-#include "zend.h"
-#include "zend_alloc.h"
-#include "zend_globals.h"
-#include "zend_fast_cache.h"
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifndef ZTS
-ZEND_API zend_alloc_globals alloc_globals;
-#endif
-
-
-#define ZEND_DISABLE_MEMORY_CACHE 0
-
-
-#ifdef ZEND_WIN32
-#define ZEND_DO_MALLOC(size) (AG(memory_heap) ? HeapAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, size) : malloc(size))
-#define ZEND_DO_FREE(ptr) (AG(memory_heap) ? HeapFree(AG(memory_heap), HEAP_NO_SERIALIZE, ptr) : free(ptr))
-#define ZEND_DO_REALLOC(ptr, size) (AG(memory_heap) ? HeapReAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, ptr, size) : realloc(ptr, size))
-#else
-#define ZEND_DO_MALLOC(size) malloc(size)
-#define ZEND_DO_FREE(ptr) free(ptr)
-#define ZEND_DO_REALLOC(ptr, size) realloc(ptr, size)
-#endif
-
-#if ZEND_DEBUG
-# define END_MAGIC_SIZE sizeof(long)
-static long mem_block_end_magic = MEM_BLOCK_END_MAGIC;
-#else
-# define END_MAGIC_SIZE 0
-#endif
-
-
-# if MEMORY_LIMIT
-# if ZEND_DEBUG
-#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, __zend_filename, __zend_lineno)
-# else
-#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, NULL, 0)
-# endif
-
-#define _CHECK_MEMORY_LIMIT(s, rs, file, lineno) { AG(allocated_memory) += rs;\
- if (AG(memory_limit)<AG(allocated_memory)) {\
- if ((AG(memory_limit)+1048576)<AG(allocated_memory)) { \
- /* failed to handle this gracefully, exit() */ \
- exit(1); \
- } \
- if (!AG(memory_exhausted)) { \
- if (!file) { \
- zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", AG(memory_limit), s); \
- } else { \
- zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", AG(memory_limit), file, lineno, s); \
- } \
- AG(memory_exhausted)=1; \
- } \
- } \
- }
-# endif
-
-#ifndef CHECK_MEMORY_LIMIT
-#define CHECK_MEMORY_LIMIT(s, rs)
-#endif
-
-
-#define REMOVE_POINTER_FROM_LIST(p) \
- if (!p->persistent && p==AG(head)) { \
- AG(head) = p->pNext; \
- } else if (p->persistent && p==AG(phead)) { \
- AG(phead) = p->pNext; \
- } else { \
- p->pLast->pNext = p->pNext; \
- } \
- if (p->pNext) { \
- p->pNext->pLast = p->pLast; \
- }
-
-#define ADD_POINTER_TO_LIST(p) \
- if (p->persistent) { \
- p->pNext = AG(phead); \
- if (AG(phead)) { \
- AG(phead)->pLast = p; \
- } \
- AG(phead) = p; \
- } else { \
- p->pNext = AG(head); \
- if (AG(head)) { \
- AG(head)->pLast = p; \
- } \
- AG(head) = p; \
- } \
- p->pLast = (zend_mem_header *) NULL;
-
-#define DECLARE_CACHE_VARS() \
- unsigned int real_size; \
- unsigned int cache_index
-
-#define REAL_SIZE(size) ((size+7) & ~0x7)
-
-#define CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size) \
- real_size = REAL_SIZE(size); \
- cache_index = real_size >> 3;
-
-#define SIZE real_size
-
-#define CACHE_INDEX cache_index
-
-ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p;
- DECLARE_CACHE_VARS();
- TSRMLS_FETCH();
-
- CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
-
- if (!ZEND_DISABLE_MEMORY_CACHE && (CACHE_INDEX < MAX_CACHED_MEMORY) && (AG(cache_count)[CACHE_INDEX] > 0)) {
- p = AG(cache)[CACHE_INDEX][--AG(cache_count)[CACHE_INDEX]];
-#if ZEND_DEBUG
- p->filename = __zend_filename;
- p->lineno = __zend_lineno;
- p->orig_filename = __zend_orig_filename;
- p->orig_lineno = __zend_orig_lineno;
- p->magic = MEM_BLOCK_START_MAGIC;
- p->reported = 0;
- /* Setting the thread id should not be necessary, because we fetched this block
- * from this thread's cache
- */
- AG(cache_stats)[CACHE_INDEX][1]++;
- memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
-#endif
- p->persistent = 0;
- p->cached = 0;
- p->size = size;
- return (void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING);
- } else {
-#if ZEND_DEBUG
- if (CACHE_INDEX<MAX_CACHED_MEMORY) {
- AG(cache_stats)[CACHE_INDEX][0]++;
- }
-#endif
- p = (zend_mem_header *) ZEND_DO_MALLOC(sizeof(zend_mem_header) + MEM_HEADER_PADDING + SIZE + END_MAGIC_SIZE);
- }
-
- HANDLE_BLOCK_INTERRUPTIONS();
-
- if (!p) {
- fprintf(stderr,"FATAL: emalloc(): Unable to allocate %ld bytes\n", (long) size);
-#if ZEND_DEBUG && defined(HAVE_KILL) && defined(HAVE_GETPID)
- kill(getpid(), SIGSEGV);
-#else
- exit(1);
-#endif
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (void *)p;
- }
- p->persistent = p->cached = 0;
- ADD_POINTER_TO_LIST(p);
- p->size = size; /* Save real size for correct cache output */
-#if ZEND_DEBUG
- p->filename = __zend_filename;
- p->lineno = __zend_lineno;
- p->orig_filename = __zend_orig_filename;
- p->orig_lineno = __zend_orig_lineno;
- p->magic = MEM_BLOCK_START_MAGIC;
- p->reported = 0;
-# ifdef ZTS
- p->thread_id = tsrm_thread_id();
-# endif
- memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
-#endif
-#if MEMORY_LIMIT
- CHECK_MEMORY_LIMIT(size, SIZE);
- if (AG(allocated_memory) > AG(allocated_memory_peak)) {
- AG(allocated_memory_peak) = AG(allocated_memory);
- }
-#endif
-
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING);
-}
-
-
-ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p = (zend_mem_header *) ((char *)ptr - sizeof(zend_mem_header) - MEM_HEADER_PADDING);
- DECLARE_CACHE_VARS();
- TSRMLS_FETCH();
-
-#if defined(ZTS) && TSRM_DEBUG
- if (p->thread_id != tsrm_thread_id()) {
- tsrm_error(TSRM_ERROR_LEVEL_ERROR, "Memory block allocated at %s:(%d) on thread %x freed at %s:(%d) on thread %x, ignoring",
- p->filename, p->lineno, p->thread_id,
- __zend_filename, __zend_lineno, tsrm_thread_id());
- return;
- }
-#endif
-
- CALCULATE_REAL_SIZE_AND_CACHE_INDEX(p->size);
-#if ZEND_DEBUG
- if (!_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
- return;
- }
- memset(ptr, 0x5a, p->size);
-#endif
-
- if (!ZEND_DISABLE_MEMORY_CACHE
- && !p->persistent && (CACHE_INDEX < MAX_CACHED_MEMORY) && (AG(cache_count)[CACHE_INDEX] < MAX_CACHED_ENTRIES)) {
- AG(cache)[CACHE_INDEX][AG(cache_count)[CACHE_INDEX]++] = p;
- p->cached = 1;
-#if ZEND_DEBUG
- p->magic = MEM_BLOCK_CACHED_MAGIC;
-#endif
- return;
- }
- HANDLE_BLOCK_INTERRUPTIONS();
- REMOVE_POINTER_FROM_LIST(p);
-
-#if MEMORY_LIMIT
- AG(allocated_memory) -= SIZE;
-#endif
-
- ZEND_DO_FREE(p);
- HANDLE_UNBLOCK_INTERRUPTIONS();
-}
-
-
-ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- void *p;
- int final_size = size*nmemb;
-
- HANDLE_BLOCK_INTERRUPTIONS();
- p = _emalloc(final_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (!p) {
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (void *) p;
- }
- memset(p, 0, final_size);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return p;
-}
-
-
-ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p;
- zend_mem_header *orig;
- DECLARE_CACHE_VARS();
- TSRMLS_FETCH();
-
- if (!ptr) {
- return _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
-
- p = orig = (zend_mem_header *) ((char *)ptr-sizeof(zend_mem_header)-MEM_HEADER_PADDING);
-
-#if defined(ZTS) && TSRM_DEBUG
- if (p->thread_id != tsrm_thread_id()) {
- void *new_p;
-
- tsrm_error(TSRM_ERROR_LEVEL_ERROR, "Memory block allocated at %s:(%d) on thread %x reallocated at %s:(%d) on thread %x, duplicating",
- p->filename, p->lineno, p->thread_id,
- __zend_filename, __zend_lineno, tsrm_thread_id());
- new_p = _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- memcpy(new_p, ptr, p->size);
- return new_p;
- }
-#endif
-
- CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
-
- HANDLE_BLOCK_INTERRUPTIONS();
- REMOVE_POINTER_FROM_LIST(p);
- p = (zend_mem_header *) ZEND_DO_REALLOC(p, sizeof(zend_mem_header)+MEM_HEADER_PADDING+SIZE+END_MAGIC_SIZE);
- if (!p) {
- if (!allow_failure) {
- fprintf(stderr,"FATAL: erealloc(): Unable to allocate %ld bytes\n", (long) size);
-#if ZEND_DEBUG && HAVE_KILL && HAVE_GETPID
- kill(getpid(), SIGSEGV);
-#else
- exit(1);
-#endif
- }
- ADD_POINTER_TO_LIST(orig);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (void *)NULL;
- }
- ADD_POINTER_TO_LIST(p);
-#if ZEND_DEBUG
- p->filename = __zend_filename;
- p->lineno = __zend_lineno;
- p->magic = MEM_BLOCK_START_MAGIC;
- memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
-#endif
-#if MEMORY_LIMIT
- CHECK_MEMORY_LIMIT(size - p->size, SIZE - REAL_SIZE(p->size));
- if (AG(allocated_memory) > AG(allocated_memory_peak)) {
- AG(allocated_memory_peak) = AG(allocated_memory);
- }
-#endif
-
- p->size = size;
-
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (void *)((char *)p+sizeof(zend_mem_header)+MEM_HEADER_PADDING);
-}
-
-
-ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- int length;
- char *p;
-
- length = strlen(s)+1;
- HANDLE_BLOCK_INTERRUPTIONS();
- p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (!p) {
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (char *)NULL;
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
- memcpy(p, s, length);
- return p;
-}
-
-
-ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- char *p;
-
- HANDLE_BLOCK_INTERRUPTIONS();
- p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (!p) {
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return (char *)NULL;
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
- memcpy(p, s, length);
- p[length] = 0;
- return p;
-}
-
-
-ZEND_API char *zend_strndup(const char *s, uint length)
-{
- char *p;
-
- p = (char *) malloc(length+1);
- if (!p) {
- return (char *)NULL;
- }
- if (length) {
- memcpy(p, s, length);
- }
- p[length] = 0;
- return p;
-}
-
-
-ZEND_API int zend_set_memory_limit(unsigned int memory_limit)
-{
-#if MEMORY_LIMIT
- TSRMLS_FETCH();
-
- AG(memory_limit) = memory_limit;
- return SUCCESS;
-#else
- return FAILURE;
-#endif
-}
-
-
-ZEND_API void start_memory_manager(TSRMLS_D)
-{
-#if 0
-#ifndef ZTS
- int i, j;
- void *cached_entries[MAX_CACHED_MEMORY][MAX_CACHED_ENTRIES];
-#endif
-#endif
-
- AG(phead) = AG(head) = NULL;
-
-#if MEMORY_LIMIT
- AG(memory_limit) = 1<<30; /* ridiculous limit, effectively no limit */
- AG(allocated_memory) = 0;
- AG(memory_exhausted) = 0;
- AG(allocated_memory_peak) = 0;
-#endif
-
- memset(AG(fast_cache_list_head), 0, sizeof(AG(fast_cache_list_head)));
- memset(AG(cache_count), 0, sizeof(AG(cache_count)));
-
-#ifdef ZEND_WIN32
- AG(memory_heap) = HeapCreate(HEAP_NO_SERIALIZE, 256*1024, 0);
-#endif
-
-#if 0
-#ifndef ZTS
- /* Initialize cache, to prevent fragmentation */
- /* We can't do this in ZTS mode, because calling emalloc() from within start_memory_manager()
- * will yield an endless recursion calling to alloc_globals_ctor()
- */
- for (i=1; i<MAX_CACHED_MEMORY; i++) {
- for (j=0; j<PRE_INIT_CACHE_ENTRIES; j++) {
- cached_entries[i][j] = emalloc(8*i);
- }
- }
- for (i=1; i<MAX_CACHED_MEMORY; i++) {
- for (j=0; j<PRE_INIT_CACHE_ENTRIES; j++) {
- efree(cached_entries[i][j]);
- }
- }
-#endif
-#endif
-
-#if ZEND_DEBUG
- memset(AG(cache_stats), 0, sizeof(AG(cache_stats)));
- memset(AG(fast_cache_stats), 0, sizeof(AG(fast_cache_stats)));
-#endif
-}
-
-
-ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
-{
- zend_mem_header *p, *t;
- unsigned int fci, i, j;
-#if ZEND_DEBUG
- int had_leaks = 0;
-#endif
- zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry;
- TSRMLS_FETCH();
-
-#if defined(ZEND_WIN32) && !ZEND_DEBUG
- if (clean_cache && AG(memory_heap)) {
- HeapDestroy(AG(memory_heap));
- return;
- }
-#endif
-
- for (fci=0; fci<MAX_FAST_CACHE_TYPES; fci++) {
- fast_cache_list_entry = AG(fast_cache_list_head)[fci];
- while (fast_cache_list_entry) {
- next_fast_cache_list_entry = fast_cache_list_entry->next;
- efree(fast_cache_list_entry);
- fast_cache_list_entry = next_fast_cache_list_entry;
- }
- AG(fast_cache_list_head)[fci] = NULL;
- }
-
- if (1 || clean_cache) {
- zend_mem_header *ptr;
-
- for (i=1; i<MAX_CACHED_MEMORY; i++) {
- for (j=0; j<AG(cache_count)[i]; j++) {
- ptr = (zend_mem_header *) AG(cache)[i][j];
-#if MEMORY_LIMIT
- AG(allocated_memory) -= REAL_SIZE(ptr->size);
-#endif
- REMOVE_POINTER_FROM_LIST(ptr);
- ZEND_DO_FREE(ptr);
- }
- AG(cache_count)[i] = 0;
- }
- }
-
- p = AG(head);
- t = AG(head);
- while (t) {
- if (!t->cached) {
-#if ZEND_DEBUG
- if (!t->cached && !t->reported) {
- zend_mem_header *iterator;
- int total_leak=0, total_leak_count=0;
-
- had_leaks = 1;
- if (!silent) {
- zend_message_dispatcher(ZMSG_MEMORY_LEAK_DETECTED, t);
- }
- t->reported = 1;
- for (iterator=t->pNext; iterator; iterator=iterator->pNext) {
- if (!iterator->cached
- && iterator->filename==t->filename
- && iterator->lineno==t->lineno) {
- total_leak += iterator->size;
- total_leak_count++;
- iterator->reported = 1;
- }
- }
- if (!silent && total_leak_count>0) {
- zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *) (long) (total_leak_count));
- }
- }
-#endif
-#if MEMORY_LIMIT
- AG(allocated_memory) -= t->size;
-#endif
- p = t->pNext;
- REMOVE_POINTER_FROM_LIST(t);
- ZEND_DO_FREE(t);
- t = p;
- } else {
- t = t->pNext;
- }
- }
-
-#if MEMORY_LIMIT
- AG(memory_exhausted)=0;
- AG(allocated_memory_peak) = 0;
-#endif
-
-
-#if (ZEND_DEBUG)
- do {
- zval display_memory_cache_stats;
- int i, j;
-
- if (clean_cache) {
- /* we're shutting down completely, don't even touch the INI subsystem */
- break;
- }
- if (zend_get_configuration_directive("display_memory_cache_stats", sizeof("display_memory_cache_stats"), &display_memory_cache_stats)==FAILURE) {
- break;
- }
- if (!atoi(display_memory_cache_stats.value.str.val)) {
- break;
- }
- fprintf(stderr, "Memory cache statistics\n"
- "-----------------------\n\n"
- "[zval, %2ld]\t\t%d / %d (%.2f%%)\n"
- "[hash, %2ld]\t\t%d / %d (%.2f%%)\n",
- (long) sizeof(zval),
- AG(fast_cache_stats)[ZVAL_CACHE_LIST][1], AG(fast_cache_stats)[ZVAL_CACHE_LIST][0]+AG(fast_cache_stats)[ZVAL_CACHE_LIST][1],
- ((double) AG(fast_cache_stats)[ZVAL_CACHE_LIST][1] / (AG(fast_cache_stats)[ZVAL_CACHE_LIST][0]+AG(fast_cache_stats)[ZVAL_CACHE_LIST][1]))*100,
- (long) sizeof(HashTable),
- AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1], AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][0]+AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1],
- ((double) AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1] / (AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][0]+AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1]))*100);
-
-
- for (i=0; i<MAX_CACHED_MEMORY; i+=2) {
- fprintf(stderr, "[%2d, %2d]\t\t", i, i+1);
- for (j=0; j<2; j++) {
- fprintf(stderr, "%d / %d (%.2f%%)\t\t",
- AG(cache_stats)[i+j][1], AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1],
- ((double) AG(cache_stats)[i+j][1] / (AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1]))*100);
- }
- fprintf(stderr, "\n");
- }
-
- } while (0);
-
-#if defined(ZEND_WIN32) && ZEND_DEBUG
- if (clean_cache && AG(memory_heap)) {
- HeapDestroy(AG(memory_heap));
- }
-#endif
-
-#endif
-}
-
-
-#if ZEND_DEBUG
-void zend_debug_alloc_output(char *format, ...)
-{
- char output_buf[256];
- va_list args;
-
- va_start(args, format);
- vsprintf(output_buf, format, args);
- va_end(args);
-
-#ifdef ZEND_WIN32
- OutputDebugString(output_buf);
-#else
- fprintf(stderr, "%s", output_buf);
-#endif
-}
-
-
-ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p = (zend_mem_header *) ((char *)ptr - sizeof(zend_mem_header) - MEM_HEADER_PADDING);
- int no_cache_notice=0;
- int valid_beginning=1;
- int had_problems=0;
- long end_magic;
-
- if (silent==2) {
- silent = 1;
- no_cache_notice = 1;
- }
- if (silent==3) {
- silent = 0;
- no_cache_notice = 1;
- }
- if (!silent) {
- zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL);
- zend_debug_alloc_output("---------------------------------------\n");
- zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n" ZEND_FILE_LINE_RELAY_CC, (long) p);
- if (__zend_orig_filename) {
- zend_debug_alloc_output("%s(%d) : Actual location (location was relayed)\n" ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
- zend_debug_alloc_output("%10s\t","Beginning: ");
- }
-
- switch (p->magic) {
- case MEM_BLOCK_START_MAGIC:
- if (!silent) {
- zend_debug_alloc_output("OK (allocated on %s:%d, %d bytes)\n", p->filename, p->lineno, p->size);
- }
- break; /* ok */
- case MEM_BLOCK_FREED_MAGIC:
- if (!silent) {
- zend_debug_alloc_output("Freed\n");
- had_problems = 1;
- } else {
- return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
- break;
- case MEM_BLOCK_CACHED_MAGIC:
- if (!silent) {
- if (!no_cache_notice) {
- zend_debug_alloc_output("Cached (allocated on %s:%d, %d bytes)\n", p->filename, p->lineno, p->size);
- had_problems = 1;
- }
- } else {
- if (!no_cache_notice) {
- return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
- }
- break;
- default:
- if (!silent) {
- zend_debug_alloc_output("Overrun (magic=0x%0.8lX, expected=0x%0.8lX)\n", p->magic, MEM_BLOCK_START_MAGIC);
- } else {
- return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
- had_problems = 1;
- valid_beginning = 0;
- break;
- }
-
-
- memcpy(&end_magic, (((char *) p)+sizeof(zend_mem_header)+MEM_HEADER_PADDING+p->size), sizeof(long));
-
- if (valid_beginning && (end_magic != MEM_BLOCK_END_MAGIC)) {
- char *overflow_ptr, *magic_ptr=(char *) &mem_block_end_magic;
- int overflows=0;
- int i;
-
- if (silent) {
- return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- }
- had_problems = 1;
- overflow_ptr = (char *) &end_magic;
-
- for (i=0; i<sizeof(long); i++) {
- if (overflow_ptr[i]!=magic_ptr[i]) {
- overflows++;
- }
- }
-
- zend_debug_alloc_output("%10s\t", "End:");
- zend_debug_alloc_output("Overflown (magic=0x%0.8lX instead of 0x%0.8lX)\n", end_magic, MEM_BLOCK_END_MAGIC);
- zend_debug_alloc_output("%10s\t","");
- if (overflows>=sizeof(long)) {
- zend_debug_alloc_output("At least %d bytes overflown\n", sizeof(long));
- } else {
- zend_debug_alloc_output("%d byte(s) overflown\n", overflows);
- }
- } else if (!silent) {
- zend_debug_alloc_output("%10s\t", "End:");
- if (valid_beginning) {
- zend_debug_alloc_output("OK\n");
- } else {
- zend_debug_alloc_output("Unknown\n");
- }
- }
-
- if (had_problems) {
- int foo = 5;
-
- foo += 1;
- }
-
- if (!silent) {
- zend_debug_alloc_output("---------------------------------------\n");
- }
- return ((!had_problems) ? 1 : 0);
-}
-
-
-ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p;
- int errors=0;
- TSRMLS_FETCH();
-
- p = AG(head);
-
-
- zend_debug_alloc_output("------------------------------------------------\n");
- zend_debug_alloc_output("Full Memory Check at %s:%d\n" ZEND_FILE_LINE_RELAY_CC);
-
- while (p) {
- if (!_mem_block_check((void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING), (silent?2:3) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
- errors++;
- }
- p = p->pNext;
- }
- zend_debug_alloc_output("End of full memory check %s:%d (%d errors)\n" ZEND_FILE_LINE_RELAY_CC, errors);
- zend_debug_alloc_output("------------------------------------------------\n");
-}
-#endif
-
-
-ZEND_API int _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
-{
- zend_mem_header *p = (zend_mem_header *) ((char *)ptr-sizeof(zend_mem_header)-MEM_HEADER_PADDING);
- TSRMLS_FETCH();
-
-#if ZEND_DEBUG
- _mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
-#endif
-
- HANDLE_BLOCK_INTERRUPTIONS();
-
- /* remove the block from the non persistent list */
- REMOVE_POINTER_FROM_LIST(p);
-
- p->persistent = 1;
-
- /* add the block to the persistent list */
- ADD_POINTER_TO_LIST(p);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return REAL_SIZE(p->size)+sizeof(zend_mem_header)+MEM_HEADER_PADDING;
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
deleted file mode 100644
index 5c7dedfd2b..0000000000
--- a/Zend/zend_alloc.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_ALLOC_H
-#define ZEND_ALLOC_H
-
-#include <stdio.h>
-
-#include "../TSRM/TSRM.h"
-#include "zend_globals_macros.h"
-
-#define MEM_BLOCK_START_MAGIC 0x7312F8DCL
-#define MEM_BLOCK_END_MAGIC 0x2A8FCC84L
-#define MEM_BLOCK_FREED_MAGIC 0x99954317L
-#define MEM_BLOCK_CACHED_MAGIC 0xFB8277DCL
-
-typedef struct _zend_mem_header {
-#if ZEND_DEBUG
- long magic;
- char *filename;
- uint lineno;
- int reported;
- char *orig_filename;
- uint orig_lineno;
-# ifdef ZTS
- THREAD_T thread_id;
-# endif
-#endif
- struct _zend_mem_header *pNext;
- struct _zend_mem_header *pLast;
- unsigned int size:30;
- unsigned int persistent:1;
- unsigned int cached:1;
-} zend_mem_header;
-
-typedef union _align_test {
- void *ptr;
- double dbl;
- long lng;
-} align_test;
-
-#define MAX_CACHED_MEMORY 11
-#define MAX_CACHED_ENTRIES 256
-#define PRE_INIT_CACHE_ENTRIES 32
-
-#if (defined (__GNUC__) && __GNUC__ >= 2)
-#define PLATFORM_ALIGNMENT (__alignof__ (align_test))
-#else
-#define PLATFORM_ALIGNMENT (sizeof(align_test))
-#endif
-
-#define MEM_HEADER_PADDING (((PLATFORM_ALIGNMENT-sizeof(zend_mem_header))%PLATFORM_ALIGNMENT+PLATFORM_ALIGNMENT)%PLATFORM_ALIGNMENT)
-
-
-BEGIN_EXTERN_C()
-
-ZEND_API char *zend_strndup(const char *s, unsigned int length);
-
-ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API int _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-
-/* Standard wrapper macros */
-#define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define ecalloc(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define erealloc(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define erealloc_recoverable(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define estrndup(s, length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define persist_alloc(p) _persist_alloc((p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-
-/* Relay wrapper macros */
-#define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-#define persist_alloc_rel(p) _persist_alloc((p) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-
-/* Selective persistent/non persistent allocation macros */
-#define pemalloc(size, persistent) ((persistent)?malloc(size):emalloc(size))
-#define pefree(ptr, persistent) ((persistent)?free(ptr):efree(ptr))
-#define pecalloc(nmemb, size, persistent) ((persistent)?calloc((nmemb), (size)):ecalloc((nmemb), (size)))
-#define perealloc(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc((ptr), (size)))
-#define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size)))
-#define pestrdup(s, persistent) ((persistent)?strdup(s):estrdup(s))
-
-#define safe_estrdup(ptr) ((ptr)?(estrdup(ptr)):(empty_string))
-#define safe_estrndup(ptr, len) ((ptr)?(estrndup((ptr), (len))):(empty_string))
-
-ZEND_API int zend_set_memory_limit(unsigned int memory_limit);
-
-ZEND_API void start_memory_manager(TSRMLS_D);
-ZEND_API void shutdown_memory_manager(int silent, int clean_cache);
-
-#if ZEND_DEBUG
-ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-void zend_debug_alloc_output(char *format, ...);
-#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#define full_mem_check(silent) _full_mem_check(silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
-#else
-#define mem_block_check(type, ptr, silent)
-#define full_mem_check(silent)
-#endif
-
-
-END_EXTERN_C()
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
deleted file mode 100644
index ccd68a41d4..0000000000
--- a/Zend/zend_builtin_functions.c
+++ /dev/null
@@ -1,1154 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_API.h"
-#include "zend_builtin_functions.h"
-#include "zend_constants.h"
-
-#undef ZEND_TEST_EXCEPTIONS
-
-static ZEND_FUNCTION(zend_version);
-static ZEND_FUNCTION(func_num_args);
-static ZEND_FUNCTION(func_get_arg);
-static ZEND_FUNCTION(func_get_args);
-static ZEND_NAMED_FUNCTION(zend_if_strlen);
-static ZEND_FUNCTION(strcmp);
-static ZEND_FUNCTION(strncmp);
-static ZEND_FUNCTION(strcasecmp);
-static ZEND_FUNCTION(strncasecmp);
-static ZEND_FUNCTION(each);
-static ZEND_FUNCTION(error_reporting);
-static ZEND_FUNCTION(define);
-static ZEND_FUNCTION(defined);
-static ZEND_FUNCTION(get_class);
-static ZEND_FUNCTION(get_parent_class);
-static ZEND_FUNCTION(method_exists);
-static ZEND_FUNCTION(class_exists);
-static ZEND_FUNCTION(function_exists);
-static ZEND_FUNCTION(leak);
-#ifdef ZEND_TEST_EXCEPTIONS
-static ZEND_FUNCTION(crash);
-#endif
-static ZEND_FUNCTION(get_included_files);
-static ZEND_FUNCTION(is_subclass_of);
-static ZEND_FUNCTION(get_class_vars);
-static ZEND_FUNCTION(get_object_vars);
-static ZEND_FUNCTION(get_class_methods);
-static ZEND_FUNCTION(trigger_error);
-static ZEND_FUNCTION(set_error_handler);
-static ZEND_FUNCTION(restore_error_handler);
-static ZEND_FUNCTION(get_declared_classes);
-static ZEND_FUNCTION(get_defined_functions);
-static ZEND_FUNCTION(get_defined_vars);
-static ZEND_FUNCTION(create_function);
-static ZEND_FUNCTION(get_resource_type);
-static ZEND_FUNCTION(get_loaded_extensions);
-static ZEND_FUNCTION(extension_loaded);
-static ZEND_FUNCTION(get_extension_funcs);
-static ZEND_FUNCTION(get_defined_constants);
-#if ZEND_DEBUG
-static ZEND_FUNCTION(zend_test_func);
-#endif
-
-ZEND_API unsigned char first_arg_force_ref[] = { 1, BYREF_FORCE };
-ZEND_API unsigned char second_arg_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-ZEND_API unsigned char third_arg_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-
-static zend_function_entry builtin_functions[] = {
- ZEND_FE(zend_version, NULL)
- ZEND_FE(func_num_args, NULL)
- ZEND_FE(func_get_arg, NULL)
- ZEND_FE(func_get_args, NULL)
- { "strlen", zend_if_strlen, NULL },
- ZEND_FE(strcmp, NULL)
- ZEND_FE(strncmp, NULL)
- ZEND_FE(strcasecmp, NULL)
- ZEND_FE(strncasecmp, NULL)
- ZEND_FE(each, first_arg_force_ref)
- ZEND_FE(error_reporting, NULL)
- ZEND_FE(define, NULL)
- ZEND_FE(defined, NULL)
- ZEND_FE(get_class, NULL)
- ZEND_FE(get_parent_class, NULL)
- ZEND_FE(method_exists, NULL)
- ZEND_FE(class_exists, NULL)
- ZEND_FE(function_exists, NULL)
- ZEND_FE(leak, NULL)
-#ifdef ZEND_TEST_EXCEPTIONS
- ZEND_FE(crash, NULL)
-#endif
- ZEND_FE(get_included_files, NULL)
- ZEND_FALIAS(get_required_files, get_included_files, NULL)
- ZEND_FE(is_subclass_of, NULL)
- ZEND_FE(get_class_vars, NULL)
- ZEND_FE(get_object_vars, NULL)
- ZEND_FE(get_class_methods, NULL)
- ZEND_FE(trigger_error, NULL)
- ZEND_FALIAS(user_error, trigger_error, NULL)
- ZEND_FE(set_error_handler, NULL)
- ZEND_FE(restore_error_handler, NULL)
- ZEND_FE(get_declared_classes, NULL)
- ZEND_FE(get_defined_functions, NULL)
- ZEND_FE(get_defined_vars, NULL)
- ZEND_FE(create_function, NULL)
- ZEND_FE(get_resource_type, NULL)
- ZEND_FE(get_loaded_extensions, NULL)
- ZEND_FE(extension_loaded, NULL)
- ZEND_FE(get_extension_funcs, NULL)
- ZEND_FE(get_defined_constants, NULL)
-#if ZEND_DEBUG
- ZEND_FE(zend_test_func, NULL)
-#endif
- { NULL, NULL, NULL }
-};
-
-
-int zend_startup_builtin_functions(TSRMLS_D)
-{
- return zend_register_functions(builtin_functions, NULL, MODULE_PERSISTENT TSRMLS_CC);
-}
-
-
-/* {{{ proto string zend_version(void)
- Get the version of the Zend Engine */
-ZEND_FUNCTION(zend_version)
-{
- RETURN_STRINGL(ZEND_VERSION, sizeof(ZEND_VERSION)-1, 1);
-}
-/* }}} */
-
-
-/* {{{ proto int func_num_args(void)
- Get the number of arguments that were passed to the function */
-ZEND_FUNCTION(func_num_args)
-{
- void **p;
- int arg_count;
-
- p = EG(argument_stack).top_element-1-1;
- arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */
- p -= 1+arg_count;
- if (*p) {
- zend_error(E_ERROR, "func_num_args(): Can't be used as a function parameter");
- }
- --p;
- if (p>=EG(argument_stack).elements) {
- RETURN_LONG((ulong) *p);
- } else {
- zend_error(E_WARNING, "func_num_args(): Called from the global scope - no function context");
- RETURN_LONG(-1);
- }
-}
-/* }}} */
-
-
-/* {{{ proto mixed func_get_arg(int arg_num)
- Get the $arg_num'th argument that was passed to the function */
-ZEND_FUNCTION(func_get_arg)
-{
- void **p;
- int arg_count;
- zval **z_requested_offset;
- zval *arg;
- long requested_offset;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &z_requested_offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(z_requested_offset);
- requested_offset = (*z_requested_offset)->value.lval;
-
- p = EG(argument_stack).top_element-1-1;
- arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_arg(); */
- p -= 1+arg_count;
- if (*p) {
- zend_error(E_ERROR, "func_get_arg(): Can't be used as a function parameter");
- }
- --p;
- if (p<EG(argument_stack).elements) {
- zend_error(E_WARNING, "func_get_arg(): Called from the global scope - no function context");
- RETURN_FALSE;
- }
- arg_count = (ulong) *p;
-
- if (requested_offset>=arg_count) {
- zend_error(E_WARNING, "func_get_arg(): Argument %d not passed to function", requested_offset);
- RETURN_FALSE;
- }
-
- arg = *(p-(arg_count-requested_offset));
- *return_value = *arg;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto array func_get_args()
- Get an array of the arguments that were passed to the function */
-ZEND_FUNCTION(func_get_args)
-{
- void **p;
- int arg_count;
- int i;
-
- p = EG(argument_stack).top_element-1-1;
- arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_args(); */
- p -= 1+arg_count;
- if (*p) {
- zend_error(E_ERROR, "func_get_args(): Can't be used as a function parameter");
- }
- --p;
-
- if (p<EG(argument_stack).elements) {
- zend_error(E_WARNING, "func_get_args(): Called from the global scope - no function context");
- RETURN_FALSE;
- }
- arg_count = (ulong) *p;
-
-
- array_init(return_value);
- for (i=0; i<arg_count; i++) {
- zval *element;
-
- ALLOC_ZVAL(element);
- *element = **((zval **) (p-(arg_count-i)));
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- zend_hash_next_index_insert(return_value->value.ht, &element, sizeof(zval *), NULL);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int strlen(string str)
- Get string length */
-ZEND_NAMED_FUNCTION(zend_if_strlen)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(str);
- RETVAL_LONG((*str)->value.str.len);
-}
-/* }}} */
-
-
-/* {{{ proto int strcmp(string str1, string str2)
- Binary safe string comparison */
-ZEND_FUNCTION(strcmp)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
- RETURN_LONG(zend_binary_zval_strcmp(*s1, *s2));
-}
-/* }}} */
-
-
-/* {{{ proto int strncmp(string str1, string str2, int len)
- Binary safe string comparison */
-ZEND_FUNCTION(strncmp)
-{
- zval **s1, **s2, **s3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
- convert_to_long_ex(s3);
- RETURN_LONG(zend_binary_zval_strncmp(*s1, *s2, *s3));
-}
-/* }}} */
-
-
-/* {{{ proto int strcasecmp(string str1, string str2)
- Binary safe case-insensitive string comparison */
-ZEND_FUNCTION(strcasecmp)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
- RETURN_LONG(zend_binary_zval_strcasecmp(*s1, *s2));
-}
-/* }}} */
-
-
-/* {{{ proto int strncasecmp(string str1, string str2, int len)
- Binary safe string comparison */
-ZEND_FUNCTION(strncasecmp)
-{
- zval **s1, **s2, **s3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
- convert_to_long_ex(s3);
- RETURN_LONG(zend_binary_zval_strncasecmp(*s1, *s2, *s3));
-}
-/* }}} */
-
-
-/* {{{ proto array each(array arr)
- Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element */
-ZEND_FUNCTION(each)
-{
- zval **array, *entry, **entry_ptr, *tmp;
- char *string_key;
- ulong num_key;
- zval **inserted_pointer;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- zend_error(E_WARNING,"Variable passed to each() is not an array or object");
- return;
- }
- if (zend_hash_get_current_data(target_hash, (void **) &entry_ptr)==FAILURE) {
- RETURN_FALSE;
- }
- array_init(return_value);
- entry = *entry_ptr;
-
- /* add value elements */
- if (entry->is_ref) {
- ALLOC_ZVAL(tmp);
- *tmp = *entry;
- zval_copy_ctor(tmp);
- tmp->is_ref=0;
- tmp->refcount=0;
- entry=tmp;
- }
- zend_hash_index_update(return_value->value.ht, 1, &entry, sizeof(zval *), NULL);
- entry->refcount++;
- zend_hash_update(return_value->value.ht, "value", sizeof("value"), &entry, sizeof(zval *), NULL);
- entry->refcount++;
-
- /* add the key elements */
- switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 1)) {
- case HASH_KEY_IS_STRING:
- add_get_index_string(return_value, 0, string_key, (void **) &inserted_pointer, 0);
- break;
- case HASH_KEY_IS_LONG:
- add_get_index_long(return_value, 0, num_key, (void **) &inserted_pointer);
- break;
- }
- zend_hash_update(return_value->value.ht, "key", sizeof("key"), inserted_pointer, sizeof(zval *), NULL);
- (*inserted_pointer)->refcount++;
- zend_hash_move_forward(target_hash);
-}
-/* }}} */
-
-
-/* {{{ proto int error_reporting(int new_error_level=null)
- Return the current error_reporting level, and if an argument was passed - change to the new level */
-ZEND_FUNCTION(error_reporting)
-{
- zval **arg;
- int old_error_reporting;
-
- old_error_reporting = EG(error_reporting);
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg);
- EG(error_reporting)=(*arg)->value.lval;
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- RETVAL_LONG(old_error_reporting);
-}
-/* }}} */
-
-
-/* {{{ proto bool define(string constant_name, mixed value, case_sensitive=true)
- Define a new constant */
-ZEND_FUNCTION(define)
-{
- zval **var, **val, **non_cs;
- int case_sensitive;
- zend_constant c;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &var, &val)==FAILURE) {
- RETURN_FALSE;
- }
- case_sensitive = CONST_CS;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &var, &val, &non_cs)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(non_cs);
- if ((*non_cs)->value.lval) {
- case_sensitive = 0;
- } else {
- case_sensitive = CONST_CS;
- }
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- switch((*val)->type) {
- case IS_LONG:
- case IS_DOUBLE:
- case IS_STRING:
- case IS_BOOL:
- case IS_RESOURCE:
- case IS_NULL:
- break;
- default:
- zend_error(E_WARNING,"Constants may only evaluate to scalar values");
- RETURN_FALSE;
- break;
- }
- convert_to_string_ex(var);
-
- c.value = **val;
- zval_copy_ctor(&c.value);
- c.flags = case_sensitive; /* non persistent */
- c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len);
- c.name_len = (*var)->value.str.len+1;
- if (zend_register_constant(&c TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool define(string constant_name)
- Check whether a constant exists */
-ZEND_FUNCTION(defined)
-{
- zval **var;
- zval c;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &var)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(var);
- if (zend_get_constant((*var)->value.str.val, (*var)->value.str.len, &c TSRMLS_CC)) {
- zval_dtor(&c);
- RETURN_LONG(1);
- } else {
- RETURN_LONG(0);
- }
-}
-/* }}} */
-
-
-/* {{{ proto string get_class(object object)
- Retrieves the class name */
-ZEND_FUNCTION(get_class)
-{
- zval **arg;
- zend_class_entry *ce;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- if (Z_TYPE_PP(arg) != IS_OBJECT) {
- RETURN_FALSE;
- }
-
- ce = Z_OBJCE_PP(arg);
- RETURN_STRINGL(ce->name, ce->name_length, 1);
-}
-/* }}} */
-
-
-/* {{{ proto string get_parent_class(mixed object)
- Retrieves the parent class name for object or class. */
-ZEND_FUNCTION(get_parent_class)
-{
- zval **arg;
- zend_class_entry *ce = NULL;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (Z_TYPE_PP(arg) == IS_OBJECT)
- ce = Z_OBJCE_PP(arg);
- else if (Z_TYPE_PP(arg) == IS_STRING) {
- SEPARATE_ZVAL(arg);
- zend_str_tolower(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg));
- zend_hash_find(EG(class_table), Z_STRVAL_PP(arg), Z_STRLEN_PP(arg)+1, (void **)&ce);
- }
-
- if (ce && ce->parent) {
- RETURN_STRINGL(ce->parent->name, ce->parent->name_length, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool is_subclass_of(object object, string class_name)
- Returns true if the object has this class as one of its parents */
-ZEND_FUNCTION(is_subclass_of)
-{
- zval **obj, **class_name;
- char *lcname;
- zend_class_entry *parent_ce = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &obj, &class_name)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if ((*obj)->type != IS_OBJECT) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(class_name);
- lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
- zend_str_tolower(lcname, (*class_name)->value.str.len);
-
- for (parent_ce = Z_OBJCE_PP(obj)->parent; parent_ce != NULL; parent_ce = parent_ce->parent) {
- if (!strcmp(parent_ce->name, lcname)) {
- efree(lcname);
- RETURN_TRUE;
- }
- }
- efree(lcname);
- RETURN_FALSE;
-}
-/* }}} */
-
-
-/* {{{ proto array get_class_vars(string class_name)
- Returns an array of default properties of the class */
-ZEND_FUNCTION(get_class_vars)
-{
- zval **class_name;
- char *lcname;
- zend_class_entry *ce;
- zval *tmp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(class_name);
- lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
- zend_str_tolower(lcname, (*class_name)->value.str.len);
-
- if (zend_hash_find(EG(class_table), lcname, (*class_name)->value.str.len+1, (void **)&ce)==FAILURE) {
- efree(lcname);
- RETURN_FALSE;
- } else {
- efree(lcname);
- array_init(return_value);
- if (!ce->constants_updated) {
- zend_hash_apply_with_argument(&ce->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
- ce->constants_updated = 1;
- }
- zend_hash_copy(return_value->value.ht, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- }
-}
-/* }}} */
-
-
-/* {{{ proto array get_object_vars(object obj)
- Returns an array of object properties */
-ZEND_FUNCTION(get_object_vars)
-{
- zval **obj;
- zval *tmp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &obj) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if ((*obj)->type != IS_OBJECT) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- zend_hash_copy(return_value->value.ht, Z_OBJPROP_PP(obj),
- (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-}
-/* }}} */
-
-
-/* {{{ proto array get_class_methods(mixed class)
- Returns an array of method names for class or class instance. */
-ZEND_FUNCTION(get_class_methods)
-{
- zval **class;
- zval *method_name;
- zend_class_entry *ce = NULL;
- char *string_key;
- ulong num_key;
- int key_type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (Z_TYPE_PP(class) == IS_OBJECT)
- ce = Z_OBJCE_PP(class);
- else if (Z_TYPE_PP(class) == IS_STRING) {
- SEPARATE_ZVAL(class);
- zend_str_tolower(Z_STRVAL_PP(class), Z_STRLEN_PP(class));
- zend_hash_find(EG(class_table), Z_STRVAL_PP(class), Z_STRLEN_PP(class)+1, (void **)&ce);
- }
-
- if (!ce) {
- RETURN_NULL();
- }
-
- array_init(return_value);
- zend_hash_internal_pointer_reset(&ce->function_table);
- while ((key_type = zend_hash_get_current_key(&ce->function_table, &string_key, &num_key, 1)) != HASH_KEY_NON_EXISTANT) {
- if (key_type == HASH_KEY_IS_STRING) {
- MAKE_STD_ZVAL(method_name);
- ZVAL_STRING(method_name, string_key, 0);
- zend_hash_next_index_insert(return_value->value.ht, &method_name, sizeof(zval *), NULL);
- }
- zend_hash_move_forward(&ce->function_table);
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool method_exists(object object, string method)
- Checks if the class method exists */
-ZEND_FUNCTION(method_exists)
-{
- zval **klass, **method_name;
- char *lcname;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &klass, &method_name)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- if ((*klass)->type != IS_OBJECT) {
- RETURN_FALSE;
- }
- convert_to_string_ex(method_name);
- lcname = estrndup((*method_name)->value.str.val, (*method_name)->value.str.len);
- zend_str_tolower(lcname, (*method_name)->value.str.len);
- if (zend_hash_exists(&Z_OBJCE_PP(klass)->function_table, lcname, (*method_name)->value.str.len+1)) {
- efree(lcname);
- RETURN_TRUE;
- } else {
- efree(lcname);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool class_exists(string classname)
- Checks if the class exists */
-ZEND_FUNCTION(class_exists)
-{
- zval **class_name;
- char *lcname;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(class_name);
- lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
- zend_str_tolower(lcname, (*class_name)->value.str.len);
- if (zend_hash_exists(EG(class_table), lcname, (*class_name)->value.str.len+1)) {
- efree(lcname);
- RETURN_TRUE;
- } else {
- efree(lcname);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool function_exists(string function_name)
- Checks if the function exists */
-ZEND_FUNCTION(function_exists)
-{
- zval **function_name;
- char *lcname;
- int retval;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &function_name)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(function_name);
- lcname = estrndup((*function_name)->value.str.val, (*function_name)->value.str.len);
- zend_str_tolower(lcname, (*function_name)->value.str.len);
-
- retval = zend_hash_exists(EG(function_table), lcname, (*function_name)->value.str.len+1);
- efree(lcname);
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-
-/* {{{ proto void leak(int num_bytes=3)
- Cause an intentional memory leak, for testing/debugging purposes */
-ZEND_FUNCTION(leak)
-{
- int leakbytes=3;
- zval **leak;
-
- if (ZEND_NUM_ARGS()>=1) {
- if (zend_get_parameters_ex(1, &leak)==SUCCESS) {
- convert_to_long_ex(leak);
- leakbytes = (*leak)->value.lval;
- }
- }
-
- emalloc(leakbytes);
-}
-/* }}} */
-
-
-#ifdef ZEND_TEST_EXCEPTIONS
-ZEND_FUNCTION(crash)
-{
- char *nowhere=NULL;
-
- memcpy(nowhere, "something", sizeof("something"));
-}
-#endif
-
-
-/* {{{ proto array get_included_files(void)
- Returns an array with the file names that were include_once()'d */
-ZEND_FUNCTION(get_included_files)
-{
- char *entry;
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- array_init(return_value);
- zend_hash_internal_pointer_reset(&EG(included_files));
- while (zend_hash_get_current_key(&EG(included_files), &entry, NULL, 1) == HASH_KEY_IS_STRING) {
- add_next_index_string(return_value, entry, 0);
- zend_hash_move_forward(&EG(included_files));
- }
-}
-/* }}} */
-
-
-/* {{{ proto void trigger_error(string messsage [, int error_type])
- Generates a user-level error/warning/notice message */
-ZEND_FUNCTION(trigger_error)
-{
- int error_type = E_USER_NOTICE;
- zval **z_error_type, **z_error_message;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &z_error_message)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &z_error_message, &z_error_type)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_long_ex(z_error_type);
- error_type = (*z_error_type)->value.lval;
- switch (error_type) {
- case E_USER_ERROR:
- case E_USER_WARNING:
- case E_USER_NOTICE:
- break;
- default:
- zend_error(E_WARNING, "Invalid error type specified");
- RETURN_FALSE;
- break;
- }
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(z_error_message);
- zend_error(error_type, "%s", (*z_error_message)->value.str.val);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto string set_error_handler(string error_handler)
- Sets a user-defined error handler function. Returns the previously defined error handler, or false on error */
-ZEND_FUNCTION(set_error_handler)
-{
- zval **error_handler;
- zend_bool had_orig_error_handler=0;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &error_handler)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(error_handler);
- if (EG(user_error_handler)) {
- had_orig_error_handler = 1;
- *return_value = *EG(user_error_handler);
- zval_copy_ctor(return_value);
- zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler));
- }
- ALLOC_ZVAL(EG(user_error_handler));
-
- if (Z_STRLEN_PP(error_handler)==0) { /* unset user-defined handler */
- FREE_ZVAL(EG(user_error_handler));
- EG(user_error_handler) = NULL;
- RETURN_TRUE;
- }
-
- *EG(user_error_handler) = **error_handler;
- zval_copy_ctor(EG(user_error_handler));
-
- if (!had_orig_error_handler) {
- RETURN_NULL();
- }
-}
-/* }}} */
-
-
-/* {{{ proto void restore_error_handler(void)
- Restores the previously defined error handler function */
-ZEND_FUNCTION(restore_error_handler)
-{
- if (EG(user_error_handler)) {
- zval_ptr_dtor(&EG(user_error_handler));
- }
- if (zend_ptr_stack_num_elements(&EG(user_error_handlers))==0) {
- EG(user_error_handler) = NULL;
- } else {
- EG(user_error_handler) = zend_ptr_stack_pop(&EG(user_error_handlers));
- }
- RETURN_TRUE;
-}
-
-
-static int copy_class_name(zend_class_entry *ce, int num_args, va_list args, zend_hash_key *hash_key)
-{
- zval *array = va_arg(args, zval *);
-
- if (hash_key->nKeyLength==0 || hash_key->arKey[0]!=0) {
- add_next_index_stringl(array, ce->name, ce->name_length, 1);
- }
- return 0;
-}
-
-
-/* {{{ proto array get_declared_classes(void)
- Returns an array of all declared classes. */
-ZEND_FUNCTION(get_declared_classes)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- array_init(return_value);
- zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) copy_class_name, 1, return_value);
-}
-/* }}} */
-
-
-static int copy_function_name(zend_function *func, int num_args, va_list args, zend_hash_key *hash_key)
-{
- zval *internal_ar = va_arg(args, zval *),
- *user_ar = va_arg(args, zval *);
-
- if (hash_key->nKeyLength == 0 || hash_key->arKey[0] == 0) {
- return 0;
- }
-
- if (func->type == ZEND_INTERNAL_FUNCTION) {
- add_next_index_stringl(internal_ar, hash_key->arKey, hash_key->nKeyLength-1, 1);
- } else if (func->type == ZEND_USER_FUNCTION) {
- add_next_index_stringl(user_ar, hash_key->arKey, hash_key->nKeyLength-1, 1);
- }
-
- return 0;
-}
-
-
-/* {{{ proto array get_defined_functions(void)
- Returns an array of all defined functions */
-ZEND_FUNCTION(get_defined_functions)
-{
- zval *internal;
- zval *user;
-
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- MAKE_STD_ZVAL(internal);
- MAKE_STD_ZVAL(user);
-
- array_init(internal);
- array_init(user);
- array_init(return_value);
-
- zend_hash_apply_with_arguments(EG(function_table), (apply_func_args_t) copy_function_name, 2, internal, user);
-
- if (zend_hash_add(return_value->value.ht, "internal", sizeof("internal"), (void **)&internal, sizeof(zval *), NULL) == FAILURE) {
- zend_error(E_WARNING, "Cannot add internal functions to return value from get_defined_functions()");
- RETURN_FALSE;
- }
-
- if (zend_hash_add(return_value->value.ht, "user", sizeof("user"), (void **)&user, sizeof(zval *), NULL) == FAILURE) {
- zend_error(E_WARNING, "Cannot add user functions to return value from get_defined_functions()");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto array get_defined_vars(void)
- Returns an associative array of names and values of all currently defined variable names (variables in the current scope) */
-ZEND_FUNCTION(get_defined_vars)
-{
- zval *tmp;
-
- array_init(return_value);
-
- zend_hash_copy(return_value->value.ht, EG(active_symbol_table),
- (copy_ctor_func_t)zval_add_ref, &tmp, sizeof(zval *));
-}
-/* }}} */
-
-
-#define LAMBDA_TEMP_FUNCNAME "__lambda_func"
-/* {{{ proto string create_function(string args, string code)
- Creates an anonymous function, and returns its name (funny, eh?) */
-ZEND_FUNCTION(create_function)
-{
- char *eval_code, *function_name;
- int eval_code_length, function_name_length;
- zval **z_function_args, **z_function_code;
- int retval;
- char *eval_name;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &z_function_args, &z_function_code)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(z_function_args);
- convert_to_string_ex(z_function_code);
-
- eval_code_length = sizeof("function " LAMBDA_TEMP_FUNCNAME)
- +Z_STRLEN_PP(z_function_args)
- +2 /* for the args parentheses */
- +2 /* for the curly braces */
- +Z_STRLEN_PP(z_function_code);
-
- eval_code = (char *) emalloc(eval_code_length);
- sprintf(eval_code, "function " LAMBDA_TEMP_FUNCNAME "(%s){%s}", Z_STRVAL_PP(z_function_args), Z_STRVAL_PP(z_function_code));
-
- eval_name = zend_make_compiled_string_description("runtime-created function" TSRMLS_CC);
- retval = zend_eval_string(eval_code, NULL, eval_name TSRMLS_CC);
- efree(eval_code);
- efree(eval_name);
-
- if (retval==SUCCESS) {
- zend_function *func;
-
- if (zend_hash_find(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME), (void **) &func)==FAILURE) {
- zend_error(E_ERROR, "Unexpected inconsistency in create_function()");
- RETURN_FALSE;
- }
- function_add_ref(func);
-
- function_name = (char *) emalloc(sizeof("0lambda_")+MAX_LENGTH_OF_LONG);
-
- do {
- sprintf(function_name, "%clambda_%d", 0, ++EG(lambda_count));
- function_name_length = strlen(function_name+1)+1;
- } while (zend_hash_add(EG(function_table), function_name, function_name_length+1, func, sizeof(zend_function), NULL)==FAILURE);
- zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
- RETURN_STRINGL(function_name, function_name_length, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-#if ZEND_DEBUG
-ZEND_FUNCTION(zend_test_func)
-{
- zval *arg1, *arg2;
-
- zend_get_parameters(ht, 2, &arg1, &arg2);
-}
-#endif
-
-
-ZEND_FUNCTION(get_resource_type)
-{
- char *resource_type;
- zval **z_resource_type;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &z_resource_type)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (Z_TYPE_PP(z_resource_type) != IS_RESOURCE) {
- zend_error(E_WARNING, "Supplied argument is not a valid resource handle");
- RETURN_FALSE;
- }
-
- resource_type = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(z_resource_type) TSRMLS_CC);
- if (resource_type) {
- RETURN_STRING(resource_type, 1);
- } else {
- RETURN_STRING("Unknown", 1);
- }
-}
-
-
-static int add_extension_info(zend_module_entry *module, void *arg TSRMLS_DC)
-{
- zval *name_array = (zval *)arg;
- add_next_index_string(name_array, module->name, 1);
- return 0;
-}
-
-static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC)
-{
- zval *name_array = (zval *)arg;
- zval *const_val;
-
- MAKE_STD_ZVAL(const_val);
- *const_val = constant->value;
- zval_copy_ctor(const_val);
- INIT_PZVAL(const_val);
- add_assoc_zval_ex(name_array, constant->name, constant->name_len, const_val);
- return 0;
-}
-
-
-/* {{{ proto array get_loaded_extensions(void)
- Return an array containing names of loaded extensions */
-ZEND_FUNCTION(get_loaded_extensions)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
- zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) add_extension_info, return_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto array get_defined_constants(void)
- Return an array containing the names and values of all defined constants */
-ZEND_FUNCTION(get_defined_constants)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
- zend_hash_apply_with_argument(EG(zend_constants), (apply_func_arg_t) add_constant_info, return_value TSRMLS_CC);
-}
-
-
-/* {{{ proto bool extension_loaded(string extension_name)
- Returns true if the named extension is loaded */
-ZEND_FUNCTION(extension_loaded)
-{
- zval **extension_name;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &extension_name)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(extension_name);
- if (zend_hash_exists(&module_registry, Z_STRVAL_PP(extension_name), Z_STRLEN_PP(extension_name)+1)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto array get_extension_funcs(string extension_name)
- Returns an array with the names of functions belonging to the named extension */
-ZEND_FUNCTION(get_extension_funcs)
-{
- zval **extension_name;
- zend_module_entry *module;
- zend_function_entry *func;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &extension_name)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(extension_name);
- if (zend_hash_find(&module_registry, Z_STRVAL_PP(extension_name),
- Z_STRLEN_PP(extension_name)+1, (void**)&module) == FAILURE) {
- return;
- }
-
- array_init(return_value);
- func = module->functions;
- if (!func) {
- return;
- }
-
- while (func->fname) {
- add_next_index_string(return_value, func->fname, 1);
- func++;
- }
-}
-/* }}} */
diff --git a/Zend/zend_builtin_functions.h b/Zend/zend_builtin_functions.h
deleted file mode 100644
index 3b0fe8dc7c..0000000000
--- a/Zend/zend_builtin_functions.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_BUILTIN_FUNCTIONS_H
-#define ZEND_BUILTIN_FUNCTIONS_H
-
-int zend_startup_builtin_functions(TSRMLS_D);
-
-#endif /* ZEND_BUILTIN_FUNCTIONS_H */
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
deleted file mode 100644
index 587b4903ff..0000000000
--- a/Zend/zend_compile.c
+++ /dev/null
@@ -1,2653 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend_language_parser.h"
-#include "zend.h"
-#include "zend_compile.h"
-#include "zend_llist.h"
-#include "zend_API.h"
-#include "zend_fast_cache.h"
-
-
-ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
-
-
-#ifndef ZTS
-ZEND_API zend_compiler_globals compiler_globals;
-ZEND_API zend_executor_globals executor_globals;
-#endif
-
-
-static void build_runtime_defined_function_key(zval *result, zval *name, zend_op *opline TSRMLS_DC)
-{
- char lineno_buf[32];
- uint lineno_len;
- char *filename;
-
- lineno_len = zend_sprintf(lineno_buf, "%d", opline->lineno);
- if (CG(active_op_array)->filename) {
- filename = CG(active_op_array)->filename;
- } else {
- filename = "-";
- }
-
- /* NULL, name length, filename length, line number length */
- result->value.str.len = 1+name->value.str.len+strlen(filename)+lineno_len;
- result->value.str.val = (char *) emalloc(result->value.str.len+1);
- sprintf(result->value.str.val, "%c%s%s%s", '\0', name->value.str.val, filename, lineno_buf);
- result->type = IS_STRING;
- result->refcount = 1;
-}
-
-
-static void init_compiler_declarables(TSRMLS_D)
-{
- CG(declarables).ticks.type = IS_LONG;
- CG(declarables).ticks.value.lval = 0;
-}
-
-
-
-void zend_init_compiler_data_structures(TSRMLS_D)
-{
- zend_stack_init(&CG(bp_stack));
- zend_stack_init(&CG(function_call_stack));
- zend_stack_init(&CG(switch_cond_stack));
- zend_stack_init(&CG(foreach_copy_stack));
- zend_stack_init(&CG(object_stack));
- zend_stack_init(&CG(declare_stack));
- CG(active_class_entry) = NULL;
- CG(active_ce_parent_class_name).value.str.val = NULL;
- zend_llist_init(&CG(list_llist), sizeof(list_llist_element), NULL, 0);
- zend_llist_init(&CG(dimension_llist), sizeof(int), NULL, 0);
- zend_stack_init(&CG(list_stack));
- CG(handle_op_arrays) = 1;
- CG(in_compilation) = 0;
- init_compiler_declarables(TSRMLS_C);
- CG(throw_list) = NULL;
-}
-
-
-void init_compiler(TSRMLS_D)
-{
- zend_init_compiler_data_structures(TSRMLS_C);
- zend_init_rsrc_list(TSRMLS_C);
- zend_hash_init(&CG(filenames_table), 5, NULL, (dtor_func_t) free_estring, 0);
- zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_file_handle_dtor, 0);
- CG(unclean_shutdown) = 0;
-}
-
-
-void shutdown_compiler(TSRMLS_D)
-{
- zend_stack_destroy(&CG(bp_stack));
- zend_stack_destroy(&CG(function_call_stack));
- zend_stack_destroy(&CG(switch_cond_stack));
- zend_stack_destroy(&CG(foreach_copy_stack));
- zend_stack_destroy(&CG(object_stack));
- zend_stack_destroy(&CG(declare_stack));
- zend_stack_destroy(&CG(list_stack));
- zend_hash_destroy(&CG(filenames_table));
- zend_llist_destroy(&CG(open_files));
-}
-
-
-ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename TSRMLS_DC)
-{
- char **pp, *p;
- int length = strlen(new_compiled_filename);
-
- if (zend_hash_find(&CG(filenames_table), new_compiled_filename, length+1, (void **) &pp)==SUCCESS) {
- CG(compiled_filename) = *pp;
- return *pp;
- }
- p = estrndup(new_compiled_filename, length);
- zend_hash_update(&CG(filenames_table), new_compiled_filename, length+1, &p, sizeof(char *), (void **) &pp);
- CG(compiled_filename) = p;
- return p;
-}
-
-
-ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename TSRMLS_DC)
-{
- CG(compiled_filename) = original_compiled_filename;
-}
-
-
-ZEND_API char *zend_get_compiled_filename(TSRMLS_D)
-{
- return CG(compiled_filename);
-}
-
-
-ZEND_API int zend_get_compiled_lineno(TSRMLS_D)
-{
- return CG(zend_lineno);
-}
-
-
-ZEND_API zend_bool zend_is_compiling(TSRMLS_D)
-{
- return CG(in_compilation);
-}
-
-
-static zend_uint get_temporary_variable(zend_op_array *op_array)
-{
- return (op_array->T)++;
-}
-
-
-void zend_do_binary_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- opline->op2 = *op2;
- *result = opline->result;
-}
-
-
-void zend_do_unary_op(int op, znode *result, znode *op1 TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- *result = opline->result;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_binary_assign_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- opline->op2 = *op2;
- *result = opline->result;
-}
-
-
-
-void zend_do_fetch_globals(znode *varname TSRMLS_DC)
-{
- if (!CG(active_op_array)->uses_globals
- && varname->op_type == IS_CONST
- && varname->u.constant.type == IS_STRING
- && varname->u.constant.value.str.len == (sizeof("GLOBALS")-1)
- && !memcmp(varname->u.constant.value.str.val, "GLOBALS", sizeof("GLOBALS")-1)) {
- CG(active_op_array)->uses_globals = 1;
- }
-}
-
-void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op TSRMLS_DC)
-{
- zend_op opline;
- zend_op *opline_ptr;
- zend_llist *fetch_list_ptr;
-
- if (bp) {
- opline_ptr = &opline;
- init_op(opline_ptr TSRMLS_CC);
- } else {
- opline_ptr = get_next_op(CG(active_op_array) TSRMLS_CC);
- }
-
- opline_ptr->opcode = op;
- opline_ptr->result.op_type = IS_VAR;
- opline_ptr->result.u.EA.type = 0;
- opline_ptr->result.u.var = get_temporary_variable(CG(active_op_array));
- opline_ptr->op1 = *varname;
- *result = opline_ptr->result;
- SET_UNUSED(opline_ptr->op2);
-
- if (varname->op_type == IS_CONST
- && varname->u.constant.type == IS_STRING
- && zend_hash_exists(CG(auto_globals), varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
- opline_ptr->extended_value = ZEND_FETCH_GLOBAL;
- } else {
- opline_ptr->extended_value = ZEND_FETCH_LOCAL;
- }
-
- if (bp) {
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
- zend_llist_add_element(fetch_list_ptr, opline_ptr);
- }
-}
-
-void fetch_simple_variable(znode *result, znode *varname, int bp TSRMLS_DC)
-{
- /* the default mode must be Write, since fetch_simple_variable() is used to define function arguments */
- fetch_simple_variable_ex(result, varname, bp, ZEND_FETCH_W TSRMLS_CC);
-}
-
-void zend_do_fetch_static_member(znode *class TSRMLS_DC)
-{
- zend_llist *fetch_list_ptr;
- zend_llist_element *le;
- zend_op *opline_ptr;
-
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
- le = fetch_list_ptr->head;
-
- opline_ptr = (zend_op *)le->data;
- opline_ptr->op2 = *class;
- opline_ptr->extended_value = ZEND_FETCH_STATIC_MEMBER;
-}
-
-void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC)
-{
- fetch_simple_variable(result, varname, 1 TSRMLS_CC);
-
- fetch_array_dim(result, result, first_dim TSRMLS_CC);
-}
-
-
-void fetch_array_dim(znode *result, znode *parent, znode *dim TSRMLS_DC)
-{
- zend_op opline;
- zend_llist *fetch_list_ptr;
-
- init_op(&opline TSRMLS_CC);
- opline.opcode = ZEND_FETCH_DIM_W; /* the backpatching routine assumes W */
- opline.result.op_type = IS_VAR;
- opline.result.u.EA.type = 0;
- opline.result.u.var = get_temporary_variable(CG(active_op_array));
- opline.op1 = *parent;
- opline.op2 = *dim;
- opline.extended_value = ZEND_FETCH_STANDARD;
- *result = opline.result;
-
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
- zend_llist_add_element(fetch_list_ptr, &opline);
-}
-
-
-void fetch_string_offset(znode *result, znode *parent, znode *offset TSRMLS_DC)
-{
- fetch_array_dim(result, parent, offset TSRMLS_CC);
-}
-
-
-void zend_do_print(znode *result, znode *arg TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->opcode = ZEND_PRINT;
- opline->op1 = *arg;
- SET_UNUSED(opline->op2);
- *result = opline->result;
-}
-
-
-void zend_do_echo(znode *arg TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ECHO;
- opline->op1 = *arg;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ASSIGN;
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *variable;
- opline->op2 = *value;
- *result = opline->result;
-}
-
-
-void zend_do_assign_ref(znode *result, znode *lvar, znode *rvar TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ASSIGN_REF;
- if (result) {
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- *result = opline->result;
- } else {
- /* SET_UNUSED(opline->result); */
- opline->result.u.EA.type |= EXT_TYPE_UNUSED;
- }
- opline->op1 = *lvar;
- opline->op2 = *rvar;
-}
-
-
-static inline void do_begin_loop(TSRMLS_D)
-{
- zend_brk_cont_element *brk_cont_element;
- int parent;
-
- parent = CG(active_op_array)->current_brk_cont;
- CG(active_op_array)->current_brk_cont = CG(active_op_array)->last_brk_cont;
- brk_cont_element = get_next_brk_cont_element(CG(active_op_array));
- brk_cont_element->parent = parent;
-}
-
-
-static inline void do_end_loop(int cont_addr TSRMLS_DC)
-{
- CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].cont = cont_addr;
- CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].brk = get_next_op_number(CG(active_op_array));
- CG(active_op_array)->current_brk_cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].parent;
-}
-
-
-void zend_do_while_cond(znode *expr, znode *close_bracket_token TSRMLS_DC)
-{
- int while_cond_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPZ;
- opline->op1 = *expr;
- close_bracket_token->u.opline_num = while_cond_op_number;
- SET_UNUSED(opline->op2);
-
- do_begin_loop(TSRMLS_C);
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_while_end(znode *while_token, znode *close_bracket_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- /* add unconditional jump */
- opline->opcode = ZEND_JMP;
- opline->op1.u.opline_num = while_token->u.opline_num;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- /* update while's conditional jmp */
- CG(active_op_array)->opcodes[close_bracket_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
-
- do_end_loop(while_token->u.opline_num TSRMLS_CC);
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_for_cond(znode *expr, znode *second_semicolon_token TSRMLS_DC)
-{
- int for_cond_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPZNZ;
- opline->op1 = *expr; /* the conditional expression */
- second_semicolon_token->u.opline_num = for_cond_op_number;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_for_before_statement(znode *cond_start, znode *second_semicolon_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMP;
- opline->op1.u.opline_num = cond_start->u.opline_num;
- CG(active_op_array)->opcodes[second_semicolon_token->u.opline_num].extended_value = get_next_op_number(CG(active_op_array));
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- do_begin_loop(TSRMLS_C);
-
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_for_end(znode *second_semicolon_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMP;
- opline->op1.u.opline_num = second_semicolon_token->u.opline_num+1;
- CG(active_op_array)->opcodes[second_semicolon_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- do_end_loop(second_semicolon_token->u.opline_num+1 TSRMLS_CC);
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_pre_incdec(znode *result, znode *op1, int op TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- *result = opline->result;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_post_incdec(znode *result, znode *op1, int op TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- *result = opline->result;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_if_cond(znode *cond, znode *closing_bracket_token TSRMLS_DC)
-{
- int if_cond_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPZ;
- opline->op1 = *cond;
- closing_bracket_token->u.opline_num = if_cond_op_number;
- SET_UNUSED(opline->op2);
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_if_after_statement(znode *closing_bracket_token, unsigned char initialize TSRMLS_DC)
-{
- int if_end_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- zend_llist *jmp_list_ptr;
-
- opline->opcode = ZEND_JMP;
- /* save for backpatching */
- if (initialize) {
- zend_llist jmp_list;
-
- zend_llist_init(&jmp_list, sizeof(int), NULL, 0);
- zend_stack_push(&CG(bp_stack), (void *) &jmp_list, sizeof(zend_llist));
- }
- zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr);
- zend_llist_add_element(jmp_list_ptr, &if_end_op_number);
-
- CG(active_op_array)->opcodes[closing_bracket_token->u.opline_num].op2.u.opline_num = if_end_op_number+1;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_if_end(TSRMLS_D)
-{
- int next_op_number = get_next_op_number(CG(active_op_array));
- zend_llist *jmp_list_ptr;
- zend_llist_element *le;
-
- zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr);
- for (le=jmp_list_ptr->head; le; le = le->next) {
- CG(active_op_array)->opcodes[*((int *) le->data)].op1.u.opline_num = next_op_number;
- }
- zend_llist_destroy(jmp_list_ptr);
- zend_stack_del_top(&CG(bp_stack));
- DEC_BPC(CG(active_op_array));
-}
-
-
-zend_bool zend_variable_buffer_empty(TSRMLS_D)
-{
- zend_llist *fetch_list_ptr;
-
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
- return !fetch_list_ptr->head;
-}
-
-
-void zend_do_begin_variable_parse(TSRMLS_D)
-{
- zend_llist fetch_list;
-
- zend_llist_init(&fetch_list, sizeof(zend_op), NULL, 0);
- zend_stack_push(&CG(bp_stack), (void *) &fetch_list, sizeof(zend_llist));
-}
-
-
-void zend_do_end_variable_parse(int type, int arg_offset TSRMLS_DC)
-{
- zend_llist *fetch_list_ptr;
- zend_llist_element *le;
- zend_op *opline, *opline_ptr;
-
- /*
- if (zend_variable_buffer_empty(TSRMLS_C) && (type == BP_VAR_W || type == BP_VAR_RW)) {
- zend_error(E_ERROR, "Method can't be used as l-value");
- }
- */
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
-
- le = fetch_list_ptr->head;
-
- while (le) {
- opline_ptr = (zend_op *)le->data;
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- memcpy(opline, opline_ptr, sizeof(zend_op));
- switch (type) {
- case BP_VAR_R:
- if (opline->opcode == ZEND_FETCH_DIM_W && opline->op2.op_type == IS_UNUSED) {
- zend_error(E_COMPILE_ERROR, "Cannot use [] for reading");
- }
- opline->opcode -= 3;
- break;
- case BP_VAR_W:
- break;
- case BP_VAR_RW:
- opline->opcode += 3;
- break;
- case BP_VAR_IS:
- opline->opcode += 6; /* 3+3 */
- break;
- case BP_VAR_FUNC_ARG:
- opline->opcode += 9; /* 3+3+3 */
- opline->extended_value = arg_offset;
- break;
- case BP_VAR_UNSET:
- if (opline->opcode == ZEND_FETCH_DIM_W && opline->op2.op_type == IS_UNUSED) {
- zend_error(E_COMPILE_ERROR, "Cannot use [] for unsetting");
- }
- opline->opcode += 12; /* 3+3+3+3 */
- break;
- }
- le = le->next;
- }
- zend_llist_destroy(fetch_list_ptr);
- zend_stack_del_top(&CG(bp_stack));
-}
-
-
-void zend_do_init_string(znode *result TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_INIT_STRING;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- *result = opline->result;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_add_char(znode *result, znode *op1, znode *op2 TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ADD_CHAR;
- opline->op1 = *op1;
- opline->op2 = *op2;
- opline->op2.op_type = IS_CONST;
- opline->result = opline->op1;
- *result = opline->result;
-}
-
-
-void zend_do_add_string(znode *result, znode *op1, znode *op2 TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ADD_STRING;
- opline->op1 = *op1;
- opline->op2 = *op2;
- opline->op2.op_type = IS_CONST;
- opline->result = opline->op1;
- *result = opline->result;
-}
-
-
-void zend_do_add_variable(znode *result, znode *op1, znode *op2 TSRMLS_DC)
-{
- zend_op *opline;
-
- if (op1->op_type == IS_CONST) {
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_INIT_STRING;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- *result = opline->result;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- if (op1->u.constant.value.str.len>0) {
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_ADD_STRING;
- opline->result = *result;
- opline->op1 = *result;
- opline->op2 = *op1;
- opline->result = opline->op1;
- } else {
- zval_dtor(&op1->u.constant);
- }
- } else {
- *result = *op1;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_ADD_VAR;
- opline->result = *result;
- opline->op1 = *result;
- opline->op2 = *op2;
- *result = opline->result;
-}
-
-
-void zend_do_free(znode *op1 TSRMLS_DC)
-{
- if (op1->op_type==IS_TMP_VAR) {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_FREE;
- opline->op1 = *op1;
- SET_UNUSED(opline->op2);
- } else if (op1->op_type==IS_VAR) {
- zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
-
- while (opline->opcode == ZEND_END_SILENCE || opline->opcode == ZEND_EXT_FCALL_END) {
- opline--;
- }
- if (opline->result.op_type == op1->op_type
- && opline->result.u.var == op1->u.var) {
- opline->result.u.EA.type |= EXT_TYPE_UNUSED;
- } else {
- while (opline>CG(active_op_array)->opcodes) {
- /* This should be an object instantiation
- * Find JMP_NO_CTOR, mark the preceding ASSIGN and the
- * proceeding INIT_FCALL_BY_NAME as unused
- */
- if (opline->opcode == ZEND_JMP_NO_CTOR) {
- (opline-1)->result.u.EA.type |= EXT_TYPE_UNUSED;
- (opline+1)->op1.u.EA.type |= EXT_TYPE_UNUSED;
- break;
- } else if (opline->opcode == ZEND_FETCH_DIM_R
- && opline->op1.op_type == IS_VAR
- && opline->op1.u.var == op1->u.var) {
- /* This should the end of a list() construct
- * Mark its result as unused
- */
- opline->extended_value = ZEND_FETCH_STANDARD;
- break;
- } else if (opline->result.op_type==IS_VAR
- && opline->result.u.var == op1->u.var) {
- break;
- }
- opline--;
- }
- }
- } else if (op1->op_type == IS_CONST) {
- zval_dtor(&op1->u.constant);
- }
-}
-
-void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference TSRMLS_DC)
-{
- zend_op_array op_array;
- char *name = function_name->u.constant.value.str.val;
- int name_len = function_name->u.constant.value.str.len;
- int function_begin_line = function_token->u.opline_num;
-
- function_token->u.op_array = CG(active_op_array);
- zend_str_tolower(name, name_len);
-
- init_op_array(&op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
-
- op_array.function_name = name;
- op_array.arg_types = NULL;
- op_array.return_reference = return_reference;
-
- if (is_method) {
- zend_hash_update(&CG(active_class_entry)->function_table, name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
- if ((CG(active_class_entry)->name_length == (uint) name_len) && (!memcmp(CG(active_class_entry)->name, name, name_len))) {
- CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);
- }
- } else {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
- opline->op1.op_type = IS_CONST;
- build_runtime_defined_function_key(&opline->op1.u.constant, &function_name->u.constant, opline TSRMLS_CC);
- opline->op2.op_type = IS_CONST;
- opline->op2.u.constant.type = IS_STRING;
- opline->op2.u.constant.value.str.val = estrndup(name, name_len);
- opline->op2.u.constant.value.str.len = name_len;
- opline->op2.u.constant.refcount = 1;
- opline->extended_value = ZEND_DECLARE_FUNCTION;
- zend_hash_update(CG(function_table), opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
- }
-
- if (CG(extended_info)) {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_EXT_NOP;
- opline->lineno = function_begin_line;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
- }
-
- {
- /* Push a seperator to the switch and foreach stacks */
- zend_switch_entry switch_entry;
-
- switch_entry.cond.op_type = IS_UNUSED;
- switch_entry.default_case = 0;
- switch_entry.control_var = 0;
-
- zend_stack_push(&CG(switch_cond_stack), (void *) &switch_entry, sizeof(switch_entry));
-
- zend_stack_push(&CG(foreach_copy_stack), (void *) &switch_entry.cond, sizeof(znode));
- }
- function_token->throw_list = CG(throw_list);
- CG(throw_list) = NULL;
-}
-
-
-void zend_do_end_function_declaration(znode *function_token TSRMLS_DC)
-{
- zend_do_extended_info(TSRMLS_C);
- zend_do_return(NULL, 0 TSRMLS_CC);
- pass_two(CG(active_op_array) TSRMLS_CC);
- CG(active_op_array) = function_token->u.op_array;
-
- /* Pop the switch and foreach seperators */
- zend_stack_del_top(&CG(switch_cond_stack));
- zend_stack_del_top(&CG(foreach_copy_stack));
-
- CG(throw_list) = function_token->throw_list;
-}
-
-
-void zend_do_receive_arg(int op, znode *var, znode *offset, znode *initialization, unsigned char pass_type TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->result = *var;
- opline->op1 = *offset;
- if ((op == ZEND_RECV_INIT)) {
- opline->op2 = *initialization;
- } else {
- SET_UNUSED(opline->op2);
- }
- if (!CG(active_op_array)->arg_types) {
- if (pass_type==BYREF_FORCE) {
- int i;
-
- CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1));
- for (i=1; i<offset->u.constant.value.lval; i++) {
- CG(active_op_array)->arg_types[i] = BYREF_NONE;
- }
- CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
- CG(active_op_array)->arg_types[offset->u.constant.value.lval] = pass_type;
- }
- } else {
- CG(active_op_array)->arg_types = (unsigned char *) erealloc(CG(active_op_array)->arg_types, sizeof(unsigned char)*(offset->u.constant.value.lval+1));
- CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
- CG(active_op_array)->arg_types[offset->u.constant.value.lval] = pass_type;
- }
-}
-
-
-int zend_do_begin_function_call(znode *function_name TSRMLS_DC)
-{
- zend_function *function;
-
- zend_str_tolower(function_name->u.constant.value.str.val, function_name->u.constant.value.str.len);
- if (zend_hash_find(CG(function_table), function_name->u.constant.value.str.val, function_name->u.constant.value.str.len+1, (void **) &function)==FAILURE) {
- zend_do_begin_dynamic_function_call(function_name TSRMLS_CC);
- return 1; /* Dynamic */
- }
-
- switch (function->type) {
- case ZEND_USER_FUNCTION: {
- zend_op_array *op_array = (zend_op_array *) function;
-
- zend_stack_push(&CG(function_call_stack), (void *) &op_array, sizeof(zend_function *));
- }
- break;
- case ZEND_INTERNAL_FUNCTION: {
- zend_internal_function *internal_function = (zend_internal_function *) function;
-
- zend_stack_push(&CG(function_call_stack), (void *) &internal_function, sizeof(zend_function *));
- }
- break;
- }
- zend_do_extended_fcall_begin(TSRMLS_C);
- return 0;
-}
-
-
-
-void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC)
-{
- zend_op *last_op;
- int last_op_number;
- unsigned char *ptr = NULL;
-
- zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
- zend_do_begin_variable_parse(TSRMLS_C);
-
- last_op_number = get_next_op_number(CG(active_op_array))-1;
- last_op = &CG(active_op_array)->opcodes[last_op_number];
- last_op->opcode = ZEND_INIT_FCALL_BY_NAME;
- last_op->extended_value = ZEND_MEMBER_FUNC_CALL;
-
- /*opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_INIT_FCALL_BY_NAME;
- opline->extended_value = ZEND_MEMBER_FUNC_CALL;
- opline->op1 = *object;
- opline->op2 = *function_name;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_VAR;
-
-
- *function_name = opline->result;
-*/
-/*
- if (function_name->op_type == IS_CONST) {
- zval_copy_ctor(&function_name->u.constant);
- }
-*/
-
- zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
- zend_do_extended_fcall_begin(TSRMLS_C);
-}
-
-
-void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC)
-{
- unsigned char *ptr = NULL;
- zend_op *opline;
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_INIT_FCALL_BY_NAME;
- opline->op2 = *function_name;
- opline->extended_value = 0;
- SET_UNUSED(opline->op1);
-
- zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
- zend_do_extended_fcall_begin(TSRMLS_C);
-}
-
-
-void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_FETCH_CLASS;
- if (class_entry) {
- opline->op1 = *class_entry;
- } else {
- SET_UNUSED(opline->op1);
- }
- zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
- if ((class_name->u.constant.value.str.len == (sizeof("self") - 1)) &&
- !memcmp(class_name->u.constant.value.str.val, "self", sizeof("self"))) {
- SET_UNUSED(opline->op2);
- opline->extended_value = ZEND_FETCH_CLASS_SELF;
- zval_dtor(&class_name->u.constant);
- } else {
- opline->op2 = *class_name;
- }
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_CONST; /* FIXME: Hack so that INIT_FCALL_BY_NAME still knows this is a class */
- *result = opline->result;
-}
-
-
-void do_fetch_class_name(znode *result, znode *class_name_entry, znode *class_name TSRMLS_DC)
-{
- zend_uint length;
-
- if (!result) {
- result = class_name_entry;
- } else {
- *result = *class_name_entry;
- }
-
- length = 1 + result->u.constant.value.str.len + class_name->u.constant.value.str.len;
- result->u.constant.value.str.val = erealloc(result->u.constant.value.str.val, length+1);
- memcpy(&result->u.constant.value.str.val[result->u.constant.value.str.len], ":", sizeof(":")-1);
- memcpy(&result->u.constant.value.str.val[result->u.constant.value.str.len+1], class_name->u.constant.value.str.val, class_name->u.constant.value.str.len+1);
- STR_FREE(class_name->u.constant.value.str.val);
- result->u.constant.value.str.len = length;
-}
-
-void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC)
-{
- unsigned char *ptr = NULL;
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_INIT_FCALL_BY_NAME;
- zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
- if ((class_name->u.constant.value.str.len == sizeof("parent")-1)
- && !memcmp(class_name->u.constant.value.str.val, "parent", sizeof("parent")-1)) {
- if (!CG(active_ce_parent_class_name).value.str.val) {
- zend_error(E_COMPILE_ERROR, "No parent class available");
- }
- efree(class_name->u.constant.value.str.val);
- class_name->u.constant.value.str.len = CG(active_ce_parent_class_name).value.str.len;
- class_name->u.constant.value.str.val = estrndup(CG(active_ce_parent_class_name).value.str.val, class_name->u.constant.value.str.len);
- }
- opline->op1 = *class_name;
- opline->op2 = *function_name;
- opline->extended_value = ZEND_MEMBER_FUNC_CALL;
- zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
-}
-
-
-void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- if (!is_method && !is_dynamic_fcall && function_name->op_type==IS_CONST) {
- opline->opcode = ZEND_DO_FCALL;
- opline->op1 = *function_name;
- } else {
- opline->opcode = ZEND_DO_FCALL_BY_NAME;
- SET_UNUSED(opline->op1);
- }
-
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_VAR;
- *result = opline->result;
- SET_UNUSED(opline->op2);
-
- /* Check how much this is really needed
- opline->op2.u.constant.value.lval = is_method;
- */
- if (CG(throw_list) != NULL) {
- long op_number = get_next_op_number(CG(active_op_array))-1;
- zend_llist_add_element(CG(throw_list), &op_number);
- } else {
- opline->op2.u.opline_num = -1;
- }
-
- zend_stack_del_top(&CG(function_call_stack));
- opline->extended_value = argument_list->u.constant.value.lval;
-}
-
-
-void zend_do_pass_param(znode *param, int op, int offset TSRMLS_DC)
-{
- zend_op *opline;
- unsigned char *arg_types;
- int original_op=op;
- zend_function **function_ptr_ptr, *function_ptr;
- int send_by_reference;
-
-
- zend_stack_top(&CG(function_call_stack), (void **) &function_ptr_ptr);
- function_ptr = *function_ptr_ptr;
-
- if (original_op==ZEND_SEND_REF
- && !CG(allow_call_time_pass_reference)) {
- zend_error(E_COMPILE_WARNING,
- "Call-time pass-by-reference has been deprecated - argument passed by value; "
- "If you would like to pass it by reference, modify the declaration of %s(). "
- "If you would like to enable call-time pass-by-reference, you can set "
- "allow_call_time_pass_reference to true in your INI file. "
- "However, future versions may not support this any longer. ",
- (function_ptr?function_ptr->common.function_name:"[runtime function name]"),
- offset+1);
- }
-
- if (function_ptr) {
- arg_types = function_ptr->common.arg_types;
- } else {
- arg_types = NULL;
- }
-
- send_by_reference = ARG_SHOULD_BE_SENT_BY_REF(offset, 1, arg_types)?ZEND_ARG_SEND_BY_REF:0;
-
-
- if (op == ZEND_SEND_VAR && zend_variable_buffer_empty(TSRMLS_C)) {
- /* Method call */
- op = ZEND_SEND_VAR_NO_REF;
- } else if (op == ZEND_SEND_VAL && param->op_type == IS_VAR) {
- op = ZEND_SEND_VAR_NO_REF;
- }
-
- if (op!=ZEND_SEND_VAR_NO_REF && send_by_reference == ZEND_ARG_SEND_BY_REF) {
- /* change to passing by reference */
- switch (param->op_type) {
- case IS_VAR:
- op = ZEND_SEND_REF;
- break;
- default:
- zend_error(E_COMPILE_ERROR, "Only variables can be passed by reference");
- break;
- }
- }
-
- if (original_op == ZEND_SEND_VAR) {
- switch(op) {
- case ZEND_SEND_VAR_NO_REF:
- zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
- break;
- case ZEND_SEND_VAR:
- if (function_ptr) {
- zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
- } else {
- zend_do_end_variable_parse(BP_VAR_FUNC_ARG, offset TSRMLS_CC);
- }
- break;
- case ZEND_SEND_REF:
- zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC);
- break;
- }
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- if (op == ZEND_SEND_VAR_NO_REF) {
- if (function_ptr) {
- opline->extended_value = ZEND_ARG_COMPILE_TIME_BOUND | send_by_reference;
- } else {
- opline->extended_value = 0;
- }
- } else {
- if (function_ptr) {
- opline->extended_value = ZEND_DO_FCALL;
- } else {
- opline->extended_value = ZEND_DO_FCALL_BY_NAME;
- }
- }
- opline->opcode = op;
- opline->op1 = *param;
- opline->op2.u.opline_num = offset;
- SET_UNUSED(opline->op2);
-}
-
-
-static int generate_free_switch_expr(zend_switch_entry *switch_entry TSRMLS_DC)
-{
- zend_op *opline;
-
- if (switch_entry->cond.op_type!=IS_VAR && switch_entry->cond.op_type!=IS_TMP_VAR) {
- return 1;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_SWITCH_FREE;
- opline->op1 = switch_entry->cond;
- SET_UNUSED(opline->op2);
- opline->extended_value = 0;
- return 0;
-}
-
-static int generate_free_foreach_copy(znode *foreach_copy TSRMLS_DC)
-{
- zend_op *opline;
-
- if (foreach_copy->op_type!=IS_VAR && foreach_copy->op_type!=IS_TMP_VAR) {
- return 1;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_SWITCH_FREE;
- opline->op1 = *foreach_copy;
- SET_UNUSED(opline->op2);
- opline->extended_value = 1;
- return 0;
-}
-
-void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC)
-{
- zend_op *opline;
-
- if (do_end_vparse) {
- if (CG(active_op_array)->return_reference) {
- zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC);
- } else {
- zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
- }
-#if 0
- } else if (expr && CG(active_op_array)->return_reference) {
- zend_error(E_COMPILE_ERROR, "Only variables may be returned by reference");
-#endif
- }
-
-#ifdef ZTS
- zend_stack_apply_with_argument(&CG(switch_cond_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_switch_expr TSRMLS_CC);
- zend_stack_apply_with_argument(&CG(foreach_copy_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_foreach_copy TSRMLS_CC);
-#else
- zend_stack_apply(&CG(switch_cond_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element)) generate_free_switch_expr);
- zend_stack_apply(&CG(foreach_copy_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element)) generate_free_foreach_copy);
-#endif
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_RETURN;
-
- if (expr) {
- opline->op1 = *expr;
- } else {
- opline->op1.op_type = IS_CONST;
- INIT_ZVAL(opline->op1.u.constant);
- }
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_try(znode *try_token TSRMLS_DC)
-{
- try_token->throw_list = (void *) CG(throw_list);
- CG(throw_list) = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(CG(throw_list), sizeof(long), NULL, 0);
- /* Initialize try backpatch list used to backpatch throw, do_fcall */
-}
-
-static void throw_list_applier(long *opline_num, long *catch_opline)
-{
- zend_op *opline;
- TSRMLS_FETCH(); /* Pass this by argument */
-
- opline = &CG(active_op_array)->opcodes[*opline_num];
-
- /* Backpatch the opline of the catch statement */
- switch (opline->opcode) {
- case ZEND_DO_FCALL:
- case ZEND_DO_FCALL_BY_NAME:
- case ZEND_THROW:
- opline->op2.u.opline_num = *catch_opline;
- break;
- default:
- zend_error(E_ERROR, "Bad opcode in throw list");
- break;
- }
-}
-
-void zend_do_begin_catch(znode *try_token, znode *catch_var TSRMLS_DC)
-{
- long catch_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline;
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_CATCH;
- opline->op1 = *catch_var;
- SET_UNUSED(opline->op2);
-
- zend_llist_apply_with_argument(CG(throw_list), (llist_apply_with_arg_func_t) throw_list_applier, &catch_op_number TSRMLS_CC);
- zend_llist_destroy(CG(throw_list));
- efree(CG(throw_list));
- CG(throw_list) = (void *) try_token->throw_list;
-
- try_token->u.opline_num = catch_op_number;
-}
-
-void zend_do_end_catch(znode *try_token TSRMLS_DC)
-{
- CG(active_op_array)->opcodes[try_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
-}
-
-void zend_do_throw(znode *expr TSRMLS_DC)
-{
- zend_op *opline;
- long throw_op_number = get_next_op_number(CG(active_op_array));
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_THROW;
- opline->op1 = *expr;
- SET_UNUSED(opline->op2);
-
- if (CG(throw_list) != NULL) {
- zend_llist_add_element(CG(throw_list), &throw_op_number);
- } else {
- opline->op2.u.opline_num = -1;
- }
-}
-
-ZEND_API void function_add_ref(zend_function *function)
-{
- if (function->type == ZEND_USER_FUNCTION) {
- zend_op_array *op_array = &function->op_array;
-
- (*op_array->refcount)++;
- if (op_array->static_variables) {
- HashTable *static_variables = op_array->static_variables;
- zval *tmp_zval;
-
- ALLOC_HASHTABLE(op_array->static_variables);
- zend_hash_init(op_array->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(op_array->static_variables, static_variables, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));
- }
- }
-}
-
-
-static void do_inherit_parent_constructor(zend_class_entry *ce)
-{
- if (ce->parent
- && !zend_hash_exists(&ce->function_table, ce->name, ce->name_length+1)) {
- zend_function *function;
-
- if (zend_hash_find(&ce->parent->function_table, ce->parent->name, ce->parent->name_length+1, (void **) &function)==SUCCESS) {
- /* inherit parent's constructor */
- zend_hash_update(&ce->function_table, ce->name, ce->name_length+1, function, sizeof(zend_function), NULL);
- function_add_ref(function);
- }
- }
-}
-
-void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce)
-{
- zend_function tmp_zend_function;
- zval *tmp;
-
- /* Perform inheritance */
- zend_hash_merge(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
- /* STATIC_MEMBERS_FIXME */
- zend_hash_merge(&ce->static_members, &parent_ce->static_members, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
- zend_hash_merge(&ce->constants_table, &parent_ce->constants_table, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
- zend_hash_merge(&ce->function_table, &parent_ce->function_table, (void (*)(void *)) function_add_ref, &tmp_zend_function, sizeof(zend_function), 0);
- ce->parent = parent_ce;
- if (!ce->handle_property_get)
- ce->handle_property_get = parent_ce->handle_property_get;
- if (!ce->handle_property_set)
- ce->handle_property_set = parent_ce->handle_property_set;
- if (!ce->handle_function_call)
- ce->handle_function_call = parent_ce->handle_function_call;
- do_inherit_parent_constructor(ce);
-}
-
-
-ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time)
-{
- switch (opline->extended_value) {
- case ZEND_DECLARE_FUNCTION: {
- zend_function *function;
-
- zend_hash_find(function_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void *) &function);
- if (zend_hash_add(function_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, function, sizeof(zend_function), NULL)==FAILURE) {
- int error_level = compile_time ? E_COMPILE_ERROR : E_ERROR;
- zend_function *function;
-
- if (zend_hash_find(function_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, (void *) &function)==SUCCESS
- && function->type==ZEND_USER_FUNCTION
- && ((zend_op_array *) function)->last>0) {
- zend_error(error_level, "Cannot redeclare %s() (previously declared in %s:%d)",
- opline->op2.u.constant.value.str.val,
- ((zend_op_array *) function)->filename,
- ((zend_op_array *) function)->opcodes[0].lineno);
- } else {
- zend_error(error_level, "Cannot redeclare %s()", opline->op2.u.constant.value.str.val);
- }
- return FAILURE;
- } else {
- (*function->op_array.refcount)++;
- function->op_array.static_variables = NULL; /* NULL out the unbound function */
- return SUCCESS;
- }
- }
- break;
- case ZEND_DECLARE_CLASS: {
- zend_class_entry *ce;
-
- if (zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce)==FAILURE) {
- zend_error(E_ERROR, "Internal Zend error - Missing class information for %s", opline->op1.u.constant.value.str.val);
- return FAILURE;
- }
- (*ce->refcount)++;
- if (zend_hash_add(class_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, ce, sizeof(zend_class_entry), NULL)==FAILURE) {
- (*ce->refcount)--;
- if (!compile_time) {
- zend_error(E_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
- }
- return FAILURE;
- } else {
- return SUCCESS;
- }
- }
- break;
- case ZEND_DECLARE_INHERITED_CLASS: {
- zend_class_entry *ce, *parent_ce;
- int parent_name_length;
- char *class_name, *parent_name;
- int found_ce;
-
-
- found_ce = zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
-
- /* Restore base class / derived class names */
- class_name = strchr(opline->op2.u.constant.value.str.val, ':');
- if (!class_name) {
- zend_error(E_CORE_ERROR, "Invalid runtime class entry");
- }
- class_name++;
-
- if (found_ce==FAILURE) {
- zend_error(E_ERROR, "Cannot redeclare class %s", class_name);
- return FAILURE;
- }
-
- (*ce->refcount)++;
-
- /* Obtain parent class */
- parent_name_length = class_name - opline->op2.u.constant.value.str.val - 1;
- parent_name = estrndup(opline->op2.u.constant.value.str.val, parent_name_length);
- if (zend_hash_find(class_table, parent_name, parent_name_length+1, (void **) &parent_ce)==FAILURE) {
- if (!compile_time) {
- zend_error(E_ERROR, "Class %s: Cannot inherit from undefined class %s", class_name, parent_name);
- }
- (*ce->refcount)--;
- efree(parent_name);
- return FAILURE;
- }
- efree(parent_name);
-
- zend_do_inheritance(ce, parent_ce);
-
- /* Register the derived class */
- if (zend_hash_add(class_table, class_name, strlen(class_name)+1, ce, sizeof(zend_class_entry), NULL)==FAILURE) {
- if (!compile_time) {
- zend_error(E_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
- }
- (*ce->refcount)--;
- zend_hash_destroy(&ce->function_table);
- zend_hash_destroy(&ce->default_properties);
- zend_hash_destroy(&ce->static_members);
- zend_hash_destroy(&ce->constants_table);
- return FAILURE;
- }
- return SUCCESS;
- }
- break;
- }
- return FAILURE;
-}
-
-
-void zend_do_early_binding(TSRMLS_D)
-{
- zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
- HashTable *table;
-
- if (do_bind_function_or_class(opline, CG(function_table), CG(class_table), 1)==FAILURE) {
- return;
- }
- switch (opline->extended_value) {
- case ZEND_DECLARE_FUNCTION:
- table = CG(function_table);
- break;
- case ZEND_DECLARE_CLASS:
- table = CG(class_table);
- break;
- default:
- zend_error(E_COMPILE_ERROR, "Invalid binding type");
- return;
- }
- zend_hash_del(table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len);
- zval_dtor(&opline->op1.u.constant);
- zval_dtor(&opline->op2.u.constant);
- opline->opcode = ZEND_NOP;
- memset(&opline->op1, 0, sizeof(znode));
- memset(&opline->op2, 0, sizeof(znode));
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_boolean_or_begin(znode *expr1, znode *op_token TSRMLS_DC)
-{
- int next_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPNZ_EX;
- if (expr1->op_type == IS_TMP_VAR) {
- opline->result = *expr1;
- } else {
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_TMP_VAR;
- }
- opline->op1 = *expr1;
- SET_UNUSED(opline->op2);
-
- op_token->u.opline_num = next_op_number;
-
- *expr1 = opline->result;
-}
-
-
-void zend_do_boolean_or_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- *result = *expr1; /* we saved the original result in expr1 */
- opline->opcode = ZEND_BOOL;
- opline->result = *result;
- opline->op1 = *expr2;
- SET_UNUSED(opline->op2);
-
- CG(active_op_array)->opcodes[op_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
-}
-
-
-void zend_do_boolean_and_begin(znode *expr1, znode *op_token TSRMLS_DC)
-{
- int next_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPZ_EX;
- if (expr1->op_type == IS_TMP_VAR) {
- opline->result = *expr1;
- } else {
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_TMP_VAR;
- }
- opline->op1 = *expr1;
- SET_UNUSED(opline->op2);
-
- op_token->u.opline_num = next_op_number;
-
- *expr1 = opline->result;
-}
-
-
-void zend_do_boolean_and_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- *result = *expr1; /* we saved the original result in expr1 */
- opline->opcode = ZEND_BOOL;
- opline->result = *result;
- opline->op1 = *expr2;
- SET_UNUSED(opline->op2);
-
- CG(active_op_array)->opcodes[op_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
-}
-
-
-void zend_do_do_while_begin(TSRMLS_D)
-{
- do_begin_loop(TSRMLS_C);
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPNZ;
- opline->op1 = *expr;
- opline->op2.u.opline_num = do_token->u.opline_num;
- SET_UNUSED(opline->op2);
-
- do_end_loop(expr_open_bracket->u.opline_num TSRMLS_CC);
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_brk_cont(int op, znode *expr TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = op;
- opline->op1.u.opline_num = CG(active_op_array)->current_brk_cont;
- SET_UNUSED(opline->op1);
- if (expr) {
- opline->op2 = *expr;
- } else {
- opline->op2.u.constant.type = IS_LONG;
- opline->op2.u.constant.value.lval = 1;
- INIT_PZVAL(&opline->op2.u.constant);
- opline->op2.op_type = IS_CONST;
- }
-}
-
-
-void zend_do_switch_cond(znode *cond TSRMLS_DC)
-{
- zend_switch_entry switch_entry;
- zend_op *opline;
-
- /* Initialize the conditional value */
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_BOOL;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_TMP_VAR;
- opline->op1.op_type = IS_CONST;
- opline->op1.u.constant.type = IS_BOOL;
- opline->op1.u.constant.value.lval = 0;
- INIT_PZVAL(&opline->op1.u.constant);
- SET_UNUSED(opline->op2);
-
- switch_entry.cond = *cond;
- switch_entry.default_case = -1;
- switch_entry.control_var = opline->result.u.var;
- zend_stack_push(&CG(switch_cond_stack), (void *) &switch_entry, sizeof(switch_entry));
-
- do_begin_loop(TSRMLS_C);
-
- INC_BPC(CG(active_op_array));
-}
-
-
-
-void zend_do_switch_end(znode *case_list TSRMLS_DC)
-{
- zend_op *opline;
- zend_switch_entry *switch_entry_ptr;
-
- zend_stack_top(&CG(switch_cond_stack), (void **) &switch_entry_ptr);
-
- if (case_list->op_type != IS_UNUSED) { /* non-empty switch */
- int next_op_number = get_next_op_number(CG(active_op_array));
-
- CG(active_op_array)->opcodes[case_list->u.opline_num].op1.u.opline_num = next_op_number;
- }
-
- /* add code to jmp to default case */
- if (switch_entry_ptr->default_case != -1) {
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_JMPZ;
- opline->op1.op_type = IS_TMP_VAR;
- opline->op1.u.var = switch_entry_ptr->control_var;
- opline->op2.u.opline_num = switch_entry_ptr->default_case;
- SET_UNUSED(opline->op2);
- }
-
-
- /* remember break/continue loop information */
- CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].brk = get_next_op_number(CG(active_op_array));
- CG(active_op_array)->current_brk_cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].parent;
-
- if (switch_entry_ptr->cond.op_type==IS_VAR || switch_entry_ptr->cond.op_type==IS_TMP_VAR) {
- /* emit free for the switch condition*/
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_SWITCH_FREE;
- opline->op1 = switch_entry_ptr->cond;
- SET_UNUSED(opline->op2);
- }
- if (switch_entry_ptr->cond.op_type == IS_CONST) {
- zval_dtor(&switch_entry_ptr->cond.u.constant);
- }
-
- zend_stack_del_top(&CG(switch_cond_stack));
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_case_before_statement(znode *case_list, znode *case_token, znode *case_expr TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- int next_op_number;
- zend_switch_entry *switch_entry_ptr;
- znode result;
-
- zend_stack_top(&CG(switch_cond_stack), (void **) &switch_entry_ptr);
-
- opline->opcode = ZEND_CASE;
- opline->result.u.var = switch_entry_ptr->control_var;
- opline->result.op_type = IS_TMP_VAR;
- opline->op1 = switch_entry_ptr->cond;
- opline->op2 = *case_expr;
- if (opline->op1.op_type == IS_CONST) {
- zval_copy_ctor(&opline->op1.u.constant);
- }
- result = opline->result;
-
- next_op_number = get_next_op_number(CG(active_op_array));
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_JMPZ;
- opline->op1 = result;
- SET_UNUSED(opline->op2);
- case_token->u.opline_num = next_op_number;
-
- if (case_list->op_type==IS_UNUSED) {
- return;
- }
- next_op_number = get_next_op_number(CG(active_op_array));
- CG(active_op_array)->opcodes[case_list->u.opline_num].op1.u.opline_num = next_op_number;
-}
-
-
-void zend_do_case_after_statement(znode *result, znode *case_token TSRMLS_DC)
-{
- int next_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMP;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
- result->u.opline_num = next_op_number;
-
- switch (CG(active_op_array)->opcodes[case_token->u.opline_num].opcode) {
- case ZEND_JMP:
- CG(active_op_array)->opcodes[case_token->u.opline_num].op1.u.opline_num = get_next_op_number(CG(active_op_array));
- break;
- case ZEND_JMPZ:
- CG(active_op_array)->opcodes[case_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
- break;
- }
-}
-
-
-
-void zend_do_default_before_statement(znode *case_list, znode *default_token TSRMLS_DC)
-{
- int next_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- zend_switch_entry *switch_entry_ptr;
-
- zend_stack_top(&CG(switch_cond_stack), (void **) &switch_entry_ptr);
-
- opline->opcode = ZEND_JMP;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
- default_token->u.opline_num = next_op_number;
-
- next_op_number = get_next_op_number(CG(active_op_array));
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_BOOL;
- opline->result.u.var = switch_entry_ptr->control_var;
- opline->result.op_type = IS_TMP_VAR;
- opline->op1.op_type = IS_CONST;
- opline->op1.u.constant.type = IS_BOOL;
- opline->op1.u.constant.value.lval = 1;
- INIT_PZVAL(&opline->op1.u.constant);
- SET_UNUSED(opline->op2);
- switch_entry_ptr->default_case = next_op_number;
-
- if (case_list->op_type==IS_UNUSED) {
- return;
- }
- next_op_number = get_next_op_number(CG(active_op_array));
- CG(active_op_array)->opcodes[case_list->u.opline_num].op1.u.opline_num = next_op_number;
-}
-
-
-void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC)
-{
- zend_op *opline;
- int runtime_inheritance = 0;
- zend_class_entry new_class_entry;
-
- class_token->u.previously_active_class_entry = CG(active_class_entry);
- new_class_entry.type = ZEND_USER_CLASS;
- new_class_entry.name = class_name->u.constant.value.str.val;
- new_class_entry.name_length = class_name->u.constant.value.str.len;
- new_class_entry.refcount = (int *) emalloc(sizeof(int));
- *new_class_entry.refcount = 1;
- new_class_entry.constants_updated = 0;
-
- zend_str_tolower(new_class_entry.name, new_class_entry.name_length);
-
- zend_hash_init(&new_class_entry.function_table, 10, NULL, ZEND_FUNCTION_DTOR, 0);
- zend_hash_init(&new_class_entry.class_table, 10, NULL, ZEND_CLASS_DTOR, 0);
- zend_hash_init(&new_class_entry.default_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(&new_class_entry.static_members, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(&new_class_entry.constants_table, 10, NULL, ZVAL_PTR_DTOR, 0);
-
- new_class_entry.constructor = NULL;
-
- new_class_entry.handle_function_call = NULL;
- new_class_entry.handle_property_set = NULL;
- new_class_entry.handle_property_get = NULL;
-
- /* code for inheritance from parent class */
- if (parent_class_name) {
- zend_class_entry *parent_class;
- zend_function tmp_zend_function;
- zval *tmp;
-
- zend_str_tolower(parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
- CG(active_ce_parent_class_name).value.str.val = estrndup(parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
- CG(active_ce_parent_class_name).value.str.len = parent_class_name->u.constant.value.str.len;
-
- if (zend_hash_find(CG(active_class_entry)?&CG(active_class_entry)->class_table:CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class)==SUCCESS) {
- /* copy functions */
- zend_hash_copy(&new_class_entry.function_table, &parent_class->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function));
-
- /* copy default properties */
- zend_hash_copy(&new_class_entry.default_properties, &parent_class->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- /* copy static members */
- zend_hash_copy(&new_class_entry.static_members, &parent_class->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- /* copy constants */
- zend_hash_copy(&new_class_entry.constants_table, &parent_class->constants_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- new_class_entry.constructor = parent_class->constructor;
-
- /* copy overloaded handlers */
- new_class_entry.handle_function_call = parent_class->handle_function_call;
- new_class_entry.handle_property_get = parent_class->handle_property_get;
- new_class_entry.handle_property_set = parent_class->handle_property_set;
-
- new_class_entry.parent = parent_class;
-
- zval_dtor(&parent_class_name->u.constant);
- } else {
- runtime_inheritance = 1;
- new_class_entry.parent = NULL;
- }
- } else {
- new_class_entry.parent = NULL;
- }
-
- if (CG(active_class_entry)) {
- if (runtime_inheritance) {
- zend_error(E_ERROR, "Only first level classes can inherit from undefined classes");
- }
- zend_hash_update(&CG(active_class_entry)->class_table, new_class_entry.name, new_class_entry.name_length+1, &new_class_entry, sizeof(zend_class_entry), (void **) &CG(active_class_entry));
- return;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
- opline->op1.op_type = IS_CONST;
- build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline TSRMLS_CC);
- opline->op2.op_type = IS_CONST;
- opline->op2.u.constant.type = IS_STRING;
- opline->op2.u.constant.refcount = 1;
- if (runtime_inheritance) {
- char *full_class_name;
-
- opline->op2.u.constant.value.str.len = parent_class_name->u.constant.value.str.len+1+new_class_entry.name_length;
- full_class_name = opline->op2.u.constant.value.str.val = (char *) emalloc(opline->op2.u.constant.value.str.len+1);
-
- memcpy(full_class_name, parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
- full_class_name += parent_class_name->u.constant.value.str.len;
- full_class_name[0] = ':';
- full_class_name++;
- memcpy(full_class_name, new_class_entry.name, new_class_entry.name_length);
- zval_dtor(&parent_class_name->u.constant);
- full_class_name += new_class_entry.name_length;
- full_class_name[0] = 0;
- opline->extended_value = ZEND_DECLARE_INHERITED_CLASS;
- } else {
- opline->op2.u.constant.value.str.val = estrndup(new_class_entry.name, new_class_entry.name_length);
- opline->op2.u.constant.value.str.len = new_class_entry.name_length;
- opline->extended_value = ZEND_DECLARE_CLASS;
- }
-
- zend_hash_update(CG(class_table), opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, &new_class_entry, sizeof(zend_class_entry), (void **) &CG(active_class_entry));
-}
-
-
-void zend_do_end_class_declaration(znode *class_token TSRMLS_DC)
-{
- do_inherit_parent_constructor(CG(active_class_entry));
- CG(active_class_entry) = class_token->u.previously_active_class_entry;
- if (CG(active_ce_parent_class_name).value.str.val) {
- efree(CG(active_ce_parent_class_name).value.str.val);
- CG(active_ce_parent_class_name).value.str.val = NULL;
- }
-}
-
-
-void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC)
-{
- if (value) {
- zval *property;
-
- ALLOC_ZVAL(property);
-
- *property = value->u.constant;
- switch (declaration_type) {
- case T_VAR:
- zend_hash_update(&CG(active_class_entry)->default_properties, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
- break;
- case T_STATIC:
- zend_hash_update(&CG(active_class_entry)->static_members, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
- break;
- case T_CONST:
- zend_hash_update(&CG(active_class_entry)->constants_table, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
- break;
- }
- }
- FREE_PNODE(var_name);
-}
-
-
-void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC)
-{
- zend_op opline;
- zend_llist *fetch_list_ptr;
-
- init_op(&opline TSRMLS_CC);
- opline.opcode = ZEND_FETCH_OBJ_W; /* the backpatching routine assumes W */
- opline.result.op_type = IS_VAR;
- opline.result.u.EA.type = 0;
- opline.result.u.var = get_temporary_variable(CG(active_op_array));
- opline.op1 = *object;
- opline.op2 = *property;
- *result = opline.result;
-
- zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
- zend_llist_add_element(fetch_list_ptr, &opline);
-}
-
-
-void zend_do_push_object(znode *object TSRMLS_DC)
-{
- zend_stack_push(&CG(object_stack), object, sizeof(znode));
-}
-
-
-void zend_do_pop_object(znode *object TSRMLS_DC)
-{
- znode *tmp;
-
- zend_stack_top(&CG(object_stack), (void **) &tmp);
- *object = *tmp;
- zend_stack_del_top(&CG(object_stack));
-}
-
-
-void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- unsigned char *ptr = NULL;
-
- opline->opcode = ZEND_NEW;
- opline->result.op_type = IS_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *class_type;
- SET_UNUSED(opline->op2);
-
- new_token->u.opline_num = get_next_op_number(CG(active_op_array));
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_JMP_NO_CTOR;
- opline->op1 = (opline-1)->result;
- SET_UNUSED(opline->op2);
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_INIT_FCALL_BY_NAME;
- opline->op1 = (opline-2)->result;
- SET_UNUSED(opline->op2);
- opline->extended_value = ZEND_MEMBER_FUNC_CALL | ZEND_CTOR_CALL;
-
- zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(unsigned char *));
-}
-
-
-void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC)
-{
- znode ctor_result;
-
- zend_do_end_function_call(NULL, &ctor_result, argument_list, 1, 0 TSRMLS_CC);
- zend_do_free(&ctor_result TSRMLS_CC);
-
- CG(active_op_array)->opcodes[new_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
- *result = CG(active_op_array)->opcodes[new_token->u.opline_num].op1;
-}
-
-
-void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC)
-{
- switch (mode) {
- case ZEND_CT:
- if (constant_container) {
- do_fetch_class_name(NULL, constant_container, constant_name TSRMLS_CC);
- *result = *constant_container;
- } else {
- *result = *constant_name;
- }
- result->u.constant.type = IS_CONSTANT;
- break;
- case ZEND_RT:
- {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_FETCH_CONSTANT;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- if (constant_container) {
- opline->op1 = *constant_container;
- } else {
- SET_UNUSED(opline->op1);
- }
- opline->op2 = *constant_name;
- *result = opline->result;
- }
- break;
- }
-}
-
-
-void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- switch (cmd->op_type) {
- case IS_TMP_VAR:
- opline->opcode = ZEND_SEND_VAL;
- break;
- default:
- opline->opcode = ZEND_SEND_VAR;
- break;
- }
- opline->op1 = *cmd;
- opline->op2.u.opline_num = 0;
- opline->extended_value = ZEND_DO_FCALL;
- SET_UNUSED(opline->op2);
-
- /* FIXME: exception support not added to this op2 */
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_DO_FCALL;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_VAR;
- opline->op1.u.constant.value.str.val = estrndup("shell_exec", sizeof("shell_exec")-1);
- opline->op1.u.constant.value.str.len = sizeof("shell_exec")-1;
- INIT_PZVAL(&opline->op1.u.constant);
- opline->op1.u.constant.type = IS_STRING;
- opline->op1.op_type = IS_CONST;
- opline->extended_value = 1;
- SET_UNUSED(opline->op2);
- *result = opline->result;
-}
-
-
-
-void zend_do_init_array(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_INIT_ARRAY;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->result.op_type = IS_TMP_VAR;
- *result = opline->result;
- if (expr) {
- opline->op1 = *expr;
- if (offset) {
- opline->op2 = *offset;
- } else {
- SET_UNUSED(opline->op2);
- }
- } else {
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
- }
- opline->extended_value = is_ref;
-}
-
-
-void zend_do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ADD_ARRAY_ELEMENT;
- opline->result = *result;
- opline->op1 = *expr;
- if (offset) {
- opline->op2 = *offset;
- } else {
- SET_UNUSED(opline->op2);
- }
- opline->extended_value = is_ref;
-}
-
-
-
-void zend_do_add_static_array_element(znode *result, znode *offset, znode *expr)
-{
- zval *element;
-
- ALLOC_ZVAL(element);
- *element = expr->u.constant;
- if (offset) {
- switch (offset->u.constant.type) {
- case IS_CONSTANT:
- /* Ugly hack to denote that this value has a constant index */
- element->type |= IS_CONSTANT_INDEX;
- /* break missing intentionally */
- case IS_STRING:
- zend_hash_update(result->u.constant.value.ht, offset->u.constant.value.str.val, offset->u.constant.value.str.len+1, &element, sizeof(zval *), NULL);
- zval_dtor(&offset->u.constant);
- break;
- case IS_LONG:
- zend_hash_index_update(result->u.constant.value.ht, offset->u.constant.value.lval, &element, sizeof(zval *), NULL);
- break;
- }
- } else {
- zend_hash_next_index_insert(result->u.constant.value.ht, &element, sizeof(zval *), NULL);
- }
-}
-
-
-void zend_do_add_list_element(znode *element TSRMLS_DC)
-{
- list_llist_element lle;
-
- if (element) {
- lle.var = *element;
- zend_llist_copy(&lle.dimensions, &CG(dimension_llist));
- zend_llist_prepend_element(&CG(list_llist), &lle);
- }
- (*((int *)CG(dimension_llist).tail->data))++;
-}
-
-
-void zend_do_new_list_begin(TSRMLS_D)
-{
- int current_dimension = 0;
- zend_llist_add_element(&CG(dimension_llist), &current_dimension);
-}
-
-
-void zend_do_new_list_end(TSRMLS_D)
-{
- zend_llist_remove_tail(&CG(dimension_llist));
- (*((int *)CG(dimension_llist).tail->data))++;
-}
-
-
-void zend_do_list_init(TSRMLS_D)
-{
- zend_stack_push(&CG(list_stack), &CG(list_llist), sizeof(zend_llist));
- zend_stack_push(&CG(list_stack), &CG(dimension_llist), sizeof(zend_llist));
- zend_llist_init(&CG(list_llist), sizeof(list_llist_element), NULL, 0);
- zend_llist_init(&CG(dimension_llist), sizeof(int), NULL, 0);
- zend_do_new_list_begin(TSRMLS_C);
-}
-
-
-void zend_do_list_end(znode *result, znode *expr TSRMLS_DC)
-{
- zend_llist_element *le;
- zend_llist_element *dimension;
- zend_op *opline;
- znode last_container;
-
- le = CG(list_llist).head;
- while (le) {
- zend_llist *tmp_dimension_llist = &((list_llist_element *)le->data)->dimensions;
- dimension = tmp_dimension_llist->head;
- while (dimension) {
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- if (dimension == tmp_dimension_llist->head) { /* first */
- last_container = *expr;
- switch(expr->op_type) {
- case IS_VAR:
- opline->opcode = ZEND_FETCH_DIM_R;
- break;
- case IS_TMP_VAR:
- opline->opcode = ZEND_FETCH_DIM_TMP_VAR;
- break;
- case IS_CONST: /* fetch_dim_tmp_var will handle this bogus fetch */
- zval_copy_ctor(&expr->u.constant);
- opline->opcode = ZEND_FETCH_DIM_TMP_VAR;
- break;
- }
- } else {
- opline->opcode = ZEND_FETCH_DIM_R;
- }
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = last_container;
- opline->op2.op_type = IS_CONST;
- opline->op2.u.constant.type = IS_LONG;
- opline->op2.u.constant.value.lval = *((int *) dimension->data);
- INIT_PZVAL(&opline->op2.u.constant);
- opline->extended_value = ZEND_FETCH_ADD_LOCK;
- last_container = opline->result;
- dimension = dimension->next;
- }
- ((list_llist_element *) le->data)->value = last_container;
- zend_llist_destroy(&((list_llist_element *) le->data)->dimensions);
- zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC);
- zend_do_assign(result, &((list_llist_element *) le->data)->var, &((list_llist_element *) le->data)->value TSRMLS_CC);
- CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
- le = le->next;
- }
- zend_llist_destroy(&CG(dimension_llist));
- zend_llist_destroy(&CG(list_llist));
- *result = *expr;
- {
- zend_llist *p;
-
- /* restore previous lists */
- zend_stack_top(&CG(list_stack), (void **) &p);
- CG(dimension_llist) = *p;
- zend_stack_del_top(&CG(list_stack));
- zend_stack_top(&CG(list_stack), (void **) &p);
- CG(list_llist) = *p;
- zend_stack_del_top(&CG(list_stack));
- }
-}
-
-
-void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- znode lval;
- znode result;
-
- if (fetch_type==ZEND_FETCH_STATIC && static_assignment) {
- zval *tmp;
-
- ALLOC_ZVAL(tmp);
- convert_to_string(&varname->u.constant);
- *tmp = static_assignment->u.constant;
- if (!CG(active_op_array)->static_variables) {
- ALLOC_HASHTABLE(CG(active_op_array)->static_variables);
- zend_hash_init(CG(active_op_array)->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
- }
- zend_hash_update(CG(active_op_array)->static_variables, varname->u.constant.value.str.val, varname->u.constant.value.str.len+1, &tmp, sizeof(zval *), NULL);
- }
-
-
- opline->opcode = ZEND_FETCH_W; /* the default mode must be Write, since fetch_simple_variable() is used to define function arguments */
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *varname;
- SET_UNUSED(opline->op2);
- opline->extended_value = fetch_type;
- result = opline->result;
-
- if (varname->op_type == IS_CONST) {
- zval_copy_ctor(&varname->u.constant);
- }
- fetch_simple_variable(&lval, varname, 0 TSRMLS_CC); /* Relies on the fact that the default fetch is BP_VAR_W */
-
- zend_do_assign_ref(NULL, &lval, &result TSRMLS_CC);
- CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
-}
-
-
-void zend_do_cast(znode *result, znode *expr, int type TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_CAST;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *expr;
- SET_UNUSED(opline->op2);
- opline->extended_value = type;
- *result = opline->result;
-}
-
-
-void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC)
-{
- zend_do_extended_fcall_begin(TSRMLS_C);
- {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_INCLUDE_OR_EVAL;
- opline->result.op_type = IS_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *op1;
- SET_UNUSED(opline->op2);
- opline->op2.u.constant.value.lval = type;
- *result = opline->result;
- if (type==ZEND_REQUIRE) {
- opline->result.u.EA.type |= EXT_TYPE_UNUSED;
- }
- }
- zend_do_extended_fcall_end(TSRMLS_C);
-}
-
-
-void zend_do_indirect_references(znode *result, znode *num_references, znode *variable TSRMLS_DC)
-{
- int i;
-
- zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
- for (i=1; i<num_references->u.constant.value.lval; i++) {
- fetch_simple_variable_ex(result, variable, 0, ZEND_FETCH_R TSRMLS_CC);
- *variable = *result;
- }
- zend_do_begin_variable_parse(TSRMLS_C);
- fetch_simple_variable(result, variable, 1 TSRMLS_CC);
-}
-
-
-void zend_do_unset(znode *variable, int type TSRMLS_DC)
-{
- zend_op *last_op;
-
- last_op = &CG(active_op_array)->opcodes[get_next_op_number(CG(active_op_array))-1];
-
- switch (last_op->opcode) {
- case ZEND_FETCH_UNSET:
- last_op->opcode = ZEND_UNSET_VAR;
- break;
- case ZEND_FETCH_DIM_UNSET:
- case ZEND_FETCH_OBJ_UNSET:
- last_op->opcode = ZEND_UNSET_DIM_OBJ;
- break;
-
- }
- last_op->extended_value = type;
-}
-
-
-void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC)
-{
- zend_op *opline;
-
- zend_do_end_variable_parse(BP_VAR_IS, 0 TSRMLS_CC);
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ISSET_ISEMPTY;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *variable;
- opline->op2.u.constant.value.lval = type;
- SET_UNUSED(opline->op2);
- *result = opline->result;
-}
-
-
-void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable TSRMLS_DC)
-{
- zend_op *opline;
- zend_bool is_variable;
-
- if (variable) {
- if (zend_variable_buffer_empty(TSRMLS_C)) {
- is_variable = 0;
- } else {
- is_variable = 1;
- }
- zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC);
- } else {
- is_variable = 0;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- /* Preform array reset */
- opline->opcode = ZEND_FE_RESET;
- opline->result.op_type = IS_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *array;
- SET_UNUSED(opline->op2);
- opline->extended_value = is_variable;
- *open_brackets_token = opline->result;
-
- zend_stack_push(&CG(foreach_copy_stack), (void *) &opline->result, sizeof(znode));
-
- /* save the location of the beginning of the loop (array fetching) */
- foreach_token->u.opline_num = get_next_op_number(CG(active_op_array));
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_FE_FETCH;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *open_brackets_token;
- SET_UNUSED(opline->op2);
- *as_token = opline->result;
-}
-
-
-void zend_do_foreach_cont(znode *value, znode *key, znode *as_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- znode result_value, result_key, dummy;
-
- if (key->op_type != IS_UNUSED) {
- znode *tmp;
-
- /* switch between the key and value... */
- tmp = key;
- key = value;
- value = tmp;
- }
-
- opline->opcode = ZEND_FETCH_DIM_TMP_VAR;
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.opline_num = get_temporary_variable(CG(active_op_array));
- opline->op1 = *as_token;
- opline->op2.op_type = IS_CONST;
- opline->op2.u.constant.type = IS_LONG;
- opline->op2.u.constant.value.lval = 0;
- opline->extended_value = ZEND_FETCH_STANDARD; /* ignored in fetch_dim_tmp_var, but what the hell. */
- result_value = opline->result;
-
- if (key->op_type != IS_UNUSED) {
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_FETCH_DIM_TMP_VAR;
- opline->result.op_type = IS_VAR;
- opline->result.u.EA.type = 0;
- opline->result.u.opline_num = get_temporary_variable(CG(active_op_array));
- opline->op1 = *as_token;
- opline->op2.op_type = IS_CONST;
- opline->op2.u.constant.type = IS_LONG;
- opline->op2.u.constant.value.lval = 1;
- opline->extended_value = ZEND_FETCH_STANDARD; /* ignored in fetch_dim_tmp_var, but what the hell. */
- result_key = opline->result;
- }
-
- zend_do_assign(&dummy, value, &result_value TSRMLS_CC);
- CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
- if (key->op_type != IS_UNUSED) {
- zend_do_assign(&dummy, key, &result_key TSRMLS_CC);
- CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
- }
- zend_do_free(as_token TSRMLS_CC);
-
- do_begin_loop(TSRMLS_C);
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_foreach_end(znode *foreach_token, znode *open_brackets_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMP;
- opline->op1.u.opline_num = foreach_token->u.opline_num;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- CG(active_op_array)->opcodes[foreach_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
-
- do_end_loop(foreach_token->u.opline_num TSRMLS_CC);
-
- generate_free_foreach_copy(open_brackets_token TSRMLS_CC);
-
- zend_stack_del_top(&CG(foreach_copy_stack));
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_declare_begin(TSRMLS_D)
-{
- zend_stack_push(&CG(declare_stack), &CG(declarables), sizeof(zend_declarables));
-}
-
-
-void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC)
-{
- convert_to_string(&var->u.constant);
-
- if (!zend_binary_strcasecmp(var->u.constant.value.str.val, var->u.constant.value.str.len, "ticks", sizeof("ticks")-1)) {
- convert_to_long(&val->u.constant);
- CG(declarables).ticks = val->u.constant;
- }
- zval_dtor(&var->u.constant);
-}
-
-
-void zend_do_declare_end(TSRMLS_D)
-{
- zend_declarables *declarables;
-
- zend_stack_top(&CG(declare_stack), (void **) &declarables);
- CG(declarables) = *declarables;
-}
-
-
-void zend_do_end_heredoc(TSRMLS_D)
-{
- int opline_num = get_next_op_number(CG(active_op_array))-1;
- zend_op *opline = &CG(active_op_array)->opcodes[opline_num];
-
- if (opline->opcode != ZEND_ADD_STRING) {
- return;
- }
-
- opline->op2.u.constant.value.str.val[(opline->op2.u.constant.value.str.len--)-1] = 0;
- if (opline->op2.u.constant.value.str.len>0) {
- if (opline->op2.u.constant.value.str.val[opline->op2.u.constant.value.str.len-1]=='\r') {
- opline->op2.u.constant.value.str.val[(opline->op2.u.constant.value.str.len--)-1] = 0;
- }
- }
-}
-
-
-void do_namespace(znode *namespace TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_NAMESPACE;
- if (namespace) {
- opline->op1 = *namespace;
- } else {
- SET_UNUSED(opline->op1);
- }
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_exit(znode *result, znode *message TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_EXIT;
- opline->op1 = *message;
- SET_UNUSED(opline->op2);
-
- result->op_type = IS_CONST;
- result->u.constant.type = IS_BOOL;
- result->u.constant.value.lval = 1;
-}
-
-
-void zend_do_begin_silence(znode *strudel_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_BEGIN_SILENCE;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
- *strudel_token = opline->result;
-}
-
-
-void zend_do_end_silence(znode *strudel_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_END_SILENCE;
- opline->op1 = *strudel_token;
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_begin_qm_op(znode *cond, znode *qm_token TSRMLS_DC)
-{
- int jmpz_op_number = get_next_op_number(CG(active_op_array));
- zend_op *opline;
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_JMPZ;
- opline->op1 = *cond;
- SET_UNUSED(opline->op2);
- opline->op2.u.opline_num = jmpz_op_number;
- *qm_token = opline->op2;
-
- INC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_qm_true(znode *true_value, znode *qm_token, znode *colon_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- CG(active_op_array)->opcodes[qm_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array))+1; /* jmp over the ZEND_JMP */
-
- opline->opcode = ZEND_QM_ASSIGN;
- opline->result.op_type = IS_TMP_VAR;
- opline->result.u.var = get_temporary_variable(CG(active_op_array));
- opline->op1 = *true_value;
- SET_UNUSED(opline->op2);
-
- *qm_token = opline->result;
- colon_token->u.opline_num = get_next_op_number(CG(active_op_array));
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- opline->opcode = ZEND_JMP;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_qm_false(znode *result, znode *false_value, znode *qm_token, znode *colon_token TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_QM_ASSIGN;
- opline->result = *qm_token;
- opline->op1 = *false_value;
- SET_UNUSED(opline->op2);
-
- CG(active_op_array)->opcodes[colon_token->u.opline_num].op1.u.opline_num = get_next_op_number(CG(active_op_array));
-
- *result = opline->result;
-
- DEC_BPC(CG(active_op_array));
-}
-
-
-void zend_do_extended_info(TSRMLS_D)
-{
- zend_op *opline;
-
- if (!CG(extended_info)) {
- return;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_EXT_STMT;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_extended_fcall_begin(TSRMLS_D)
-{
- zend_op *opline;
-
- if (!CG(extended_info)) {
- return;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_EXT_FCALL_BEGIN;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_extended_fcall_end(TSRMLS_D)
-{
- zend_op *opline;
-
- if (!CG(extended_info)) {
- return;
- }
-
- opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_EXT_FCALL_END;
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-}
-
-
-void zend_do_ticks(TSRMLS_D)
-{
- if (CG(declarables).ticks.value.lval) {
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_TICKS;
- opline->op1.u.constant = CG(declarables).ticks;
- opline->op1.op_type = IS_CONST;
- SET_UNUSED(opline->op2);
- }
-}
-
-
-int zend_register_auto_global(char *name, uint name_len TSRMLS_DC)
-{
- return zend_hash_add_empty_element(CG(auto_globals), name, name_len+1);
-}
-
-
-int zendlex(znode *zendlval TSRMLS_DC)
-{
- int retval;
-
- if (CG(increment_lineno)) {
- CG(zend_lineno)++;
- CG(increment_lineno) = 0;
- }
-
- zendlval->u.constant.type = IS_LONG;
- retval = lex_scan(&zendlval->u.constant TSRMLS_CC);
- switch(retval) {
- case T_COMMENT:
- case T_OPEN_TAG:
- case T_WHITESPACE:
- retval = zendlex(zendlval TSRMLS_CC);
- break;
- case T_CLOSE_TAG:
- if (LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-1]=='\n'
- || (LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-2]=='\r' && LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-1])) {
- CG(increment_lineno) = 1;
- }
- retval = ';'; /* implicit ; */
- break;
- case T_OPEN_TAG_WITH_ECHO:
- retval = T_ECHO;
- break;
- case T_END_HEREDOC:
- efree(zendlval->u.constant.value.str.val);
- break;
- }
-
- INIT_PZVAL(&zendlval->u.constant);
- zendlval->op_type = IS_CONST;
- return retval;
-}
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
deleted file mode 100644
index a8dba653c5..0000000000
--- a/Zend/zend_compile.h
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_COMPILE_H
-#define ZEND_COMPILE_H
-
-#include "zend.h"
-
-#ifdef HAVE_STDARG_H
-# include <stdarg.h>
-#endif
-
-#include "zend_llist.h"
-
-#define DEBUG_ZEND 0
-
-#define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
-#define FREE_OP(Ts, op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
-
-#define SET_UNUSED(op) (op).op_type = IS_UNUSED
-
-#define INC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count++); }
-#define DEC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count--); }
-#define HANDLE_INTERACTIVE() if (CG(interactive)) { execute_new_code(TSRMLS_C); }
-
-typedef struct _zend_op_array zend_op_array;
-
-typedef struct _znode {
- int op_type;
- zend_llist *throw_list; /* Try and save this space later on */
- union {
- zval constant;
-
- zend_uint var;
- zend_uint opline_num; /* Needs to be signed */
- zend_op_array *op_array;
- zend_class_entry *previously_active_class_entry; /* Used at compile-time */
- struct {
- zend_uint var; /* dummy */
- zend_uint type;
- } EA;
- } u;
-} znode;
-
-
-typedef struct _zend_op {
- zend_uchar opcode;
- znode result;
- znode op1;
- znode op2;
- ulong extended_value;
- uint lineno;
-} zend_op;
-
-
-typedef struct _zend_brk_cont_element {
- int cont;
- int brk;
- int parent;
-} zend_brk_cont_element;
-
-
-struct _zend_op_array {
- zend_uchar type; /* MUST be the first element of this struct! */
-
- zend_uchar *arg_types; /* MUST be the second element of this struct! */
- char *function_name; /* MUST be the third element of this struct! */
-
- zend_uint *refcount;
-
- zend_op *opcodes;
- zend_uint last, size;
-
- zend_uint T;
-
- zend_brk_cont_element *brk_cont_array;
- zend_uint last_brk_cont;
- zend_uint current_brk_cont;
- zend_bool uses_globals;
-
- /* static variables support */
- HashTable *static_variables;
-
- zend_op *start_op;
- int backpatch_count;
-
- zend_bool return_reference;
- zend_bool done_pass_two;
-
- char *filename;
-
- void *reserved[ZEND_MAX_RESERVED_RESOURCES];
-};
-
-
-typedef struct _zend_internal_function {
- zend_uchar type; /* MUST be the first element of this struct! */
-
- zend_uchar *arg_types; /* MUST be the second element of this struct */
- char *function_name; /* MUST be the third element of this struct */
-
- void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
-} zend_internal_function;
-
-
-typedef struct _zend_overloaded_function {
- zend_uchar type; /* MUST be the first element of this struct! */
-
- zend_uchar *arg_types; /* MUST be the second element of this struct */
- char *function_name; /* MUST be the third element of this struct */
-
- zend_uint var;
-} zend_overloaded_function;
-
-
-typedef union _zend_function {
- zend_uchar type; /* MUST be the first element of this struct! */
- struct {
- zend_uchar type; /* never used */
- zend_uchar *arg_types;
- char *function_name;
- } common;
-
- zend_op_array op_array;
- zend_internal_function internal_function;
- zend_overloaded_function overloaded_function;
-} zend_function;
-
-
-typedef struct _zend_function_state {
- HashTable *function_symbol_table;
- zend_function *function;
- void *reserved[ZEND_MAX_RESERVED_RESOURCES];
-} zend_function_state;
-
-
-typedef struct _zend_switch_entry {
- znode cond;
- int default_case;
- int control_var;
-} zend_switch_entry;
-
-
-typedef struct _list_llist_element {
- znode var;
- zend_llist dimensions;
- znode value;
-} list_llist_element;
-
-
-typedef struct _zend_file_handle {
- zend_uchar type;
- char *filename;
- char *opened_path;
- union {
- int fd;
- FILE *fp;
- } handle;
- zend_bool free_filename;
-} zend_file_handle;
-
-
-
-#define IS_CONST (1<<0)
-#define IS_TMP_VAR (1<<1)
-#define IS_VAR (1<<2)
-#define IS_UNUSED (1<<3) /* Unused variable */
-
-
-#define EXT_TYPE_UNUSED (1<<0)
-
-#include "zend_globals.h"
-
-BEGIN_EXTERN_C()
-
-void init_compiler(TSRMLS_D);
-void shutdown_compiler(TSRMLS_D);
-void zend_init_compiler_data_structures(TSRMLS_D);
-
-extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
-
-void zend_activate(TSRMLS_D);
-void zend_deactivate(TSRMLS_D);
-void zend_activate_modules(TSRMLS_D);
-void zend_deactivate_modules(TSRMLS_D);
-
-
-int lex_scan(zval *zendlval TSRMLS_DC);
-void startup_scanner(TSRMLS_D);
-void shutdown_scanner(TSRMLS_D);
-
-ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename TSRMLS_DC);
-ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename TSRMLS_DC);
-ZEND_API char *zend_get_compiled_filename(TSRMLS_D);
-ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
-
-#ifdef ZTS
-const char *zend_get_zendtext(TSRMLS_D);
-int zend_get_zendleng(TSRMLS_D);
-#endif
-
-
-/* parser-driven code generators */
-void zend_do_binary_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
-void zend_do_unary_op(int op, znode *result, znode *op1 TSRMLS_DC);
-void zend_do_binary_assign_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
-void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC);
-void zend_do_assign_ref(znode *result, znode *lvar, znode *rvar TSRMLS_DC);
-void fetch_simple_variable(znode *result, znode *varname, int bp TSRMLS_DC);
-void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op TSRMLS_DC);
-void zend_do_indirect_references(znode *result, znode *num_references, znode *variable TSRMLS_DC);
-void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC);
-void zend_do_fetch_globals(znode *varname TSRMLS_DC);
-
-void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC);
-void fetch_array_dim(znode *result, znode *parent, znode *dim TSRMLS_DC);
-void fetch_string_offset(znode *result, znode *parent, znode *offset TSRMLS_DC);
-void zend_do_fetch_static_member(znode *class TSRMLS_DC);
-void zend_do_print(znode *result, znode *arg TSRMLS_DC);
-void zend_do_echo(znode *arg TSRMLS_DC);
-typedef int (*unary_op_type)(zval *, zval *);
-ZEND_API unary_op_type get_unary_op(int opcode);
-ZEND_API void *get_binary_op(int opcode);
-
-void zend_do_while_cond(znode *expr, znode *close_bracket_token TSRMLS_DC);
-void zend_do_while_end(znode *while_token, znode *close_bracket_token TSRMLS_DC);
-void zend_do_do_while_begin(TSRMLS_D);
-void zend_do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr TSRMLS_DC);
-
-
-void zend_do_if_cond(znode *cond, znode *closing_bracket_token TSRMLS_DC);
-void zend_do_if_after_statement(znode *closing_bracket_token, unsigned char initialize TSRMLS_DC);
-void zend_do_if_end(TSRMLS_D);
-
-void zend_do_for_cond(znode *expr, znode *second_semicolon_token TSRMLS_DC);
-void zend_do_for_before_statement(znode *cond_start, znode *second_semicolon_token TSRMLS_DC);
-void zend_do_for_end(znode *second_semicolon_token TSRMLS_DC);
-
-void zend_do_pre_incdec(znode *result, znode *op1, int op TSRMLS_DC);
-void zend_do_post_incdec(znode *result, znode *op1, int op TSRMLS_DC);
-
-void zend_do_begin_variable_parse(TSRMLS_D);
-void zend_do_end_variable_parse(int type, int arg_offset TSRMLS_DC);
-
-void zend_do_free(znode *op1 TSRMLS_DC);
-
-void zend_do_init_string(znode *result TSRMLS_DC);
-void zend_do_add_char(znode *result, znode *op1, znode *op2 TSRMLS_DC);
-void zend_do_add_string(znode *result, znode *op1, znode *op2 TSRMLS_DC);
-void zend_do_add_variable(znode *result, znode *op1, znode *op2 TSRMLS_DC);
-
-void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference TSRMLS_DC);
-void zend_do_end_function_declaration(znode *function_token TSRMLS_DC);
-void zend_do_receive_arg(int op, znode *var, znode *offset, znode *initialization, unsigned char pass_type TSRMLS_DC);
-int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
-void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC);
-void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC);
-void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
-void do_fetch_class_name(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
-void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC);
-void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
-void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC);
-
-void zend_do_try(znode *try_token TSRMLS_DC);
-void zend_do_begin_catch(znode *try_token, znode *catch_var TSRMLS_DC);
-void zend_do_end_catch(znode *try_token TSRMLS_DC);
-void zend_do_throw(znode *expr TSRMLS_DC);
-
-ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
-void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce);
-void zend_do_early_binding(TSRMLS_D);
-
-void zend_do_pass_param(znode *param, int op, int offset TSRMLS_DC);
-
-
-void zend_do_boolean_or_begin(znode *expr1, znode *op_token TSRMLS_DC);
-void zend_do_boolean_or_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
-void zend_do_boolean_and_begin(znode *expr1, znode *op_token TSRMLS_DC);
-void zend_do_boolean_and_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
-
-void zend_do_brk_cont(int op, znode *expr TSRMLS_DC);
-
-void zend_do_switch_cond(znode *cond TSRMLS_DC);
-void zend_do_switch_end(znode *case_list TSRMLS_DC);
-void zend_do_case_before_statement(znode *case_list, znode *case_token, znode *case_expr TSRMLS_DC);
-void zend_do_case_after_statement(znode *result, znode *case_token TSRMLS_DC);
-void zend_do_default_before_statement(znode *case_list, znode *default_token TSRMLS_DC);
-
-void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC);
-void zend_do_end_class_declaration(znode *class_token TSRMLS_DC);
-void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC);
-
-void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC);
-
-
-void zend_do_push_object(znode *object TSRMLS_DC);
-void zend_do_pop_object(znode *object TSRMLS_DC);
-
-
-void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC);
-void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC);
-
-void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC);
-
-void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC);
-
-void zend_do_init_array(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC);
-void zend_do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC);
-void zend_do_add_static_array_element(znode *result, znode *offset, znode *expr);
-void zend_do_list_init(TSRMLS_D);
-void zend_do_list_end(znode *result, znode *expr TSRMLS_DC);
-void zend_do_add_list_element(znode *element TSRMLS_DC);
-void zend_do_new_list_begin(TSRMLS_D);
-void zend_do_new_list_end(TSRMLS_D);
-
-void zend_do_cast(znode *result, znode *expr, int type TSRMLS_DC);
-void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC);
-
-void zend_do_unset(znode *variable, int type TSRMLS_DC);
-void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC);
-
-void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable TSRMLS_DC);
-void zend_do_foreach_cont(znode *value, znode *key, znode *as_token TSRMLS_DC);
-void zend_do_foreach_end(znode *foreach_token, znode *open_brackets_token TSRMLS_DC);
-
-void zend_do_declare_begin(TSRMLS_D);
-void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC);
-void zend_do_declare_end(TSRMLS_D);
-
-void zend_do_end_heredoc(TSRMLS_D);
-
-void do_namespace(znode *namespace TSRMLS_DC);
-
-void zend_do_exit(znode *result, znode *message TSRMLS_DC);
-
-void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
-void zend_do_end_silence(znode *strudel_token TSRMLS_DC);
-
-void zend_do_begin_qm_op(znode *cond, znode *qm_token TSRMLS_DC);
-void zend_do_qm_true(znode *true_value, znode *qm_token, znode *colon_token TSRMLS_DC);
-void zend_do_qm_false(znode *result, znode *false_value, znode *qm_token, znode *colon_token TSRMLS_DC);
-
-void zend_do_extended_info(TSRMLS_D);
-void zend_do_extended_fcall_begin(TSRMLS_D);
-void zend_do_extended_fcall_end(TSRMLS_D);
-
-void zend_do_ticks(TSRMLS_D);
-
-ZEND_API void function_add_ref(zend_function *function);
-
-#define INITIAL_OP_ARRAY_SIZE 64
-
-
-/* helper functions in zend_language_scanner.l */
-ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC);
-ZEND_API zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC);
-ZEND_API zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC);
-ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...);
-ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC);
-ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size TSRMLS_DC);
-ZEND_API void destroy_op_array(zend_op_array *op_array);
-ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC);
-ZEND_API void zend_file_handle_dtor(zend_file_handle *fh);
-
-ZEND_API void destroy_zend_function(zend_function *function);
-ZEND_API void destroy_zend_class(zend_class_entry *ce);
-void zend_class_add_ref(zend_class_entry *ce);
-
-#define ZEND_FUNCTION_DTOR (void (*)(void *)) destroy_zend_function
-#define ZEND_CLASS_DTOR (void (*)(void *)) destroy_zend_class
-
-zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC);
-void init_op(zend_op *op TSRMLS_DC);
-int get_next_op_number(zend_op_array *op_array);
-int print_class(zend_class_entry *class_entry TSRMLS_DC);
-void print_op_array(zend_op_array *op_array, int optimizations);
-int pass_two(zend_op_array *op_array TSRMLS_DC);
-zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
-ZEND_API zend_bool zend_is_compiling(TSRMLS_D);
-ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC);
-
-int zend_register_auto_global(char *name, uint name_len TSRMLS_DC);
-
-int zendlex(znode *zendlval TSRMLS_DC);
-
-#define ZEND_NOP 0
-
-#define ZEND_ADD 1
-#define ZEND_SUB 2
-#define ZEND_MUL 3
-#define ZEND_DIV 4
-#define ZEND_MOD 5
-#define ZEND_SL 6
-#define ZEND_SR 7
-#define ZEND_CONCAT 8
-#define ZEND_BW_OR 9
-#define ZEND_BW_AND 10
-#define ZEND_BW_XOR 11
-#define ZEND_BW_NOT 12
-#define ZEND_BOOL_NOT 13
-#define ZEND_BOOL_XOR 14
-#define ZEND_IS_IDENTICAL 15
-#define ZEND_IS_NOT_IDENTICAL 16
-#define ZEND_IS_EQUAL 17
-#define ZEND_IS_NOT_EQUAL 18
-#define ZEND_IS_SMALLER 19
-#define ZEND_IS_SMALLER_OR_EQUAL 20
-#define ZEND_CAST 21
-#define ZEND_QM_ASSIGN 22
-
-#define ZEND_ASSIGN_ADD 23
-#define ZEND_ASSIGN_SUB 24
-#define ZEND_ASSIGN_MUL 25
-#define ZEND_ASSIGN_DIV 26
-#define ZEND_ASSIGN_MOD 27
-#define ZEND_ASSIGN_SL 28
-#define ZEND_ASSIGN_SR 29
-#define ZEND_ASSIGN_CONCAT 30
-#define ZEND_ASSIGN_BW_OR 31
-#define ZEND_ASSIGN_BW_AND 32
-#define ZEND_ASSIGN_BW_XOR 33
-
-#define ZEND_PRE_INC 34
-#define ZEND_PRE_DEC 35
-#define ZEND_POST_INC 36
-#define ZEND_POST_DEC 37
-
-#define ZEND_ASSIGN 38
-#define ZEND_ASSIGN_REF 39
-
-#define ZEND_ECHO 40
-#define ZEND_PRINT 41
-
-#define ZEND_JMP 42
-#define ZEND_JMPZ 43
-#define ZEND_JMPNZ 44
-#define ZEND_JMPZNZ 45
-#define ZEND_JMPZ_EX 46
-#define ZEND_JMPNZ_EX 47
-#define ZEND_CASE 48
-#define ZEND_SWITCH_FREE 49
-#define ZEND_BRK 50
-#define ZEND_CONT 51
-#define ZEND_BOOL 52
-
-#define ZEND_INIT_STRING 53
-#define ZEND_ADD_CHAR 54
-#define ZEND_ADD_STRING 55
-#define ZEND_ADD_VAR 56
-
-#define ZEND_BEGIN_SILENCE 57
-#define ZEND_END_SILENCE 58
-
-#define ZEND_INIT_FCALL_BY_NAME 59
-#define ZEND_DO_FCALL 60
-#define ZEND_DO_FCALL_BY_NAME 61
-#define ZEND_RETURN 62
-
-#define ZEND_RECV 63
-#define ZEND_RECV_INIT 64
-
-#define ZEND_SEND_VAL 65
-#define ZEND_SEND_VAR 66
-#define ZEND_SEND_REF 67
-
-#define ZEND_NEW 68
-#define ZEND_JMP_NO_CTOR 69
-#define ZEND_FREE 70
-
-#define ZEND_INIT_ARRAY 71
-#define ZEND_ADD_ARRAY_ELEMENT 72
-
-#define ZEND_INCLUDE_OR_EVAL 73
-
-#define ZEND_UNSET_VAR 74
-#define ZEND_UNSET_DIM_OBJ 75
-#define ZEND_ISSET_ISEMPTY 76
-
-#define ZEND_FE_RESET 77
-#define ZEND_FE_FETCH 78
-
-#define ZEND_EXIT 79
-
-
-/* the following 18 opcodes are 6 groups of 3 opcodes each, and must
- * remain in that order!
- */
-#define ZEND_FETCH_R 80
-#define ZEND_FETCH_DIM_R 81
-#define ZEND_FETCH_OBJ_R 82
-#define ZEND_FETCH_W 83
-#define ZEND_FETCH_DIM_W 84
-#define ZEND_FETCH_OBJ_W 85
-#define ZEND_FETCH_RW 86
-#define ZEND_FETCH_DIM_RW 87
-#define ZEND_FETCH_OBJ_RW 88
-#define ZEND_FETCH_IS 89
-#define ZEND_FETCH_DIM_IS 90
-#define ZEND_FETCH_OBJ_IS 91
-#define ZEND_FETCH_FUNC_ARG 92
-#define ZEND_FETCH_DIM_FUNC_ARG 93
-#define ZEND_FETCH_OBJ_FUNC_ARG 94
-#define ZEND_FETCH_UNSET 95
-#define ZEND_FETCH_DIM_UNSET 96
-#define ZEND_FETCH_OBJ_UNSET 97
-
-#define ZEND_FETCH_DIM_TMP_VAR 98
-#define ZEND_FETCH_CONSTANT 99
-
-#define ZEND_DECLARE_FUNCTION_OR_CLASS 100
-
-#define ZEND_EXT_STMT 101
-#define ZEND_EXT_FCALL_BEGIN 102
-#define ZEND_EXT_FCALL_END 103
-#define ZEND_EXT_NOP 104
-
-#define ZEND_TICKS 105
-
-#define ZEND_SEND_VAR_NO_REF 106
-
-#define ZEND_CATCH 107
-#define ZEND_THROW 108
-
-#define ZEND_NAMESPACE 109
-#define ZEND_FETCH_CLASS 110
-/* end of block */
-
-
-
-
-/* global/local fetches */
-#define ZEND_FETCH_GLOBAL 0
-#define ZEND_FETCH_LOCAL 1
-#define ZEND_FETCH_STATIC 2
-#define ZEND_FETCH_STATIC_MEMBER 3
-
-/* class fetches */
-#define ZEND_FETCH_CLASS_DEFAULT 0
-#define ZEND_FETCH_CLASS_SELF 1
-
-/* unset types */
-#define ZEND_UNSET_REG 0
-#define ZEND_UNSET_OBJ 1
-
-/* var status for backpatching */
-#define BP_VAR_R 0
-#define BP_VAR_W 1
-#define BP_VAR_RW 2
-#define BP_VAR_IS 3
-#define BP_VAR_NA 4 /* if not applicable */
-#define BP_VAR_FUNC_ARG 5
-#define BP_VAR_UNSET 6
-
-
-#define ZEND_INTERNAL_FUNCTION 1
-#define ZEND_USER_FUNCTION 2
-#define ZEND_OVERLOADED_FUNCTION 3
-#define ZEND_EVAL_CODE 4
-
-#define ZEND_INTERNAL_CLASS 1
-#define ZEND_USER_CLASS 2
-
-#define ZEND_EVAL (1<<0)
-#define ZEND_INCLUDE (1<<1)
-#define ZEND_INCLUDE_ONCE (1<<2)
-#define ZEND_REQUIRE (1<<3)
-#define ZEND_REQUIRE_ONCE (1<<4)
-
-#define ZEND_ISSET (1<<0)
-#define ZEND_ISEMPTY (1<<1)
-
-#define ZEND_CT (1<<0)
-#define ZEND_RT (1<<1)
-
-
-#define ZEND_HANDLE_FILENAME 0
-#define ZEND_HANDLE_FD 1
-#define ZEND_HANDLE_FP 2
-#define ZEND_HANDLE_STDIOSTREAM 3
-#define ZEND_HANDLE_FSTREAM 4
-
-#define ZEND_DECLARE_CLASS 1
-#define ZEND_DECLARE_FUNCTION 2
-#define ZEND_DECLARE_INHERITED_CLASS 3
-
-#define ZEND_FETCH_STANDARD 0
-#define ZEND_FETCH_ADD_LOCK 1
-
-#define ZEND_MEMBER_FUNC_CALL 1<<0
-#define ZEND_CTOR_CALL 1<<1
-
-#define ZEND_ARG_SEND_BY_REF (1<<0)
-#define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
-
-#define AI_USE_PTR(ai) \
- if ((ai).ptr_ptr) { \
- (ai).ptr = *((ai).ptr_ptr); \
- (ai).ptr_ptr = &((ai).ptr); \
- } else { \
- (ai).ptr = NULL; \
- }
-
-/* Lost In Stupid Parentheses */
-#define ARG_SHOULD_BE_SENT_BY_REF(offset, conduct_check, arg_types) \
- ( \
- conduct_check \
- && arg_types \
- && \
- ( \
- ( \
- offset<=arg_types[0] \
- && arg_types[offset]==BYREF_FORCE \
- ) \
- || ( \
- offset>=arg_types[0] \
- && arg_types[arg_types[0]]==BYREF_FORCE_REST \
- ) \
- ) \
- )
-
-#define ZEND_RETURN_VAL 0
-#define ZEND_RETURN_REF 1
-
-END_EXTERN_C()
-
-#endif /* ZEND_COMPILE_H */
diff --git a/Zend/zend_config.w32.h b/Zend/zend_config.w32.h
deleted file mode 100644
index f246854dac..0000000000
--- a/Zend/zend_config.w32.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_CONFIG_W32_H
-#define ZEND_CONFIG_W32_H
-
-
-#include <string.h>
-#include <windows.h>
-#include <float.h>
-
-typedef unsigned long ulong;
-typedef unsigned int uint;
-
-#define HAVE_ALLOCA 1
-#define HAVE_LIMITS_H 1
-#include <malloc.h>
-
-#undef HAVE_KILL
-#define HAVE_GETPID 1
-/* #define HAVE_ALLOCA_H 1 */
-#define HAVE_MEMCPY 1
-#define HAVE_STRDUP 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_STDIOSTR_H 1
-#define HAVE_CLASS_ISTDIOSTREAM
-#define istdiostream stdiostream
-#define HAVE_STDARG_H 1
-#define HAVE_SNPRINTF 1
-#define HAVE_VSNPRINTF 1
-
-#define vsnprintf _vsnprintf
-#define zend_isinf(a) 0
-
-#define zend_sprintf sprintf
-
-/* This will cause the compilation process to be MUCH longer, but will generate
- * a much quicker PHP binary
- */
-#undef inline
-#ifdef ZEND_WIN32_FORCE_INLINE
-# define inline __forceinline
-#else
-# define inline
-#endif
-
-#define zend_finite(A) _finite(A)
-#define zend_isnan(A) _isnan(A)
-
-#ifdef LIBZEND_EXPORTS
-# define ZEND_API __declspec(dllexport)
-#else
-# define ZEND_API __declspec(dllimport)
-#endif
-
-#define ZEND_DLEXPORT __declspec(dllexport)
-
-/* 0x00200000L is MB_SERVICE_NOTIFICATION, which is only supported under Windows NT
- * (and requires _WIN32_WINNT to be defined, which prevents the resulting executable
- * from running under Windows 9x
- * Windows 9x should silently ignore it, so it's being used here directly
- */
-#ifndef MB_SERVICE_NOTIFICATION
-#define MB_SERVICE_NOTIFICATION 0x00200000L
-#endif
-
-#define ZEND_SERVICE_MB_STYLE (MB_TOPMOST|MB_SERVICE_NOTIFICATION)
-
-#endif /* ZEND_CONFIG_W32_H */
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
deleted file mode 100644
index 8976543d52..0000000000
--- a/Zend/zend_constants.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_constants.h"
-#include "zend_variables.h"
-#include "zend_operators.h"
-#include "zend_globals.h"
-
-
-void free_zend_constant(zend_constant *c)
-{
- if (!(c->flags & CONST_PERSISTENT)
- || (c->flags & CONST_EFREE_PERSISTENT)) {
- zval_dtor(&c->value);
- }
- free(c->name);
-}
-
-
-void copy_zend_constant(zend_constant *c)
-{
- c->name = zend_strndup(c->name, c->name_len);
- if (!(c->flags & CONST_PERSISTENT)) {
- zval_copy_ctor(&c->value);
- if (c->flags & CONST_EFREE_PERSISTENT) { /* persist_alloc()'d data */
- persist_alloc(&c->value);
- }
- }
-}
-
-
-void zend_copy_constants(HashTable *target, HashTable *source)
-{
- zend_constant tmp_constant;
-
- zend_hash_copy(target, source, (copy_ctor_func_t) copy_zend_constant, &tmp_constant, sizeof(zend_constant));
-}
-
-
-static int clean_non_persistent_constant(zend_constant *c TSRMLS_DC)
-{
- if (c->flags & CONST_PERSISTENT) {
- return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
- } else {
- return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
- }
-}
-
-
-static int clean_module_constant(zend_constant *c, int *module_number TSRMLS_DC)
-{
- if (c->module_number == *module_number) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-void clean_module_constants(int module_number TSRMLS_DC)
-{
- zend_hash_apply_with_argument(EG(zend_constants), (apply_func_arg_t) clean_module_constant, (void *) &module_number TSRMLS_CC);
-}
-
-
-int zend_startup_constants(TSRMLS_D)
-{
-#ifdef ZEND_WIN32
- DWORD dwBuild=0;
- DWORD dwVersion = GetVersion();
- DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
- DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
-#endif
-
- EG(zend_constants) = &CG(main_class).constants_table;
-
- if (zend_hash_init(EG(zend_constants), 20, NULL, ZEND_CONSTANT_DTOR, 1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-
-void zend_register_standard_constants(TSRMLS_D)
-{
- REGISTER_MAIN_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
-
- /* true/false constants */
- {
- zend_constant c;
-
- c.value.type = IS_BOOL;
- c.flags = CONST_PERSISTENT;
- c.module_number = 0;
-
- c.name = zend_strndup(ZEND_STRL("TRUE"));
- c.name_len = sizeof("TRUE");
- c.value.value.lval = 1;
- c.value.type = IS_BOOL;
- zend_register_constant(&c TSRMLS_CC);
-
- c.name = zend_strndup(ZEND_STRL("FALSE"));
- c.name_len = sizeof("FALSE");
- c.value.value.lval = 0;
- c.value.type = IS_BOOL;
- zend_register_constant(&c TSRMLS_CC);
-
- c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE"));
- c.name_len = sizeof("ZEND_THREAD_SAFE");
- c.value.value.lval = ZTS_V;
- c.value.type = IS_BOOL;
- zend_register_constant(&c TSRMLS_CC);
-
- c.name = zend_strndup(ZEND_STRL("NULL"));
- c.name_len = sizeof("NULL");
- c.value.type = IS_NULL;
- zend_register_constant(&c TSRMLS_CC);
- }
-}
-
-
-int zend_shutdown_constants(TSRMLS_D)
-{
- zend_hash_destroy(EG(zend_constants));
- return SUCCESS;
-}
-
-
-void clean_non_persistent_constants(TSRMLS_D)
-{
- if (EG(full_tables_cleanup)) {
- zend_hash_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
- } else {
- zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
- }
-}
-
-
-ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC)
-{
- zend_constant c;
-
- c.value.type = IS_LONG;
- c.value.value.lval = lval;
- c.flags = flags;
- c.name = zend_strndup(name, name_len);
- c.name_len = name_len;
- c.module_number = module_number;
- zend_register_constant(&c TSRMLS_CC);
-}
-
-
-ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC)
-{
- zend_constant c;
-
- c.value.type = IS_DOUBLE;
- c.value.value.dval = dval;
- c.flags = flags;
- c.name = zend_strndup(name, name_len);
- c.name_len = name_len;
- c.module_number = module_number;
- zend_register_constant(&c TSRMLS_CC);
-}
-
-
-ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number TSRMLS_DC)
-{
- zend_constant c;
-
- c.value.type = IS_STRING;
- c.value.value.str.val = strval;
- c.value.value.str.len = strlen;
- c.flags = flags;
- c.name = zend_strndup(name, name_len);
- c.name_len = name_len;
- c.module_number = module_number;
- zend_register_constant(&c TSRMLS_CC);
-}
-
-
-ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC)
-{
- zend_register_stringl_constant(name, name_len, strval, strlen(strval), flags, module_number TSRMLS_CC);
-}
-
-
-ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC)
-{
- zend_constant *c;
- char *lookup_name;
- int retval;
-
- lookup_name = do_alloca(name_len+1);
- memcpy(lookup_name, name, name_len+1);
-
- zend_str_tolower(lookup_name, name_len);
-
- if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) &c)==SUCCESS) {
- if ((c->flags & CONST_CS) && memcmp(c->name, name, name_len)!=0) {
- retval=0;
- } else {
- retval=1;
- *result = c->value;
- zval_copy_ctor(result);
- }
- } else {
- retval=0;
- }
-
- free_alloca(lookup_name);
-
- return retval;
-}
-
-
-ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
-{
- char *lowercase_name = zend_strndup(c->name, c->name_len);
- int ret = SUCCESS;
-
-#if 0
- printf("Registering constant for module %d\n", c->module_number);
-#endif
-
- zend_str_tolower(lowercase_name, c->name_len);
- if (zend_hash_add(EG(zend_constants), lowercase_name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) {
- free(c->name);
- if (!(c->flags & CONST_PERSISTENT)
- || (c->flags & CONST_EFREE_PERSISTENT)) {
- zval_dtor(&c->value);
- }
- zend_error(E_NOTICE,"Constant %s already defined", lowercase_name);
- ret = FAILURE;
- }
- free(lowercase_name);
- return ret;
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h
deleted file mode 100644
index 5ef5860ab8..0000000000
--- a/Zend/zend_constants.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_CONSTANTS_H
-#define ZEND_CONSTANTS_H
-
-#include "zend_globals.h"
-
-#define CONST_CS (1<<0) /* Case Sensitive */
-#define CONST_PERSISTENT (1<<1) /* Persistent */
-#define CONST_EFREE_PERSISTENT (1<<2) /* In conjunction with CONST_PERSISTENT,
- * means that the constant should be freed
- * using zval_dtor() on shutdown.
- */
-
-typedef struct _zend_constant {
- zval value;
- int flags;
- char *name;
- uint name_len;
- int module_number;
-} zend_constant;
-
-#define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
-#define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), module_number TSRMLS_CC)
-#define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), module_number TSRMLS_CC)
-#define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), module_number TSRMLS_CC)
-
-#define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), 0 TSRMLS_CC)
-#define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), 0 TSRMLS_CC)
-#define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), 0 TSRMLS_CC)
-#define REGISTER_MAIN_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), 0 TSRMLS_CC)
-
-void clean_module_constants(int module_number TSRMLS_DC);
-void free_zend_constant(zend_constant *c);
-int zend_startup_constants(TSRMLS_D);
-int zend_shutdown_constants(TSRMLS_D);
-void zend_register_standard_constants(TSRMLS_D);
-void clean_non_persistent_constants(TSRMLS_D);
-ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC);
-ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC);
-ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC);
-ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC);
-ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number TSRMLS_DC);
-ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC);
-void zend_copy_constants(HashTable *target, HashTable *sourc);
-void copy_zend_constant(zend_constant *c);
-
-#define ZEND_CONSTANT_DTOR (void (*)(void *)) free_zend_constant
-
-#endif
diff --git a/Zend/zend_dynamic_array.c b/Zend/zend_dynamic_array.c
deleted file mode 100644
index ce875cfb27..0000000000
--- a/Zend/zend_dynamic_array.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#include "zend.h"
-
-typedef struct _dynamic_array {
- char *array;
- unsigned int element_size;
- unsigned int current;
- unsigned int allocated;
-} dynamic_array;
-
-ZEND_API int zend_dynamic_array_init(dynamic_array *da, unsigned int element_size, unsigned int size)
-{
- da->element_size = element_size;
- da->allocated = size;
- da->current = 0;
- da->array = (char *) emalloc(size*element_size);
- if (da->array == NULL) {
- return 1;
- }
- return 0;
-}
-
-ZEND_API void *zend_dynamic_array_push(dynamic_array *da)
-{
- if (da->current == da->allocated) {
- da->allocated *= 2;
- da->array = (char *) erealloc(da->array, da->allocated*da->element_size);
- }
- return (void *)(da->array+(da->current++)*da->element_size);
-}
-
-ZEND_API void *zend_dynamic_array_pop(dynamic_array *da)
-{
- return (void *)(da->array+(--(da->current))*da->element_size);
-
-}
-
-ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index)
-{
- if (index >= da->current) {
- return NULL;
- }
- return (void *)(da->array+index*da->element_size);
-}
diff --git a/Zend/zend_dynamic_array.h b/Zend/zend_dynamic_array.h
deleted file mode 100644
index c2faef7f03..0000000000
--- a/Zend/zend_dynamic_array.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_DYNAMIC_ARRAY_H
-#define ZEND_DYNAMIC_ARRAY_H
-
-typedef struct _dynamic_array {
- char *array;
- unsigned int element_size;
- unsigned int last_used;
- unsigned int allocated;
-} dynamic_array;
-
-BEGIN_EXTERN_C()
-ZEND_API int zend_dynamic_array_init(dynamic_array *da);
-ZEND_API void *zend_dynamic_array_push(dynamic_array *da);
-ZEND_API void *zend_dynamic_array_pop(dynamic_array *da);
-ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index);
-END_EXTERN_C()
-
-#endif /* ZEND_DYNAMIC_ARRAY_H */
diff --git a/Zend/zend_errors.h b/Zend/zend_errors.h
deleted file mode 100644
index 48bccb575a..0000000000
--- a/Zend/zend_errors.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_ERRORS_H
-#define ZEND_ERRORS_H
-
-#define E_ERROR (1<<0L)
-#define E_WARNING (1<<1L)
-#define E_PARSE (1<<2L)
-#define E_NOTICE (1<<3L)
-#define E_CORE_ERROR (1<<4L)
-#define E_CORE_WARNING (1<<5L)
-#define E_COMPILE_ERROR (1<<6L)
-#define E_COMPILE_WARNING (1<<7L)
-#define E_USER_ERROR (1<<8L)
-#define E_USER_WARNING (1<<9L)
-#define E_USER_NOTICE (1<<10L)
-
-#define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
-#define E_CORE (E_CORE_ERROR | E_CORE_WARNING)
-
-#endif /* ZEND_ERRORS_H */
-
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
deleted file mode 100644
index 1f029428c0..0000000000
--- a/Zend/zend_execute.c
+++ /dev/null
@@ -1,2648 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#define ZEND_INTENSIVE_DEBUGGING 0
-
-#include <stdio.h>
-#include <signal.h>
-
-#include "zend.h"
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_API.h"
-#include "zend_ptr_stack.h"
-#include "zend_constants.h"
-#include "zend_extensions.h"
-#include "zend_fast_cache.h"
-#include "zend_execute_locks.h"
-
-#define get_zval_ptr(node, Ts, should_free, type) _get_zval_ptr(node, Ts, should_free TSRMLS_CC)
-#define get_zval_ptr_ptr(node, Ts, type) _get_zval_ptr_ptr(node, Ts TSRMLS_CC)
-
-#define get_incdec_op(op, opcode) \
- switch (opcode) { \
- case ZEND_PRE_INC: \
- case ZEND_POST_INC: \
- (op) = increment_function; \
- break; \
- case ZEND_PRE_DEC: \
- case ZEND_POST_DEC: \
- (op) = decrement_function; \
- break; \
- default: \
- (op) = NULL; \
- break; \
- } \
-
-/* These globals don't have to be thread safe since they're never modified */
-
-
-/* Prototypes */
-static zval get_overloaded_property(temp_variable *T TSRMLS_DC);
-static void set_overloaded_property(temp_variable *T, zval *value TSRMLS_DC);
-static void call_overloaded_function(temp_variable *T, int arg_count, zval *return_value TSRMLS_DC);
-static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type TSRMLS_DC);
-static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC);
-static void zend_fetch_property_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC);
-static void zend_fetch_dimension_address_from_tmp_var(znode *result, znode *op1, znode *op2, temp_variable *Ts TSRMLS_DC);
-static void zend_extension_statement_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC);
-static void zend_extension_fcall_begin_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC);
-static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC);
-
-#define RETURN_VALUE_USED(opline) (!((opline)->result.u.EA.type & EXT_TYPE_UNUSED))
-
-static inline zval *_get_zval_ptr(znode *node, temp_variable *Ts, int *should_free TSRMLS_DC)
-{
- switch(node->op_type) {
- case IS_CONST:
- *should_free = 0;
- return &node->u.constant;
- break;
- case IS_TMP_VAR:
- *should_free = 1;
- return &Ts[node->u.var].tmp_var;
- break;
- case IS_VAR:
- if (Ts[node->u.var].var.ptr) {
- PZVAL_UNLOCK(Ts[node->u.var].var.ptr);
- *should_free = 0;
- return Ts[node->u.var].var.ptr;
- } else {
- *should_free = 1;
-
- switch (Ts[node->u.var].EA.type) {
- case IS_OVERLOADED_OBJECT:
- Ts[node->u.var].tmp_var = get_overloaded_property(&Ts[node->u.var] TSRMLS_CC);
- Ts[node->u.var].tmp_var.refcount=1;
- Ts[node->u.var].tmp_var.is_ref=1;
- return &Ts[node->u.var].tmp_var;
- break;
- case IS_STRING_OFFSET: {
- temp_variable *T = &Ts[node->u.var];
- zval *str = T->EA.data.str_offset.str;
-
- if (T->EA.data.str_offset.str->type != IS_STRING
- || (T->EA.data.str_offset.offset<0)
- || (T->EA.data.str_offset.str->value.str.len <= T->EA.data.str_offset.offset)) {
- zend_error(E_NOTICE, "Uninitialized string offset: %d", T->EA.data.str_offset.offset);
- T->tmp_var.value.str.val = empty_string;
- T->tmp_var.value.str.len = 0;
- } else {
- char c = str->value.str.val[T->EA.data.str_offset.offset];
-
- T->tmp_var.value.str.val = estrndup(&c, 1);
- T->tmp_var.value.str.len = 1;
- }
- PZVAL_UNLOCK(str);
- T->tmp_var.refcount=1;
- T->tmp_var.is_ref=1;
- T->tmp_var.type = IS_STRING;
- return &T->tmp_var;
- }
- break;
- }
- }
- break;
- case IS_UNUSED:
- *should_free = 0;
- return NULL;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- return NULL;
-}
-
-static inline zval *_get_object_zval_ptr(znode *node, temp_variable *Ts, int *should_free TSRMLS_DC)
-{
- switch(node->op_type) {
- case IS_TMP_VAR:
- *should_free = 1;
- return &Ts[node->u.var].tmp_var;
- break;
- case IS_VAR:
- if (Ts[node->u.var].var.ptr_ptr) {
- PZVAL_UNLOCK(*Ts[node->u.var].var.ptr_ptr);
- *should_free = 0;
- return *Ts[node->u.var].var.ptr_ptr;
- } else {
- if (Ts[node->u.var].EA.type==IS_STRING_OFFSET) {
- PZVAL_UNLOCK(Ts[node->u.var].EA.data.str_offset.str);
- }
- *should_free = 1;
- return NULL;
- }
- break;
- case IS_UNUSED:
- return NULL;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- return NULL;
-}
-
-
-static inline zval **_get_zval_ptr_ptr(znode *node, temp_variable *Ts TSRMLS_DC)
-{
- if (node->op_type==IS_VAR) {
- if (Ts[node->u.var].var.ptr_ptr) {
- PZVAL_UNLOCK(*Ts[node->u.var].var.ptr_ptr);
- } else if (Ts[node->u.var].EA.type==IS_STRING_OFFSET) {
- PZVAL_UNLOCK(Ts[node->u.var].EA.data.str_offset.str);
- }
- return Ts[node->u.var].var.ptr_ptr;
- } else {
- return NULL;
- }
-}
-
-
-static inline zval **zend_fetch_property_address_inner(HashTable *ht, znode *op2, temp_variable *Ts, int type TSRMLS_DC)
-{
- zval *prop_ptr = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- zval **retval;
- zval tmp;
-
-
- switch (op2->op_type) {
- case IS_CONST:
- /* already a constant string */
- break;
- case IS_VAR:
- tmp = *prop_ptr;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- prop_ptr = &tmp;
- break;
- case IS_TMP_VAR:
- convert_to_string(prop_ptr);
- break;
- }
-
- if (zend_hash_find(ht, prop_ptr->value.str.val, prop_ptr->value.str.len+1, (void **) &retval) == FAILURE) {
- switch (type) {
- case BP_VAR_R:
- zend_error(E_NOTICE,"Undefined property: %s", prop_ptr->value.str.val);
- /* break missing intentionally */
- case BP_VAR_IS:
- retval = &EG(uninitialized_zval_ptr);
- break;
- case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined property: %s", prop_ptr->value.str.val);
- /* break missing intentionally */
- case BP_VAR_W: {
- zval *new_zval = &EG(uninitialized_zval);
-
- new_zval->refcount++;
- zend_hash_update(ht, prop_ptr->value.str.val, prop_ptr->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- }
-
- if (prop_ptr == &tmp) {
- zval_dtor(prop_ptr);
- }
- FREE_OP(Ts, op2, EG(free_op2));
- return retval;
-}
-
-
-
-static inline void zend_switch_free(zend_op *opline, temp_variable *Ts TSRMLS_DC)
-{
- switch (opline->op1.op_type) {
- case IS_VAR:
- if (!Ts[opline->op1.u.var].var.ptr_ptr) {
- get_zval_ptr(&opline->op1, Ts, &EG(free_op1), BP_VAR_R);
- FREE_OP(Ts, &opline->op1, EG(free_op1));
- } else {
- zval_ptr_dtor(&Ts[opline->op1.u.var].var.ptr);
- if (opline->extended_value) { /* foreach() free */
- zval_ptr_dtor(&Ts[opline->op1.u.var].var.ptr);
- }
- }
- break;
- case IS_TMP_VAR:
- zendi_zval_dtor(Ts[opline->op1.u.var].tmp_var);
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
-}
-
-void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts TSRMLS_DC)
-{
- zval *variable_ptr;
- zval *value_ptr;
-
- if (!value_ptr_ptr || !variable_ptr_ptr) {
- zend_error(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
- return;
- }
-
- variable_ptr = *variable_ptr_ptr;
- value_ptr = *value_ptr_ptr;
-
- if (variable_ptr == EG(error_zval_ptr) || value_ptr==EG(error_zval_ptr)) {
- variable_ptr_ptr = &EG(uninitialized_zval_ptr);
-/* } else if (variable_ptr==&EG(uninitialized_zval) || variable_ptr!=value_ptr) { */
- } else if (variable_ptr_ptr != value_ptr_ptr) {
- variable_ptr->refcount--;
- if (variable_ptr->refcount==0) {
- zendi_zval_dtor(*variable_ptr);
- FREE_ZVAL(variable_ptr);
- }
-
- if (!PZVAL_IS_REF(value_ptr)) {
- /* break it away */
- value_ptr->refcount--;
- if (value_ptr->refcount>0) {
- ALLOC_ZVAL(*value_ptr_ptr);
- **value_ptr_ptr = *value_ptr;
- value_ptr = *value_ptr_ptr;
- zendi_zval_copy_ctor(*value_ptr);
- }
- value_ptr->refcount = 1;
- value_ptr->is_ref = 1;
- }
-
- *variable_ptr_ptr = value_ptr;
- value_ptr->refcount++;
- } else {
- if (variable_ptr->refcount>1) { /* we need to break away */
- SEPARATE_ZVAL(variable_ptr_ptr);
- }
- (*variable_ptr_ptr)->is_ref = 1;
- }
-
- if (result && !(result->u.EA.type & EXT_TYPE_UNUSED)) {
- Ts[result->u.var].var.ptr_ptr = variable_ptr_ptr;
- SELECTIVE_PZVAL_LOCK(*variable_ptr_ptr, result);
- AI_USE_PTR(Ts[result->u.var].var);
- }
-}
-
-
-static inline void zend_assign_to_variable(znode *result, znode *op1, znode *op2, zval *value, int type, temp_variable *Ts TSRMLS_DC)
-{
- zval **variable_ptr_ptr = get_zval_ptr_ptr(op1, Ts, BP_VAR_W);
- zval *variable_ptr;
-
- if (!variable_ptr_ptr) {
- switch (Ts[op1->u.var].EA.type) {
- case IS_OVERLOADED_OBJECT:
- {
- int return_value_used;
-
- return_value_used = result && !(result->u.EA.type & EXT_TYPE_UNUSED);
-
- if (return_value_used) {
- if (type == IS_TMP_VAR) {
- MAKE_STD_ZVAL(*Ts[result->u.var].var.ptr_ptr);
- **Ts[result->u.var].var.ptr_ptr = *value;
- INIT_PZVAL(*Ts[result->u.var].var.ptr_ptr);
- } else {
- Ts[result->u.var].var.ptr_ptr = &value;
- PZVAL_LOCK(*Ts[result->u.var].var.ptr_ptr);
- }
- AI_USE_PTR(Ts[result->u.var].var);
- }
-
- set_overloaded_property(&Ts[op1->u.var], value TSRMLS_CC);
-
- if (!return_value_used && type == IS_TMP_VAR) {
- zval_dtor(value);
- }
- return;
- break;
- }
- case IS_STRING_OFFSET: {
- temp_variable *T = &Ts[op1->u.var];
-
- if (T->EA.data.str_offset.str->type == IS_STRING) do {
- zval tmp;
- zval *final_value = value;
-
- if ((T->EA.data.str_offset.offset < 0)) {
- zend_error(E_WARNING, "Illegal string offset: %d", T->EA.data.str_offset.offset);
- break;
- }
- if (T->EA.data.str_offset.offset >= T->EA.data.str_offset.str->value.str.len) {
- int i;
-
- if (T->EA.data.str_offset.str->value.str.len==0) {
- STR_FREE(T->EA.data.str_offset.str->value.str.val);
- T->EA.data.str_offset.str->value.str.val = (char *) emalloc(T->EA.data.str_offset.offset+1+1);
- } else {
- T->EA.data.str_offset.str->value.str.val = (char *) erealloc(T->EA.data.str_offset.str->value.str.val, T->EA.data.str_offset.offset+1+1);
- }
- for (i=T->EA.data.str_offset.str->value.str.len; i<T->EA.data.str_offset.offset; i++) {
- T->EA.data.str_offset.str->value.str.val[i] = ' ';
- }
- T->EA.data.str_offset.str->value.str.val[T->EA.data.str_offset.offset+1] = 0;
- T->EA.data.str_offset.str->value.str.len = T->EA.data.str_offset.offset+1;
- }
-
- if (value->type!=IS_STRING) {
- tmp = *value;
- if (op2 && op2->op_type == IS_VAR) {
- zval_copy_ctor(&tmp);
- }
- convert_to_string(&tmp);
- final_value = &tmp;
- }
-
- T->EA.data.str_offset.str->value.str.val[T->EA.data.str_offset.offset] = final_value->value.str.val[0];
- if (op2
- && op2->op_type == IS_VAR
- && value==&Ts[op2->u.var].tmp_var) {
- STR_FREE(value->value.str.val);
- }
- if (final_value == &tmp) {
- zval_dtor(final_value);
- }
- /*
- * the value of an assignment to a string offset is undefined
- Ts[result->u.var].var = &T->EA.data.str_offset.str;
- */
- } while(0);
- /* zval_ptr_dtor(&T->EA.data.str_offset.str); Nuke this line if it doesn't cause a leak */
- T->tmp_var.type = IS_STRING;
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- Ts[result->u.var].var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*Ts[result->u.var].var.ptr_ptr, result);
- AI_USE_PTR(Ts[result->u.var].var);
- return;
- }
-
- variable_ptr = *variable_ptr_ptr;
-
- if (variable_ptr == EG(error_zval_ptr)) {
- if (result) {
- Ts[result->u.var].var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*Ts[result->u.var].var.ptr_ptr, result);
- AI_USE_PTR(Ts[result->u.var].var);
- }
- if (type==IS_TMP_VAR) {
- zval_dtor(value);
- }
- return;
- }
-
- if (PZVAL_IS_REF(variable_ptr)) {
- if (variable_ptr!=value) {
- short refcount=variable_ptr->refcount;
- zval garbage;
-
- if (type!=IS_TMP_VAR) {
- value->refcount++;
- }
- garbage = *variable_ptr;
- *variable_ptr = *value;
- variable_ptr->refcount = refcount;
- variable_ptr->is_ref = 1;
- if (type!=IS_TMP_VAR) {
- zendi_zval_copy_ctor(*variable_ptr);
- value->refcount--;
- }
- zendi_zval_dtor(garbage);
- }
- } else {
- variable_ptr->refcount--;
- if (variable_ptr->refcount==0) {
- switch (type) {
- case IS_VAR:
- /* break missing intentionally */
- case IS_CONST:
- if (variable_ptr==value) {
- variable_ptr->refcount++;
- } else if (PZVAL_IS_REF(value)) {
- zval tmp;
-
- tmp = *value;
- zval_copy_ctor(&tmp);
- tmp.refcount=1;
- zendi_zval_dtor(*variable_ptr);
- *variable_ptr = tmp;
- } else {
- value->refcount++;
- zendi_zval_dtor(*variable_ptr);
- safe_free_zval_ptr(variable_ptr);
- *variable_ptr_ptr = value;
- }
- break;
- case IS_TMP_VAR:
- zendi_zval_dtor(*variable_ptr);
- value->refcount=1;
- *variable_ptr = *value;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- } else { /* we need to split */
- switch (type) {
- case IS_VAR:
- /* break missing intentionally */
- case IS_CONST:
- if (PZVAL_IS_REF(value) && value->refcount > 0) {
- ALLOC_ZVAL(variable_ptr);
- *variable_ptr_ptr = variable_ptr;
- *variable_ptr = *value;
- zval_copy_ctor(variable_ptr);
- variable_ptr->refcount=1;
- break;
- }
- *variable_ptr_ptr = value;
- value->refcount++;
- break;
- case IS_TMP_VAR:
- ALLOC_ZVAL(*variable_ptr_ptr);
- value->refcount=1;
- **variable_ptr_ptr = *value;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- }
- (*variable_ptr_ptr)->is_ref=0;
- }
- if (result) {
- Ts[result->u.var].var.ptr_ptr = variable_ptr_ptr;
- SELECTIVE_PZVAL_LOCK(*variable_ptr_ptr, result);
- AI_USE_PTR(Ts[result->u.var].var);
- }
-}
-
-
-/* Utility Functions for Extensions */
-static void zend_extension_statement_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->statement_handler) {
- extension->statement_handler(op_array);
- }
-}
-
-
-static void zend_extension_fcall_begin_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->fcall_begin_handler) {
- extension->fcall_begin_handler(op_array);
- }
-}
-
-
-static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->fcall_end_handler) {
- extension->fcall_end_handler(op_array);
- }
-}
-
-
-static void print_refcount(zval *p, char *str)
-{
- print_refcount(NULL, NULL);
-}
-
-
-static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type TSRMLS_DC)
-{
- int free_op1;
- zval *varname = get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R);
- zval **retval;
- zval tmp_varname;
- HashTable *target_symbol_table=0;
-
- switch (opline->extended_value) {
- case ZEND_FETCH_LOCAL:
- target_symbol_table = EG(active_symbol_table);
- break;
- case ZEND_FETCH_GLOBAL:
- if (opline->op1.op_type == IS_VAR) {
- PZVAL_LOCK(varname);
- }
- target_symbol_table = &EG(symbol_table);
- break;
- case ZEND_FETCH_STATIC:
- if (!EG(active_op_array)->static_variables) {
- ALLOC_HASHTABLE(EG(active_op_array)->static_variables);
- zend_hash_init(EG(active_op_array)->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
- }
- target_symbol_table = EG(active_op_array)->static_variables;
- break;
- case ZEND_FETCH_STATIC_MEMBER:
- target_symbol_table = &Ts[opline->op2.u.var].EA.class_entry->static_members;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
-
- if (varname->type != IS_STRING) {
- tmp_varname = *varname;
- zval_copy_ctor(&tmp_varname);
- convert_to_string(&tmp_varname);
- varname = &tmp_varname;
- }
- if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &retval) == FAILURE) {
- switch (type) {
- case BP_VAR_R:
- zend_error(E_NOTICE,"Undefined variable: %s", varname->value.str.val);
- /* break missing intentionally */
- case BP_VAR_IS:
- retval = &EG(uninitialized_zval_ptr);
- break;
- case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined variable: %s", varname->value.str.val);
- /* break missing intentionally */
- case BP_VAR_W: {
- zval *new_zval = &EG(uninitialized_zval);
-
- new_zval->refcount++;
- zend_hash_update(target_symbol_table, varname->value.str.val, varname->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- }
- if (opline->extended_value == ZEND_FETCH_LOCAL) {
- FREE_OP(Ts, &opline->op1, free_op1);
- } else if (opline->extended_value == ZEND_FETCH_STATIC || opline->extended_value == ZEND_FETCH_STATIC_MEMBER) {
- zval_update_constant(retval, (void *) 1 TSRMLS_CC);
- }
-
- if (varname == &tmp_varname) {
- zval_dtor(varname);
- }
- Ts[opline->result.u.var].var.ptr_ptr = retval;
- SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
-}
-
-
-static inline zval **zend_fetch_dimension_address_inner(HashTable *ht, znode *op2, temp_variable *Ts, int type TSRMLS_DC)
-{
- zval *dim = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- zval **retval;
- char *offset_key;
- int offset_key_length;
-
- switch (dim->type) {
- case IS_NULL:
- offset_key = "";
- offset_key_length = 0;
- goto fetch_string_dim;
- case IS_STRING:
- offset_key = dim->value.str.val;
- offset_key_length = dim->value.str.len;
-
-fetch_string_dim:
- if (zend_hash_find(ht, offset_key, offset_key_length+1, (void **) &retval) == FAILURE) {
- switch (type) {
- case BP_VAR_R:
- zend_error(E_NOTICE,"Undefined index: %s", offset_key);
- /* break missing intentionally */
- case BP_VAR_IS:
- retval = &EG(uninitialized_zval_ptr);
- break;
- case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined index: %s", offset_key);
- /* break missing intentionally */
- case BP_VAR_W: {
- zval *new_zval = &EG(uninitialized_zval);
-
- new_zval->refcount++;
- zend_hash_update(ht, offset_key, offset_key_length+1, &new_zval, sizeof(zval *), (void **) &retval);
- }
- break;
- }
- }
- break;
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG: {
- long index;
-
- if (dim->type == IS_DOUBLE) {
- index = (long)dim->value.dval;
- } else {
- index = dim->value.lval;
- }
- if (zend_hash_index_find(ht, index, (void **) &retval) == FAILURE) {
- switch (type) {
- case BP_VAR_R:
- zend_error(E_NOTICE,"Undefined offset: %d", index);
- /* break missing intentionally */
- case BP_VAR_IS:
- retval = &EG(uninitialized_zval_ptr);
- break;
- case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined offset: %d", index);
- /* break missing intentionally */
- case BP_VAR_W: {
- zval *new_zval = &EG(uninitialized_zval);
-
- new_zval->refcount++;
- zend_hash_index_update(ht, index, &new_zval, sizeof(zval *), (void **) &retval);
- }
- break;
- }
- }
- }
- break;
- default:
- zend_error(E_WARNING, "Illegal offset type");
- if (type == BP_VAR_R || type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval_ptr);
- } else {
- retval = &EG(error_zval_ptr);
- }
- break;
- }
- FREE_OP(Ts, op2, EG(free_op2));
- return retval;
-}
-
-static void fetch_overloaded_element(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type, zval ***retval, int overloaded_element_type TSRMLS_DC)
-{
- zend_overloaded_element overloaded_element;
-
- if (Ts[op1->u.var].EA.type == IS_STRING_OFFSET) {
- get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- *retval = &EG(uninitialized_zval_ptr);
- break;
- case BP_VAR_W:
- case BP_VAR_RW:
- *retval = &EG(error_zval_ptr);
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- SELECTIVE_PZVAL_LOCK(**retval, result);
- return;
- }
-
- overloaded_element.element = *get_zval_ptr(op2, Ts, &EG(free_op2), type);
- overloaded_element.type = overloaded_element_type;
- if (!EG(free_op2)) {
- zval_copy_ctor(&overloaded_element.element);
- }
-
- Ts[result->u.var].EA = Ts[op1->u.var].EA;
- zend_llist_add_element(Ts[result->u.var].EA.data.overloaded_element.elements_list, &overloaded_element);
-
- Ts[result->u.var].EA.type = IS_OVERLOADED_OBJECT;
- *retval = NULL;
- return;
-}
-
-
-static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC)
-{
- zval **container_ptr = get_zval_ptr_ptr(op1, Ts, type);
- zval *container;
- zval ***retval = &Ts[result->u.var].var.ptr_ptr;
-
-
- if (container_ptr == NULL) {
- fetch_overloaded_element(result, op1, op2, Ts, type, retval, OE_IS_ARRAY TSRMLS_CC);
- return;
- }
-
- container = *container_ptr;
-
- if (container == EG(error_zval_ptr)) {
- *retval = &EG(error_zval_ptr);
- SELECTIVE_PZVAL_LOCK(**retval, result);
- return;
- }
-
- if (container->type==IS_NULL
- || (container->type==IS_BOOL && container->value.lval==0)
- || (container->type==IS_STRING && container->value.str.len==0)) {
- switch (type) {
- case BP_VAR_RW:
- case BP_VAR_W:
- if (!PZVAL_IS_REF(container)) {
- SEPARATE_ZVAL(container_ptr);
- container = *container_ptr;
- }
- array_init(container);
- break;
- }
- }
-
- switch (container->type) {
- case IS_ARRAY:
- if ((type==BP_VAR_W || type==BP_VAR_RW) && container->refcount>1 && !PZVAL_IS_REF(container)) {
- SEPARATE_ZVAL(container_ptr);
- container = *container_ptr;
- }
- if (op2->op_type == IS_UNUSED) {
- zval *new_zval = &EG(uninitialized_zval);
-
- new_zval->refcount++;
- zend_hash_next_index_insert(container->value.ht, &new_zval, sizeof(zval *), (void **) retval);
- } else {
- *retval = zend_fetch_dimension_address_inner(container->value.ht, op2, Ts, type TSRMLS_CC);
- }
- SELECTIVE_PZVAL_LOCK(**retval, result);
- break;
- case IS_NULL:
- /* for read-mode only */
- get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- *retval = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(**retval, result);
- FREE_OP(Ts, op2, EG(free_op2));
- if (type==BP_VAR_W || type==BP_VAR_RW) {
- zend_error(E_WARNING, "Cannot use a NULL value as an array");
- }
- break;
- case IS_STRING: {
- zval *offset;
- zval tmp;
-
- if (op2->op_type==IS_UNUSED) {
- zend_error(E_ERROR, "[] operator not supported for strings");
- }
-
- offset = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
-
- if (offset->type != IS_LONG) {
- tmp = *offset;
- zval_copy_ctor(&tmp);
- convert_to_long(&tmp);
- offset = &tmp;
- }
- if (type!=BP_VAR_R && type!=BP_VAR_IS) {
- SEPARATE_ZVAL_IF_NOT_REF(container_ptr);
- }
- container = *container_ptr;
- Ts[result->u.var].EA.data.str_offset.str = container;
- PZVAL_LOCK(container);
- Ts[result->u.var].EA.data.str_offset.offset = offset->value.lval;
- Ts[result->u.var].EA.type = IS_STRING_OFFSET;
- FREE_OP(Ts, op2, EG(free_op2));
- *retval = NULL;
- return;
- }
- break;
- default: {
- zval *offset;
-
- offset = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- if (type==BP_VAR_R || type==BP_VAR_IS) {
- *retval = &EG(uninitialized_zval_ptr);
- } else {
- *retval = &EG(error_zval_ptr);
- }
- FREE_OP(Ts, op2, EG(free_op2));
- SELECTIVE_PZVAL_LOCK(**retval, result);
- if (type==BP_VAR_W || type==BP_VAR_RW) {
- zend_error(E_WARNING, "Cannot use a scalar value as an array");
- }
- }
- break;
- }
-}
-
-
-static void zend_fetch_dimension_address_from_tmp_var(znode *result, znode *op1, znode *op2, temp_variable *Ts TSRMLS_DC)
-{
- int free_op1;
- zval *container = get_zval_ptr(op1, Ts, &free_op1, BP_VAR_R);
-
- if (container->type != IS_ARRAY) {
- Ts[result->u.var].var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*Ts[result->u.var].var.ptr_ptr, result);
- return;
- }
-
- Ts[result->u.var].var.ptr_ptr = zend_fetch_dimension_address_inner(container->value.ht, op2, Ts, BP_VAR_R TSRMLS_CC);
- SELECTIVE_PZVAL_LOCK(*Ts[result->u.var].var.ptr_ptr, result);
-}
-
-
-static void zend_fetch_property_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC)
-{
- zval **container_ptr = get_zval_ptr_ptr(op1, Ts, type);
- zval *container;
- zval ***retval = &Ts[result->u.var].var.ptr_ptr;
-
-
- if (container_ptr == NULL) {
- fetch_overloaded_element(result, op1, op2, Ts, type, retval, OE_IS_OBJECT TSRMLS_CC);
- return;
- }
-
- container = *container_ptr;
- if (container == EG(error_zval_ptr)) {
- *retval = &EG(error_zval_ptr);
- SELECTIVE_PZVAL_LOCK(**retval, result);
- return;
- }
-
- if (container->type == IS_OBJECT &&
- ((type == BP_VAR_W && Z_OBJCE_P(container)->handle_property_set) ||
- (type != BP_VAR_W && Z_OBJCE_P(container)->handle_property_get))) {
- zend_overloaded_element overloaded_element;
-
- Ts[result->u.var].EA.data.overloaded_element.object = container;
- Ts[result->u.var].EA.data.overloaded_element.type = type;
- Ts[result->u.var].EA.data.overloaded_element.elements_list = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(Ts[result->u.var].EA.data.overloaded_element.elements_list, sizeof(zend_overloaded_element), NULL, 0);
- overloaded_element.element = *get_zval_ptr(op2, Ts, &EG(free_op2), type);
- overloaded_element.type = OE_IS_OBJECT;
- if (!EG(free_op2)) {
- zval_copy_ctor(&overloaded_element.element);
- }
- zend_llist_add_element(Ts[result->u.var].EA.data.overloaded_element.elements_list, &overloaded_element);
- Ts[result->u.var].EA.type = IS_OVERLOADED_OBJECT;
- *retval = NULL;
- return;
- }
-
-
- if (container->type==IS_NULL
- || (container->type==IS_BOOL && container->value.lval==0)
- || (container->type==IS_STRING && container->value.str.len==0)) {
- switch (type) {
- case BP_VAR_RW:
- case BP_VAR_W:
- if (!PZVAL_IS_REF(container)) {
- SEPARATE_ZVAL(container_ptr);
- container = *container_ptr;
- }
- object_init(container);
- break;
- }
- }
-
- if (container->type != IS_OBJECT) {
- zval *offset;
-
- offset = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
- FREE_OP(Ts, op2, EG(free_op2));
- if (type==BP_VAR_R || type==BP_VAR_IS) {
- *retval = &EG(uninitialized_zval_ptr);
- } else {
- *retval = &EG(error_zval_ptr);
- }
- SELECTIVE_PZVAL_LOCK(**retval, result);
- return;
- }
-
-
- if ((type==BP_VAR_W || type==BP_VAR_RW) && container->refcount>1 && !PZVAL_IS_REF(container)) {
- SEPARATE_ZVAL(container_ptr);
- container = *container_ptr;
- }
- *retval = zend_fetch_property_address_inner(Z_OBJPROP_P(container), op2, Ts, type TSRMLS_CC);
- SELECTIVE_PZVAL_LOCK(**retval, result);
-}
-
-
-static zval get_overloaded_property(temp_variable *T TSRMLS_DC)
-{
- zval result;
-
- result = Z_OBJCE_P(T->EA.data.overloaded_element.object)->handle_property_get(&T->EA.data.overloaded_element);
-
- zend_llist_destroy(T->EA.data.overloaded_element.elements_list);
- efree(T->EA.data.overloaded_element.elements_list);
- return result;
-}
-
-
-static void set_overloaded_property(temp_variable *T, zval *value TSRMLS_DC)
-{
- zend_class_entry *ce;
-
- ce = Z_OBJCE_P(T->EA.data.overloaded_element.object);
- if (ce->handle_property_set) {
- ce->handle_property_set(&T->EA.data.overloaded_element, value);
- } else {
- zend_error(E_ERROR, "Class '%s' does not support setting overloaded properties", ce->name);
- }
- zend_llist_destroy(T->EA.data.overloaded_element.elements_list);
- efree(T->EA.data.overloaded_element.elements_list);
-}
-
-
-static void call_overloaded_function(temp_variable *T, int arg_count, zval *return_value TSRMLS_DC)
-{
- zend_class_entry *ce;
-
- ce = Z_OBJCE_P(T->EA.data.overloaded_element.object);
- if (ce->handle_function_call) {
- ce->handle_function_call(arg_count, return_value, T->EA.data.overloaded_element.object, 1 TSRMLS_CC, &T->EA.data.overloaded_element);
- } else {
- zend_error(E_ERROR, "Class '%s' does not support overloaded method calls", ce->name);
- }
- zend_llist_destroy(T->EA.data.overloaded_element.elements_list);
- efree(T->EA.data.overloaded_element.elements_list);
-}
-
-
-#if ZEND_INTENSIVE_DEBUGGING
-
-#define CHECK_SYMBOL_TABLES() \
- zend_hash_apply(&EG(symbol_table), (apply_func_t) zend_check_symbol TSRMLS_CC); \
- if (&EG(symbol_table)!=EG(active_symbol_table)) { \
- zend_hash_apply(EG(active_symbol_table), (apply_func_t) zend_check_symbol TSRMLS_CC); \
- }
-
-static int zend_check_symbol(zval **pz TSRMLS_DC)
-{
- if (Z_TYPE_PP(pz) > 9) {
- fprintf(stderr, "Warning! %x has invalid type!\n", *pz);
- } else if (Z_TYPE_PP(pz) == IS_ARRAY) {
- zend_hash_apply(Z_ARRVAL_PP(pz), (apply_func_t) zend_check_symbol TSRMLS_CC);
- } else if (Z_TYPE_PP(pz) == IS_OBJECT) {
- zend_hash_apply(Z_OBJPROP_PP(pz), (apply_func_t) zend_check_symbol TSRMLS_CC);
- }
-
- return 0;
-}
-
-
-#else
-#define CHECK_SYMBOL_TABLES()
-#endif
-
-#define NEXT_OPCODE() \
- CHECK_SYMBOL_TABLES() \
- EX(opline)++; \
- continue;
-
-#define RETURN_FROM_EXECUTE_LOOP(execute_data) \
- free_alloca(EX(Ts)); \
- EG(in_execution) = EX(original_in_execution); \
- return;
-
-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_class_entry *calling_namespace;
-} 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;
-
- /* Initialize execute_data */
- EX(fbc) = NULL;
- EX(object).ptr = NULL;
- EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable)*op_array->T);
- EX(original_in_execution)=EG(in_execution);
-
- EG(in_execution) = 1;
- if (op_array->start_op) {
- EX(opline) = op_array->start_op;
- } else {
- EX(opline) = op_array->opcodes;
- }
-
- EG(opline_ptr) = &EX(opline);
-
- EX(function_state).function = (zend_function *) op_array;
- EG(function_state_ptr) = &EX(function_state);
-#if ZEND_DEBUG
- /* function_state.function_symbol_table is saved as-is to a stack,
- * which is an intentional UMR. Shut it up if we're in DEBUG.
- */
- EX(function_state).function_symbol_table = NULL;
-#endif
-
- if (op_array->uses_globals) {
- zval *globals;
-
- ALLOC_ZVAL(globals);
- globals->refcount=1;
- globals->is_ref=1;
- globals->type = IS_ARRAY;
- globals->value.ht = &EG(symbol_table);
- if (zend_hash_add(EG(active_symbol_table), "GLOBALS", sizeof("GLOBALS"), &globals, sizeof(zval *), NULL)==FAILURE) {
- FREE_ZVAL(globals);
- }
- }
-
- while (1) {
-#ifdef ZEND_WIN32
- if (EG(timed_out)) {
- zend_timeout(0);
- }
-#endif
-
- zend_clean_garbage(TSRMLS_C);
-
- switch(EX(opline)->opcode) {
- case ZEND_ADD:
- EG(binary_op) = add_function;
- goto binary_op_addr;
- case ZEND_SUB:
- EG(binary_op) = sub_function;
- goto binary_op_addr;
- case ZEND_MUL:
- EG(binary_op) = mul_function;
- goto binary_op_addr;
- case ZEND_DIV:
- EG(binary_op) = div_function;
- goto binary_op_addr;
- case ZEND_MOD:
- EG(binary_op) = mod_function;
- goto binary_op_addr;
- case ZEND_SL:
- EG(binary_op) = shift_left_function;
- goto binary_op_addr;
- case ZEND_SR:
- EG(binary_op) = shift_right_function;
- goto binary_op_addr;
- case ZEND_CONCAT:
- EG(binary_op) = concat_function;
- goto binary_op_addr;
- case ZEND_IS_IDENTICAL:
- EG(binary_op) = is_identical_function;
- goto binary_op_addr;
- case ZEND_IS_NOT_IDENTICAL:
- EG(binary_op) = is_not_identical_function;
- goto binary_op_addr;
- case ZEND_IS_EQUAL:
- EG(binary_op) = is_equal_function;
- goto binary_op_addr;
- case ZEND_IS_NOT_EQUAL:
- EG(binary_op) = is_not_equal_function;
- goto binary_op_addr;
- case ZEND_IS_SMALLER:
- EG(binary_op) = is_smaller_function;
- goto binary_op_addr;
- case ZEND_IS_SMALLER_OR_EQUAL:
- EG(binary_op) = is_smaller_or_equal_function;
- goto binary_op_addr;
- case ZEND_BW_OR:
- EG(binary_op) = bitwise_or_function;
- goto binary_op_addr;
- case ZEND_BW_AND:
- EG(binary_op) = bitwise_and_function;
- goto binary_op_addr;
- case ZEND_BW_XOR:
- EG(binary_op) = bitwise_xor_function;
- goto binary_op_addr;
- case ZEND_BOOL_XOR:
- EG(binary_op) = boolean_xor_function;
- /* Fall through */
-binary_op_addr:
- EG(binary_op)(&EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R),
- get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R) TSRMLS_CC);
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- NEXT_OPCODE();
- case ZEND_BW_NOT:
- case ZEND_BOOL_NOT:
- EG(unary_op) = get_unary_op(EX(opline)->opcode);
- EG(unary_op)(&EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R) );
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- NEXT_OPCODE();
- case ZEND_ASSIGN_ADD:
- EG(binary_op) = add_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_SUB:
- EG(binary_op) = sub_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_MUL:
- EG(binary_op) = mul_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_DIV:
- EG(binary_op) = div_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_MOD:
- EG(binary_op) = mod_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_SL:
- EG(binary_op) = shift_left_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_SR:
- EG(binary_op) = shift_right_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_CONCAT:
- EG(binary_op) = concat_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_BW_OR:
- EG(binary_op) = bitwise_or_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_BW_AND:
- EG(binary_op) = bitwise_and_function;
- goto binary_assign_op_addr;
- case ZEND_ASSIGN_BW_XOR:
- EG(binary_op) = bitwise_xor_function;
- /* Fall through */
-binary_assign_op_addr: {
- zval **var_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_RW);
-
- if (!var_ptr) {
- zend_error(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
- }
- if (*var_ptr == EG(error_zval_ptr)) {
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr, &EX(opline)->result);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- EX(opline)++;
- continue;
- }
-
- SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
-
- EG(binary_op)(*var_ptr, *var_ptr, get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R) TSRMLS_CC);
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = var_ptr;
- SELECTIVE_PZVAL_LOCK(*var_ptr, &EX(opline)->result);
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- }
- NEXT_OPCODE();
- case ZEND_PRE_INC:
- case ZEND_PRE_DEC:
- case ZEND_POST_INC:
- case ZEND_POST_DEC: {
- int (*incdec_op)(zval *op);
- zval **var_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_RW);
-
- if (!var_ptr) {
- zend_error(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
- }
- if (*var_ptr == EG(error_zval_ptr)) {
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr, &EX(opline)->result);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- EX(opline)++;
- continue;
- }
-
- get_incdec_op(incdec_op, EX(opline)->opcode);
-
- switch (EX(opline)->opcode) {
- case ZEND_POST_INC:
- case ZEND_POST_DEC:
- EX(Ts)[EX(opline)->result.u.var].tmp_var = **var_ptr;
- zendi_zval_copy_ctor(EX(Ts)[EX(opline)->result.u.var].tmp_var);
- break;
- }
-
- SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
-
- incdec_op(*var_ptr);
- switch (EX(opline)->opcode) {
- case ZEND_PRE_INC:
- case ZEND_PRE_DEC:
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = var_ptr;
- SELECTIVE_PZVAL_LOCK(*var_ptr, &EX(opline)->result);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- break;
- }
- }
- NEXT_OPCODE();
- case ZEND_PRINT:
- zend_print_variable(get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R));
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = 1;
- EX(Ts)[EX(opline)->result.u.var].tmp_var.type = IS_LONG;
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- NEXT_OPCODE();
- case ZEND_ECHO:
- zend_print_variable(get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R));
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- NEXT_OPCODE();
- case ZEND_FETCH_R:
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_W:
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_W TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_RW:
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_RW TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_FUNC_ARG:
- if (ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->extended_value, EX(fbc), EX(fbc)->common.arg_types)) {
- /* Behave like FETCH_W */
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_W TSRMLS_CC);
- } else {
- /* Behave like FETCH_R */
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- }
- NEXT_OPCODE();
- case ZEND_FETCH_UNSET:
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
- PZVAL_UNLOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- if (EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
- SEPARATE_ZVAL_IF_NOT_REF(EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- }
- PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- NEXT_OPCODE();
- case ZEND_FETCH_IS:
- zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_IS TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_R:
- if (EX(opline)->extended_value == ZEND_FETCH_ADD_LOCK) {
- PZVAL_LOCK(*EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr);
- }
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_W:
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_RW:
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_RW TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_IS:
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_IS TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_FUNC_ARG:
- if (ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->extended_value, EX(fbc), EX(fbc)->common.arg_types)) {
- /* Behave like FETCH_DIM_W */
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
- } else {
- /* Behave like FETCH_DIM_R, except for locking used for list() */
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- }
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_UNSET:
- /* Not needed in DIM_UNSET
- if (EX(opline)->extended_value == ZEND_FETCH_ADD_LOCK) {
- PZVAL_LOCK(*EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr);
- }
- */
- zend_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
- PZVAL_UNLOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- if (EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
- SEPARATE_ZVAL_IF_NOT_REF(EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- }
- PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_R:
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_W:
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_RW:
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_RW TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_IS:
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_IS TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_FUNC_ARG:
- if (ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->extended_value, EX(fbc), EX(fbc)->common.arg_types)) {
- /* Behave like FETCH_OBJ_W */
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
- } else {
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- }
- NEXT_OPCODE();
- case ZEND_FETCH_OBJ_UNSET:
- zend_fetch_property_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
-
- PZVAL_UNLOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- if (EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
- SEPARATE_ZVAL_IF_NOT_REF(EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- }
- PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- NEXT_OPCODE();
- case ZEND_FETCH_DIM_TMP_VAR:
- zend_fetch_dimension_address_from_tmp_var(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts) TSRMLS_CC);
- AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
- NEXT_OPCODE();
- case ZEND_ASSIGN: {
- zval *value;
- value = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
-
- zend_assign_to_variable(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, value, (EG(free_op2)?IS_TMP_VAR:EX(opline)->op2.op_type), EX(Ts) TSRMLS_CC);
- /* zend_assign_to_variable() always takes care of op2, never free it! */
- }
- NEXT_OPCODE();
- case ZEND_ASSIGN_REF:
- zend_assign_to_variable_reference(&EX(opline)->result, get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_W), get_zval_ptr_ptr(&EX(opline)->op2, EX(Ts), BP_VAR_W), EX(Ts) TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_JMP:
-#if DEBUG_ZEND>=2
- printf("Jumping to %d\n", EX(opline)->op1.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op1.u.opline_num];
- continue;
- break;
- case ZEND_JMPZ: {
- znode *op1 = &EX(opline)->op1;
-
- if (!i_zend_is_true(get_zval_ptr(op1, EX(Ts), &EG(free_op1), BP_VAR_R))) {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- FREE_OP(EX(Ts), op1, EG(free_op1));
- continue;
- }
- FREE_OP(EX(Ts), op1, EG(free_op1));
- }
- NEXT_OPCODE();
- case ZEND_JMPNZ: {
- znode *op1 = &EX(opline)->op1;
-
- if (zend_is_true(get_zval_ptr(op1, EX(Ts), &EG(free_op1), BP_VAR_R))) {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- FREE_OP(EX(Ts), op1, EG(free_op1));
- continue;
- }
- FREE_OP(EX(Ts), op1, EG(free_op1));
- }
- NEXT_OPCODE();
- case ZEND_JMPZNZ: {
- znode *res = &EX(opline)->op1;
-
- if (zend_is_true(get_zval_ptr(res, EX(Ts), &EG(free_op1), BP_VAR_R))) {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp on true to %d\n", EX(opline)->extended_value);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->extended_value];
- } else {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp on false to %d\n", EX(opline)->op2.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- }
- FREE_OP(EX(Ts), res, EG(free_op1));
- }
- continue;
- break;
- case ZEND_JMPZ_EX: {
- zend_op *original_opline = EX(opline);
- int retval = zend_is_true(get_zval_ptr(&original_opline->op1, EX(Ts), &EG(free_op1), BP_VAR_R));
-
- FREE_OP(EX(Ts), &original_opline->op1, EG(free_op1));
- EX(Ts)[original_opline->result.u.var].tmp_var.value.lval = retval;
- EX(Ts)[original_opline->result.u.var].tmp_var.type = IS_BOOL;
- if (!retval) {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- continue;
- }
- }
- NEXT_OPCODE();
- case ZEND_JMPNZ_EX: {
- zend_op *original_opline = EX(opline);
- int retval = zend_is_true(get_zval_ptr(&original_opline->op1, EX(Ts), &EG(free_op1), BP_VAR_R));
-
- FREE_OP(EX(Ts), &original_opline->op1, EG(free_op1));
- EX(Ts)[original_opline->result.u.var].tmp_var.value.lval = retval;
- EX(Ts)[original_opline->result.u.var].tmp_var.type = IS_BOOL;
- if (retval) {
-#if DEBUG_ZEND>=2
- printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
-#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- continue;
- }
- }
- NEXT_OPCODE();
- case ZEND_FREE:
- zendi_zval_dtor(EX(Ts)[EX(opline)->op1.u.var].tmp_var);
- NEXT_OPCODE();
- case ZEND_INIT_STRING:
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.str.val = emalloc(1);
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.str.val[0] = 0;
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.str.len = 0;
- EX(Ts)[EX(opline)->result.u.var].tmp_var.refcount = 1;
- NEXT_OPCODE();
- case ZEND_ADD_CHAR:
- add_char_to_string( &EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_NA),
- &EX(opline)->op2.u.constant);
- /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
- NEXT_OPCODE();
- case ZEND_ADD_STRING:
- add_string_to_string( &EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_NA),
- &EX(opline)->op2.u.constant);
- /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
- NEXT_OPCODE();
- case ZEND_ADD_VAR: {
- zval *var = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
- zval var_copy;
- int use_copy;
-
- zend_make_printable_zval(var, &var_copy, &use_copy);
- if (use_copy) {
- var = &var_copy;
- }
- add_string_to_string( &EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_NA),
- var);
- if (use_copy) {
- zval_dtor(var);
- }
- /* original comment, possibly problematic:
- * FREE_OP is missing intentionally here - we're always working on the same temporary variable
- * (Zeev): I don't think it's problematic, we only use variables
- * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
- * string offsets or overloaded objects
- */
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- }
- NEXT_OPCODE();
- case ZEND_FETCH_CLASS:
- {
- if (EX(opline)->op1.op_type == IS_UNUSED) {
- zval tmp;
- zval *class_name;
-
- if (EX(opline)->extended_value == ZEND_FETCH_CLASS_SELF) {
- if (!EG(namespace)) {
- zend_error(E_ERROR, "Cannot fetch self:: when no class scope is active");
- }
- EX(Ts)[EX(opline)->result.u.var].EA.class_entry = EG(namespace);
- NEXT_OPCODE();
- }
-
- class_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
-
- if (class_name->type != IS_STRING) {
- tmp = *class_name;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- class_name = &tmp;
- zend_str_tolower(tmp.value.str.val, tmp.value.str.len);
- }
-
- if (zend_hash_find(EG(class_table), class_name->value.str.val, class_name->value.str.len+1, &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
- zend_error(E_ERROR, "Class '%s' not found", class_name->value.str.val);
- }
- if (class_name == &tmp) {
- zval_dtor(&tmp);
- }
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- } else {
- if (zend_hash_find(&EX(Ts)[EX(opline)->op1.u.var].EA.class_entry->class_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
- zend_error(E_ERROR, "Class '%s' not found", EX(opline)->op2.u.constant.value.str.val);
- }
- }
- NEXT_OPCODE();
- }
- case ZEND_INIT_FCALL_BY_NAME: {
- zval *function_name;
- zend_function *function;
- HashTable *active_function_table;
- zval tmp;
-
- zend_ptr_stack_n_push(&EG(arg_types_stack), 2, EX(fbc), EX(object).ptr);
- if (EX(opline)->extended_value & ZEND_CTOR_CALL) {
- /* constructor call */
-
- if (EX(opline)->op1.op_type == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr, &EX(opline)->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object).ptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- if (!PZVAL_IS_REF(EX(object).ptr)) {
- EX(object).ptr->refcount++; /* For $this pointer */
- } else {
- zval *this_ptr;
- ALLOC_ZVAL(this_ptr);
- *this_ptr = *EX(object).ptr;
- INIT_PZVAL(this_ptr);
- zval_copy_ctor(this_ptr);
- EX(object).ptr = this_ptr;
- }
- EX(fbc) = Z_OBJCE_P(EX(object).ptr)->constructor;
- NEXT_OPCODE();
- }
- function_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
-
- tmp = *function_name;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- function_name = &tmp;
- zend_str_tolower(tmp.value.str.val, tmp.value.str.len);
-
- EX(calling_namespace) = EG(namespace);
- if (EX(opline)->op1.op_type != IS_UNUSED) {
- if (EX(opline)->op1.op_type==IS_CONST) { /* used for class::function() */
- zval **object_ptr_ptr;
-
- if (zend_hash_find(EG(active_symbol_table), "this", sizeof("this"), (void **) &object_ptr_ptr)==FAILURE) {
- EX(object).ptr=NULL;
- } else {
- /* We assume that "this" is already is_ref and pointing to the object.
- If it isn't then tough */
- EX(object).ptr = *object_ptr_ptr;
- EX(object).ptr->refcount++; /* For this pointer */
- }
-
- {
- zend_class_entry *ce = EX(Ts)[EX(opline)->op1.u.var].EA.class_entry;
- active_function_table = &ce->function_table;
- EX(calling_namespace) = ce;
- }
- } else { /* used for member function calls */
- EX(object).ptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- if ((!EX(object).ptr && EX(Ts)[EX(opline)->op1.u.var].EA.type==IS_OVERLOADED_OBJECT)
- || ((EX(object).ptr && EX(object).ptr->type==IS_OBJECT) && Z_OBJCE_P(EX(object).ptr)->handle_function_call)) { /* overloaded function call */
- zend_overloaded_element overloaded_element;
-
- overloaded_element.element = *function_name;
- overloaded_element.type = OE_IS_METHOD;
-
- if (EX(object).ptr) {
- EX(Ts)[EX(opline)->op1.u.var].EA.data.overloaded_element.object = EX(object).ptr;
- EX(Ts)[EX(opline)->op1.u.var].EA.data.overloaded_element.type = BP_VAR_NA;
- EX(Ts)[EX(opline)->op1.u.var].EA.data.overloaded_element.elements_list = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(EX(Ts)[EX(opline)->op1.u.var].EA.data.overloaded_element.elements_list, sizeof(zend_overloaded_element), NULL, 0);
- }
- zend_llist_add_element(EX(Ts)[EX(opline)->op1.u.var].EA.data.overloaded_element.elements_list, &overloaded_element);
- EX(fbc) = (zend_function *) emalloc(sizeof(zend_function));
- EX(fbc)->type = ZEND_OVERLOADED_FUNCTION;
- EX(fbc)->common.arg_types = NULL;
- EX(fbc)->overloaded_function.var = EX(opline)->op1.u.var;
- goto overloaded_function_call_cont;
- }
-
- if (EX(object).ptr && EX(object).ptr->type == IS_OBJECT) {
- active_function_table = &Z_OBJCE_P(EX(object).ptr)->function_table;
- } else {
- zend_error(E_ERROR, "Call to a member function on a non-object");
- }
- if (!PZVAL_IS_REF(EX(object).ptr)) {
- EX(object).ptr->refcount++; /* For $this pointer */
- } else {
- zval *this_ptr;
- ALLOC_ZVAL(this_ptr);
- *this_ptr = *EX(object).ptr;
- INIT_PZVAL(this_ptr);
- zval_copy_ctor(this_ptr);
- EX(object).ptr = this_ptr;
- }
- active_function_table = &Z_OBJCE_P(EX(object).ptr)->function_table;
- EX(calling_namespace) = Z_OBJCE_P(EX(object).ptr);
- }
- if (zend_hash_find(active_function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function)==FAILURE) {
- zend_error(E_ERROR, "Call to undefined function: %s()", function_name->value.str.val);
- }
- } else { /* function pointer */
- EX(object).ptr = NULL;
- do {
- if (EG(namespace)) {
- if (zend_hash_find(&EG(namespace)->function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function) == SUCCESS) {
- break;
- }
- }
- if (zend_hash_find(EG(function_table), function_name->value.str.val, function_name->value.str.len+1, (void **) &function)==FAILURE) {
- zend_error(E_ERROR, "Call to undefined function: %s()", function_name->value.str.val);
- }
- EX(calling_namespace) = NULL;
- } while (0);
- }
-
- zval_dtor(&tmp);
- EX(fbc) = function;
-overloaded_function_call_cont:
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- }
- NEXT_OPCODE();
- case ZEND_DO_FCALL_BY_NAME:
- EX(function_state).function = EX(fbc);
- goto do_fcall_common;
- case ZEND_DO_FCALL: {
- zval *fname = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- if (zend_hash_find(EG(namespace)?&EG(namespace)->function_table:EG(function_table), fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) {
- zend_error(E_ERROR, "Unknown function: %s()\n", fname->value.str.val);
- }
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- zend_ptr_stack_push(&EG(arg_types_stack), EX(object).ptr);
- EX(object).ptr = NULL;
- goto do_fcall_common;
- }
-do_fcall_common:
- {
- zval **original_return_value;
- zend_class_entry *current_namespace;
- int return_value_used = RETURN_VALUE_USED(EX(opline));
-
- zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) EX(opline)->extended_value, NULL);
- current_namespace = EG(namespace);
- EG(namespace) = EX(calling_namespace);
-
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
-
- if (EX(function_state).function->type==ZEND_INTERNAL_FUNCTION) {
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- INIT_ZVAL(*(EX(Ts)[EX(opline)->result.u.var].var.ptr));
- ((zend_internal_function *) EX(function_state).function)->handler(EX(opline)->extended_value, EX(Ts)[EX(opline)->result.u.var].var.ptr, EX(object).ptr, return_value_used TSRMLS_CC);
- if (EX(object).ptr) {
- zval_ptr_dtor(&EX(object).ptr);
- }
- EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref = 0;
- EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount = 1;
- if (!return_value_used) {
- zval_ptr_dtor(&EX(Ts)[EX(opline)->result.u.var].var.ptr);
- }
- } else if (EX(function_state).function->type==ZEND_USER_FUNCTION) {
- HashTable *calling_symbol_table;
-
- EX(Ts)[EX(opline)->result.u.var].var.ptr = NULL;
- if (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
- /*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
- EX(function_state).function_symbol_table = *(EG(symtable_cache_ptr)--);
- } else {
- ALLOC_HASHTABLE(EX(function_state).function_symbol_table);
- zend_hash_init(EX(function_state).function_symbol_table, 0, NULL, ZVAL_PTR_DTOR, 0);
- /*printf("Cache miss! Initialized %x\n", function_state.function_symbol_table);*/
- }
- calling_symbol_table = EG(active_symbol_table);
- EG(active_symbol_table) = EX(function_state).function_symbol_table;
- if (EX(opline)->opcode==ZEND_DO_FCALL_BY_NAME
- && EX(object).ptr
- && EX(fbc)->type!=ZEND_OVERLOADED_FUNCTION) {
- zval **this_ptr;
- zval *null_ptr = NULL;
-
- zend_hash_update(EX(function_state).function_symbol_table, "this", sizeof("this"), &null_ptr, sizeof(zval *), (void **) &this_ptr);
- *this_ptr = EX(object).ptr;
- EX(object).ptr = NULL;
- }
- original_return_value = EG(return_value_ptr_ptr);
- EG(return_value_ptr_ptr) = EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr;
- EG(active_op_array) = (zend_op_array *) EX(function_state).function;
-
- zend_execute(EG(active_op_array) TSRMLS_CC);
-
- if (return_value_used && !EX(Ts)[EX(opline)->result.u.var].var.ptr) {
- if (!EG(exception)) {
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- INIT_ZVAL(*EX(Ts)[EX(opline)->result.u.var].var.ptr);
- }
- } else if (!return_value_used && EX(Ts)[EX(opline)->result.u.var].var.ptr) {
- zval_ptr_dtor(&EX(Ts)[EX(opline)->result.u.var].var.ptr);
- }
-
- EG(opline_ptr) = &EX(opline);
- EG(active_op_array) = op_array;
- EG(return_value_ptr_ptr)=original_return_value;
- if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) {
- zend_hash_destroy(EX(function_state).function_symbol_table);
- FREE_HASHTABLE(EX(function_state).function_symbol_table);
- } else {
- *(++EG(symtable_cache_ptr)) = EX(function_state).function_symbol_table;
- zend_hash_clean(*EG(symtable_cache_ptr));
- }
- EG(active_symbol_table) = calling_symbol_table;
- } else { /* ZEND_OVERLOADED_FUNCTION */
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- INIT_ZVAL(*(EX(Ts)[EX(opline)->result.u.var].var.ptr));
- call_overloaded_function(&EX(Ts)[EX(fbc)->overloaded_function.var], EX(opline)->extended_value, EX(Ts)[EX(opline)->result.u.var].var.ptr TSRMLS_CC);
- efree(EX(fbc));
- if (!return_value_used) {
- zval_ptr_dtor(&EX(Ts)[EX(opline)->result.u.var].var.ptr);
- }
- }
- if (EX(opline)->opcode == ZEND_DO_FCALL_BY_NAME) {
- zend_ptr_stack_n_pop(&EG(arg_types_stack), 2, &EX(object).ptr, &EX(fbc));
- } else {
- EX(object).ptr = zend_ptr_stack_pop(&EG(arg_types_stack));
- }
- EX(function_state).function = (zend_function *) op_array;
- EG(function_state_ptr) = &EX(function_state);
- zend_ptr_stack_clear_multiple(TSRMLS_C);
-
- EG(namespace) = current_namespace;
-
- if (EG(exception)) {
- if (EX(opline)->op2.u.opline_num == -1) {
- RETURN_FROM_EXECUTE_LOOP(execute_data);
- } else {
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- continue;
- }
- }
- }
- NEXT_OPCODE();
- case ZEND_RETURN: {
- zval *retval_ptr;
- zval **retval_ptr_ptr;
-
- if ((EG(active_op_array)->return_reference == ZEND_RETURN_REF) &&
- (EX(opline)->op1.op_type != IS_CONST) &&
- (EX(opline)->op1.op_type != IS_TMP_VAR)) {
-
- retval_ptr_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_W);
-
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
- (*retval_ptr_ptr)->refcount++;
-
- (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
- } else {
- retval_ptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- if (!EG(free_op1)) { /* Not a temp var */
- if (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0) {
- ALLOC_ZVAL(*(EG(return_value_ptr_ptr)));
- **EG(return_value_ptr_ptr) = *retval_ptr;
- (*EG(return_value_ptr_ptr))->is_ref = 0;
- (*EG(return_value_ptr_ptr))->refcount = 1;
- zval_copy_ctor(*EG(return_value_ptr_ptr));
- } else {
- *EG(return_value_ptr_ptr) = retval_ptr;
- retval_ptr->refcount++;
- }
- } else {
- ALLOC_ZVAL(*(EG(return_value_ptr_ptr)));
- **EG(return_value_ptr_ptr) = *retval_ptr;
- (*EG(return_value_ptr_ptr))->refcount = 1;
- (*EG(return_value_ptr_ptr))->is_ref = 0;
- }
- }
- RETURN_FROM_EXECUTE_LOOP(execute_data);
- }
- break;
- case ZEND_THROW:
- {
- zval *value;
- zval *exception;
-
- value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- /* Not sure if a complete copy is what we want here */
- MAKE_STD_ZVAL(exception);
- *exception = *value;
- if (!EG(free_op1)) {
- zval_copy_ctor(exception);
- }
- INIT_PZVAL(exception);
- EG(exception) = exception;
-
- if (EX(opline)->op2.u.opline_num == -1) {
- RETURN_FROM_EXECUTE_LOOP(execute_data);
- } else {
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- continue;
- }
- }
- NEXT_OPCODE();
- case ZEND_CATCH:
- /* Check if this is really an exception, if not, jump over code */
- if (EG(exception) == NULL) {
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
- continue;
- }
- zend_hash_update(EG(active_symbol_table), EX(opline)->op1.u.constant.value.str.val,
- EX(opline)->op1.u.constant.value.str.len+1, &EG(exception), sizeof(zval *), (void **) NULL);
- EG(exception) = NULL;
- NEXT_OPCODE();
- case ZEND_NAMESPACE:
- {
- if (EX(opline)->op1.op_type == IS_UNUSED) {
- EG(namespace) = NULL;
- } else {
- EG(namespace) = EX(Ts)[EX(opline)->op1.u.var].EA.class_entry;
- }
- NEXT_OPCODE();
- }
- case ZEND_SEND_VAL:
- if (EX(opline)->extended_value==ZEND_DO_FCALL_BY_NAME
- && ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->op2.u.opline_num, EX(fbc), EX(fbc)->common.arg_types)) {
- zend_error(E_ERROR, "Cannot pass parameter %d by reference", EX(opline)->op2.u.opline_num);
- }
- {
- zval *valptr;
- zval *value;
-
- value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- ALLOC_ZVAL(valptr);
- *valptr = *value;
- if (!EG(free_op1)) {
- zval_copy_ctor(valptr);
- }
- INIT_PZVAL(valptr);
- zend_ptr_stack_push(&EG(argument_stack), valptr);
- }
- NEXT_OPCODE();
- case ZEND_SEND_VAR_NO_REF:
- if (EX(opline)->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
- if (!(EX(opline)->extended_value & ZEND_ARG_SEND_BY_REF)) {
- goto send_by_var;
- }
- } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->op2.u.opline_num, EX(fbc), EX(fbc)->common.arg_types)) {
- goto send_by_var;
- }
- {
- zval *varptr;
- varptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- if (varptr != &EG(uninitialized_zval) && (PZVAL_IS_REF(varptr) || varptr->refcount == 1)) {
- varptr->is_ref = 1;
- varptr->refcount++;
- zend_ptr_stack_push(&EG(argument_stack), varptr);
- NEXT_OPCODE();
- }
- zend_error(E_ERROR, "Only variables can be passed by reference");
- }
- NEXT_OPCODE();
- case ZEND_SEND_VAR:
- if ((EX(opline)->extended_value == ZEND_DO_FCALL_BY_NAME)
- && ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->op2.u.opline_num, EX(fbc), EX(fbc)->common.arg_types)) {
- goto send_by_ref;
- }
-send_by_var:
- {
- zval *varptr;
- varptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- if (varptr == &EG(uninitialized_zval)) {
- ALLOC_ZVAL(varptr);
- INIT_ZVAL(*varptr);
- varptr->refcount = 0;
- } else if (PZVAL_IS_REF(varptr)) {
- zval *original_var = varptr;
-
- ALLOC_ZVAL(varptr);
- *varptr = *original_var;
- varptr->is_ref = 0;
- varptr->refcount = 0;
- zval_copy_ctor(varptr);
- }
- varptr->refcount++;
- zend_ptr_stack_push(&EG(argument_stack), varptr);
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1)); /* for string offsets */
- }
- NEXT_OPCODE();
-send_by_ref:
- case ZEND_SEND_REF: {
- zval **varptr_ptr;
- zval *varptr;
- varptr_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_W);
-
- if (!varptr_ptr) {
- zend_error(E_ERROR, "Only variables can be passed by reference");
- }
-
- SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
- varptr = *varptr_ptr;
- varptr->refcount++;
- zend_ptr_stack_push(&EG(argument_stack), varptr);
- }
- NEXT_OPCODE();
- case ZEND_RECV: {
- zval **param;
-
- if (zend_ptr_stack_get_arg(EX(opline)->op1.u.constant.value.lval, (void **) &param TSRMLS_CC)==FAILURE) {
- zend_error(E_WARNING, "Missing argument %d for %s()\n", EX(opline)->op1.u.constant.value.lval, get_active_function_name(TSRMLS_C));
- if (EX(opline)->result.op_type == IS_VAR) {
- PZVAL_UNLOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
- }
- } else if (PZVAL_IS_REF(*param)) {
- zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&EX(opline)->result, EX(Ts), BP_VAR_W), param, NULL TSRMLS_CC);
- } else {
- zend_assign_to_variable(NULL, &EX(opline)->result, NULL, *param, IS_VAR, EX(Ts) TSRMLS_CC);
- }
- }
- NEXT_OPCODE();
- case ZEND_RECV_INIT: {
- zval **param, *assignment_value;
-
- if (zend_ptr_stack_get_arg(EX(opline)->op1.u.constant.value.lval, (void **) &param TSRMLS_CC)==FAILURE) {
- if (EX(opline)->op2.u.constant.type == IS_CONSTANT || EX(opline)->op2.u.constant.type==IS_CONSTANT_ARRAY) {
- zval *default_value;
-
- ALLOC_ZVAL(default_value);
- *default_value = EX(opline)->op2.u.constant;
- if (EX(opline)->op2.u.constant.type==IS_CONSTANT_ARRAY) {
- zval_copy_ctor(default_value);
- }
- default_value->refcount=1;
- zval_update_constant(&default_value, 0 TSRMLS_CC);
- default_value->refcount=0;
- default_value->is_ref=0;
- param = &default_value;
- assignment_value = default_value;
- } else {
- param = NULL;
- assignment_value = &EX(opline)->op2.u.constant;
- }
- } else {
- assignment_value = *param;
- }
-
- if (PZVAL_IS_REF(assignment_value) && param) {
- zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&EX(opline)->result, EX(Ts), BP_VAR_W), param, NULL TSRMLS_CC);
- } else {
- zend_assign_to_variable(NULL, &EX(opline)->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
- }
- }
- NEXT_OPCODE();
- case ZEND_BOOL:
- /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = zend_is_true(get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R));
- EX(Ts)[EX(opline)->result.u.var].tmp_var.type = IS_BOOL;
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- NEXT_OPCODE();
- case ZEND_BRK:
- case ZEND_CONT: {
- zval *nest_levels_zval = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
- zval tmp;
- int array_offset, nest_levels, original_nest_levels;
- zend_brk_cont_element *jmp_to;
-
- if (nest_levels_zval->type != IS_LONG) {
- tmp = *nest_levels_zval;
- zval_copy_ctor(&tmp);
- convert_to_long(&tmp);
- nest_levels = tmp.value.lval;
- } else {
- nest_levels = nest_levels_zval->value.lval;
- }
- original_nest_levels = nest_levels;
- array_offset = EX(opline)->op1.u.opline_num;
- do {
- if (array_offset==-1) {
- zend_error(E_ERROR, "Cannot break/continue %d level%s", original_nest_levels, (original_nest_levels == 1) ? "" : "s");
- }
- jmp_to = &op_array->brk_cont_array[array_offset];
- if (nest_levels>1) {
- zend_op *brk_opline = &op_array->opcodes[jmp_to->brk];
-
- switch (brk_opline->opcode) {
- case ZEND_SWITCH_FREE:
- zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC);
- break;
- case ZEND_FREE:
- zendi_zval_dtor(EX(Ts)[brk_opline->op1.u.var].tmp_var);
- break;
- }
- }
- array_offset = jmp_to->parent;
- } while (--nest_levels > 0);
-
- if (EX(opline)->opcode == ZEND_BRK) {
- EX(opline) = op_array->opcodes+jmp_to->brk;
- } else {
- EX(opline) = op_array->opcodes+jmp_to->cont;
- }
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- continue;
- }
- /* Never reaches this point */
- case ZEND_CASE: {
- int switch_expr_is_overloaded=0;
-
- if (EX(opline)->op1.op_type==IS_VAR) {
- if (EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr) {
- PZVAL_LOCK(*EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr);
- } else {
- switch_expr_is_overloaded = 1;
- if (EX(Ts)[EX(opline)->op1.u.var].EA.type==IS_STRING_OFFSET) {
- EX(Ts)[EX(opline)->op1.u.var].EA.data.str_offset.str->refcount++;
- }
- }
- }
- is_equal_function(&EX(Ts)[EX(opline)->result.u.var].tmp_var,
- get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R),
- get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R) TSRMLS_CC);
-
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- if (switch_expr_is_overloaded) {
- /* We only free op1 if this is a string offset,
- * Since if it is a TMP_VAR, it'll be reused by
- * other CASE opcodes (whereas string offsets
- * are allocated at each get_zval_ptr())
- */
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr = NULL;
- AI_USE_PTR(EX(Ts)[EX(opline)->op1.u.var].var);
- }
- }
- NEXT_OPCODE();
- case ZEND_SWITCH_FREE:
- zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC);
- NEXT_OPCODE();
- case ZEND_NEW:
- {
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- object_init_ex(EX(Ts)[EX(opline)->result.u.var].var.ptr, EX(Ts)[EX(opline)->op1.u.var].EA.class_entry);
- EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount=1;
- EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1;
- }
- NEXT_OPCODE();
- case ZEND_FETCH_CONSTANT:
- {
- zend_class_entry *ce;
- zval **value;
-
- if (EX(opline)->op1.op_type == IS_UNUSED) {
- if (EG(namespace)) {
- ce = EG(namespace);
- if (zend_hash_find(&ce->constants_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, (void **) &value) == SUCCESS) {
- zval_update_constant(value, (void *) 1 TSRMLS_CC);
- EX(Ts)[EX(opline)->result.u.var].tmp_var = **value;
- zval_copy_ctor(&EX(Ts)[EX(opline)->result.u.var].tmp_var);
- NEXT_OPCODE();
- }
- }
- if (!zend_get_constant(EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len, &EX(Ts)[EX(opline)->result.u.var].tmp_var TSRMLS_CC)) {
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
- EX(opline)->op2.u.constant.value.str.val,
- EX(opline)->op2.u.constant.value.str.val);
- EX(Ts)[EX(opline)->result.u.var].tmp_var = EX(opline)->op2.u.constant;
- zval_copy_ctor(&EX(Ts)[EX(opline)->result.u.var].tmp_var);
- }
- NEXT_OPCODE();
- }
-
- ce = EX(Ts)[EX(opline)->op1.u.var].EA.class_entry;
-
- if (zend_hash_find(&ce->constants_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, (void **) &value) == SUCCESS) {
- zval_update_constant(value, (void *) 1 TSRMLS_CC);
- EX(Ts)[EX(opline)->result.u.var].tmp_var = **value;
- zval_copy_ctor(&EX(Ts)[EX(opline)->result.u.var].tmp_var);
- } else {
- zend_error(E_ERROR, "Undefined constant. Improve this error message");
- }
- }
- NEXT_OPCODE();
- case ZEND_INIT_ARRAY:
- case ZEND_ADD_ARRAY_ELEMENT: {
- zval *array_ptr = &EX(Ts)[EX(opline)->result.u.var].tmp_var;
- zval *expr_ptr, **expr_ptr_ptr = NULL;
- zval *offset=get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
-
- if (EX(opline)->extended_value) {
- expr_ptr_ptr=get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_R);
- expr_ptr = *expr_ptr_ptr;
- } else {
- expr_ptr=get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- }
-
- if (EX(opline)->opcode==ZEND_INIT_ARRAY) {
- array_init(array_ptr);
- if (!expr_ptr) {
- NEXT_OPCODE();
- }
- }
- if (!EX(opline)->extended_value && EG(free_op1)) { /* temporary variable */
- zval *new_expr;
-
- ALLOC_ZVAL(new_expr);
- *new_expr = *expr_ptr;
- expr_ptr = new_expr;
- INIT_PZVAL(expr_ptr);
- } else {
- if (EX(opline)->extended_value) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
- expr_ptr = *expr_ptr_ptr;
- expr_ptr->refcount++;
- } else if (PZVAL_IS_REF(expr_ptr)) {
- zval *new_expr;
-
- ALLOC_ZVAL(new_expr);
- *new_expr = *expr_ptr;
- expr_ptr = new_expr;
- zendi_zval_copy_ctor(*expr_ptr);
- INIT_PZVAL(expr_ptr);
- } else {
- expr_ptr->refcount++;
- }
- }
- if (offset) {
- switch(offset->type) {
- case IS_DOUBLE:
- zend_hash_index_update(array_ptr->value.ht, (long) offset->value.dval, &expr_ptr, sizeof(zval *), NULL);
- break;
- case IS_LONG:
- zend_hash_index_update(array_ptr->value.ht, offset->value.lval, &expr_ptr, sizeof(zval *), NULL);
- break;
- case IS_STRING:
- zend_hash_update(array_ptr->value.ht, offset->value.str.val, offset->value.str.len+1, &expr_ptr, sizeof(zval *), NULL);
- break;
- case IS_NULL:
- zend_hash_update(array_ptr->value.ht, "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
- break;
- default:
- zval_ptr_dtor(&expr_ptr);
- /* do nothing */
- break;
- }
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- } else {
- zend_hash_next_index_insert(array_ptr->value.ht, &expr_ptr, sizeof(zval *), NULL);
- }
- }
- NEXT_OPCODE();
- case ZEND_CAST: {
- zval *expr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- zval *result = &EX(Ts)[EX(opline)->result.u.var].tmp_var;
-
- *result = *expr;
- if (!EG(free_op1)) {
- zendi_zval_copy_ctor(*result);
- }
- switch (EX(opline)->extended_value) {
- case IS_NULL:
- convert_to_null(result);
- break;
- case IS_BOOL:
- convert_to_boolean(result);
- break;
- case IS_LONG:
- convert_to_long(result);
- break;
- case IS_DOUBLE:
- convert_to_double(result);
- break;
- case IS_STRING:
- convert_to_string(result);
- break;
- case IS_ARRAY:
- convert_to_array(result);
- break;
- case IS_OBJECT:
- convert_to_object(result);
- break;
- }
- }
- NEXT_OPCODE();
- case ZEND_INCLUDE_OR_EVAL: {
- zend_op_array *new_op_array=NULL;
- zval **original_return_value = EG(return_value_ptr_ptr);
- int return_value_used;
- zval *inc_filename = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- zval tmp_inc_filename;
- zend_bool failure_retval=0;
-
- if (inc_filename->type!=IS_STRING) {
- tmp_inc_filename = *inc_filename;
- zval_copy_ctor(&tmp_inc_filename);
- convert_to_string(&tmp_inc_filename);
- inc_filename = &tmp_inc_filename;
- }
-
- return_value_used = RETURN_VALUE_USED(EX(opline));
-
- switch (EX(opline)->op2.u.constant.value.lval) {
- case ZEND_INCLUDE_ONCE:
- case ZEND_REQUIRE_ONCE: {
- char *opened_path=NULL;
- int dummy = 1;
- zend_file_handle file_handle;
-
- file_handle.handle.fp = zend_fopen(inc_filename->value.str.val, &opened_path);
- file_handle.type = ZEND_HANDLE_FP;
- file_handle.filename = inc_filename->value.str.val;
- file_handle.opened_path = opened_path;
- file_handle.free_filename = 0;
-
- if (file_handle.handle.fp) {
- if (!opened_path || zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS) {
- new_op_array = zend_compile_file(&file_handle, (EX(opline)->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
- zend_destroy_file_handle(&file_handle TSRMLS_CC);
- opened_path = NULL; /* zend_destroy_file_handle() already frees it */
- } else {
- fclose(file_handle.handle.fp);
- failure_retval=1;
- }
- } else {
- if (EX(opline)->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE) {
- zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
- } else {
- zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle.filename);
- }
- }
- if (opened_path) {
- efree(opened_path);
- }
- break;
- }
- break;
- case ZEND_INCLUDE:
- case ZEND_REQUIRE:
- new_op_array = compile_filename(EX(opline)->op2.u.constant.value.lval, inc_filename TSRMLS_CC);
- break;
- case ZEND_EVAL: {
- char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
-
- new_op_array = compile_string(inc_filename, eval_desc TSRMLS_CC);
- efree(eval_desc);
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- if (inc_filename==&tmp_inc_filename) {
- zval_dtor(&tmp_inc_filename);
- }
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
- if (new_op_array) {
- EG(return_value_ptr_ptr) = EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr;
- EG(active_op_array) = new_op_array;
- EX(Ts)[EX(opline)->result.u.var].var.ptr = NULL;
-
- zend_execute(new_op_array TSRMLS_CC);
-
- if (!return_value_used) {
- if (EX(Ts)[EX(opline)->result.u.var].var.ptr) {
- zval_ptr_dtor(&EX(Ts)[EX(opline)->result.u.var].var.ptr);
- }
- } else { /* return value is used */
- if (!EX(Ts)[EX(opline)->result.u.var].var.ptr) { /* there was no return statement */
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- INIT_PZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- EX(Ts)[EX(opline)->result.u.var].var.ptr->value.lval = 1;
- EX(Ts)[EX(opline)->result.u.var].var.ptr->type = IS_BOOL;
- }
- }
-
- EG(opline_ptr) = &EX(opline);
- EG(active_op_array) = op_array;
- EG(function_state_ptr) = &EX(function_state);
- destroy_op_array(new_op_array);
- efree(new_op_array);
- } else {
- if (return_value_used) {
- ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- INIT_ZVAL(*EX(Ts)[EX(opline)->result.u.var].var.ptr);
- EX(Ts)[EX(opline)->result.u.var].var.ptr->value.lval = failure_retval;
- EX(Ts)[EX(opline)->result.u.var].var.ptr->type = IS_BOOL;
- }
- }
- EG(return_value_ptr_ptr) = original_return_value;
- }
- NEXT_OPCODE();
- case ZEND_UNSET_VAR: {
- zval tmp, *variable = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- zval **object;
- zend_bool unset_object;
-
- if (variable->type != IS_STRING) {
- tmp = *variable;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- variable = &tmp;
- }
-
- unset_object = (EX(opline)->extended_value == ZEND_UNSET_OBJ);
-
- if (unset_object) {
- if (zend_hash_find(EG(active_symbol_table), variable->value.str.val, variable->value.str.len+1, (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- (*object)->value.obj.handlers->delete_obj((*object)->value.obj.handle);
- }
-
- zend_hash_del(EG(active_symbol_table), variable->value.str.val, variable->value.str.len+1);
-
- if (variable == &tmp) {
- zval_dtor(&tmp);
- }
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- }
- NEXT_OPCODE();
- case ZEND_UNSET_DIM_OBJ: {
- zval **container = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_R);
- zval *offset = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
- zend_bool unset_object;
- zval **object;
-
- unset_object = (EX(opline)->extended_value == ZEND_UNSET_OBJ);
-
- if (container) {
- HashTable *ht;
-
- switch ((*container)->type) {
- case IS_ARRAY:
- ht = (*container)->value.ht;
- break;
- case IS_OBJECT:
- ht = Z_OBJPROP_PP(container);
- break;
- default:
- ht = NULL;
- break;
- }
- if (ht) {
- switch (offset->type) {
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG:
- {
- long index;
-
- if (offset->type == IS_DOUBLE) {
- index = (long) offset->value.lval;
- } else {
- index = offset->value.lval;
- }
-
- if (unset_object) {
- if (zend_hash_index_find(ht, index, (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- (*object)->value.obj.handlers->delete_obj((*object)->value.obj.handle);
- }
-
- zend_hash_index_del(ht, index);
- break;
- }
- case IS_STRING:
- if (unset_object) {
- if (zend_hash_find(ht, offset->value.str.val, offset->value.str.len+1, (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- (*object)->value.obj.handlers->delete_obj((*object)->value.obj.handle);
- }
-
- zend_hash_del(ht, offset->value.str.val, offset->value.str.len+1);
- break;
- case IS_NULL:
- if (unset_object) {
- if (zend_hash_find(ht, "", sizeof(""), (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- (*object)->value.obj.handlers->delete_obj((*object)->value.obj.handle);
- }
-
- zend_hash_del(ht, "", sizeof(""));
- break;
- default:
- zend_error(E_WARNING, "Illegal offset type in unset");
- break;
- }
- }
- } else {
- /* overloaded element */
- }
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- }
- NEXT_OPCODE();
- case ZEND_FE_RESET: {
- zval *array_ptr, **array_ptr_ptr;
- HashTable *fe_ht;
-
- if (EX(opline)->extended_value) {
- array_ptr_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_R);
- if (array_ptr_ptr == NULL) {
- MAKE_STD_ZVAL(array_ptr);
- } else {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
- array_ptr = *array_ptr_ptr;
- array_ptr->refcount++;
- }
- } else {
- array_ptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- if (EG(free_op1)) { /* IS_TMP_VAR */
- zval *tmp;
-
- ALLOC_ZVAL(tmp);
- *tmp = *array_ptr;
- INIT_PZVAL(tmp);
- array_ptr = tmp;
- } else {
- array_ptr->refcount++;
- }
- }
- PZVAL_LOCK(array_ptr);
- EX(Ts)[EX(opline)->result.u.var].var.ptr = array_ptr;
- EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
-
- if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
- /* probably redundant */
- zend_hash_internal_pointer_reset(fe_ht);
- } else {
- /* JMP to the end of foreach - TBD */
- }
- }
- NEXT_OPCODE();
- case ZEND_FE_FETCH: {
- zval *array = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- zval *result = &EX(Ts)[EX(opline)->result.u.var].tmp_var;
- zval **value, *key;
- char *str_key;
- ulong int_key;
- HashTable *fe_ht;
-
- PZVAL_LOCK(array);
-
- fe_ht = HASH_OF(array);
- if (!fe_ht) {
- zend_error(E_WARNING, "Invalid argument supplied for foreach()");
- EX(opline) = op_array->opcodes+EX(opline)->op2.u.opline_num;
- continue;
- } else if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
- EX(opline) = op_array->opcodes+EX(opline)->op2.u.opline_num;
- continue;
- }
- array_init(result);
-
-
- (*value)->refcount++;
- zend_hash_index_update(result->value.ht, 0, value, sizeof(zval *), NULL);
-
- ALLOC_ZVAL(key);
- INIT_PZVAL(key);
- switch (zend_hash_get_current_key(fe_ht, &str_key, &int_key, 1)) {
- case HASH_KEY_IS_STRING:
- key->value.str.val = str_key;
- key->value.str.len = strlen(str_key);
- key->type = IS_STRING;
- break;
- case HASH_KEY_IS_LONG:
- key->value.lval = int_key;
- key->type = IS_LONG;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- zend_hash_index_update(result->value.ht, 1, &key, sizeof(zval *), NULL);
- zend_hash_move_forward(fe_ht);
- }
- NEXT_OPCODE();
- case ZEND_JMP_NO_CTOR: {
- zval *object_zval;
- zend_object *object;
-
- if (EX(opline)->op1.op_type == IS_VAR) {
- PZVAL_LOCK(*EX(Ts)[EX(opline)->op1.u.var].var.ptr_ptr);
- }
-
- object_zval = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- object = object_zval->value.obj.handlers->get_address(object_zval->value.obj.handle);
-
- if (!object->ce->handle_function_call && !object->ce->constructor) {
- EX(opline) = op_array->opcodes + EX(opline)->op2.u.opline_num;
- continue;
- }
- }
- NEXT_OPCODE();
- case ZEND_ISSET_ISEMPTY: {
- zval **var = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_IS);
- zval *value;
- int isset;
-
- if (!var) {
- if (EX(Ts)[EX(opline)->op1.u.var].EA.type == IS_STRING_OFFSET) {
- PZVAL_LOCK(EX(Ts)[EX(opline)->op1.u.var].EA.data.str_offset.str);
- value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_IS);
- if (value->value.str.val == empty_string) {
- isset = 0;
- } else {
- isset = 1;
- }
- } else { /* IS_OVERLOADED_OBJECT */
- value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_IS);
- if (value->type == IS_NULL) {
- isset = 0;
- } else {
- isset = 1;
- }
- }
- } else if (*var==EG(uninitialized_zval_ptr) || ((*var)->type == IS_NULL)) {
- value = *var;
- isset = 0;
- } else {
- value = *var;
- isset = 1;
- }
-
- switch (EX(opline)->op2.u.constant.value.lval) {
- case ZEND_ISSET:
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = isset;
- break;
- case ZEND_ISEMPTY:
- if (!isset || !zend_is_true(value)) {
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = 1;
- } else {
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = 0;
- }
- break;
- }
- EX(Ts)[EX(opline)->result.u.var].tmp_var.type = IS_BOOL;
- if (!var) {
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- }
- }
- NEXT_OPCODE();
- case ZEND_EXIT:
- if (EX(opline)->op1.op_type != IS_UNUSED) {
- zval *ptr;
-
- ptr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- if (Z_TYPE_P(ptr) == IS_LONG) {
- EG(exit_status) = Z_LVAL_P(ptr);
- }
- zend_print_variable(ptr);
- FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- }
- zend_bailout();
- NEXT_OPCODE();
- case ZEND_BEGIN_SILENCE:
- EX(Ts)[EX(opline)->result.u.var].tmp_var.value.lval = EG(error_reporting);
- EX(Ts)[EX(opline)->result.u.var].tmp_var.type = IS_LONG; /* shouldn't be necessary */
- EG(error_reporting) = 0;
- NEXT_OPCODE();
- case ZEND_END_SILENCE:
- EG(error_reporting) = EX(Ts)[EX(opline)->op1.u.var].tmp_var.value.lval;
- NEXT_OPCODE();
- case ZEND_QM_ASSIGN: {
- zval *value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
-
- EX(Ts)[EX(opline)->result.u.var].tmp_var = *value;
- if (!EG(free_op1)) {
- zval_copy_ctor(&EX(Ts)[EX(opline)->result.u.var].tmp_var);
- }
- }
- NEXT_OPCODE();
- case ZEND_EXT_STMT:
- if (!EG(no_extensions)) {
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, op_array TSRMLS_CC);
- }
- NEXT_OPCODE();
- case ZEND_EXT_FCALL_BEGIN:
- if (!EG(no_extensions)) {
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, op_array TSRMLS_CC);
- }
- NEXT_OPCODE();
- case ZEND_EXT_FCALL_END:
- if (!EG(no_extensions)) {
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, op_array TSRMLS_CC);
- }
- NEXT_OPCODE();
- case ZEND_DECLARE_FUNCTION_OR_CLASS:
- do_bind_function_or_class(EX(opline), EG(function_table), EG(class_table), 0);
- NEXT_OPCODE();
- case ZEND_TICKS:
- if (++EG(ticks_count)==EX(opline)->op1.u.constant.value.lval) {
- EG(ticks_count)=0;
- if (zend_ticks_function) {
- zend_ticks_function(EX(opline)->op1.u.constant.value.lval);
- }
- }
- NEXT_OPCODE();
- case ZEND_EXT_NOP:
- case ZEND_NOP:
- NEXT_OPCODE();
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- }
- zend_error(E_ERROR, "Arrived at end of main loop which shouldn't happen");
-}
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
deleted file mode 100644
index feb991abfb..0000000000
--- a/Zend/zend_execute.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_EXECUTE_H
-#define ZEND_EXECUTE_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;
- zend_class_entry *class_entry;
- } EA;
-} temp_variable;
-
-
-ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
-
-void init_executor(TSRMLS_D);
-void shutdown_executor(TSRMLS_D);
-ZEND_API void execute(zend_op_array *op_array TSRMLS_DC);
-ZEND_API int zend_is_true(zval *op);
-static inline void safe_free_zval_ptr(zval *p)
-{
- TSRMLS_FETCH();
-
- if (p!=EG(uninitialized_zval_ptr)) {
- FREE_ZVAL(p);
- }
-}
-
-ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC);
-static inline int i_zend_is_true(zval *op)
-{
- int result;
-
- switch (op->type) {
- case IS_NULL:
- result = 0;
- break;
- case IS_LONG:
- case IS_BOOL:
- case IS_RESOURCE:
- result = (op->value.lval?1:0);
- break;
- case IS_DOUBLE:
- result = (op->value.dval ? 1 : 0);
- break;
- case IS_STRING:
- if (op->value.str.len == 0
- || (op->value.str.len==1 && op->value.str.val[0]=='0')) {
- result = 0;
- } else {
- result = 1;
- }
- break;
- case IS_ARRAY:
- result = (zend_hash_num_elements(op->value.ht)?1:0);
- break;
- case IS_OBJECT:
- result = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0);
- break;
- default:
- result = 0;
- break;
- }
- return result;
-}
-
-ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC);
-
-/* dedicated Zend executor functions - do not use! */
-static inline void zend_ptr_stack_clear_multiple(TSRMLS_D)
-{
- void **p = EG(argument_stack).top_element-2;
- int delete_count = (ulong) *p;
-
- EG(argument_stack).top -= (delete_count+2);
- while (--delete_count>=0) {
- zval_ptr_dtor((zval **) --p);
- }
- EG(argument_stack).top_element = p;
-}
-
-static inline int zend_ptr_stack_get_arg(int requested_arg, void **data TSRMLS_DC)
-{
- void **p = EG(argument_stack).top_element-2;
- int arg_count = (ulong) *p;
-
- if (requested_arg>arg_count) {
- return FAILURE;
- }
- *data = (p-arg_count+requested_arg-1);
- return SUCCESS;
-}
-
-void execute_new_code(TSRMLS_D);
-
-
-/* services */
-ZEND_API char *get_active_function_name(TSRMLS_D);
-ZEND_API char *zend_get_executed_filename(TSRMLS_D);
-ZEND_API uint zend_get_executed_lineno(TSRMLS_D);
-ZEND_API zend_bool zend_is_executing(TSRMLS_D);
-
-ZEND_API void zend_set_timeout(long seconds);
-ZEND_API void zend_unset_timeout(TSRMLS_D);
-ZEND_API void zend_timeout(int dummy);
-
-#ifdef ZEND_WIN32
-void zend_init_timeout_thread();
-void zend_shutdown_timeout_thread();
-#define WM_REGISTER_ZEND_TIMEOUT (WM_USER+1)
-#define WM_UNREGISTER_ZEND_TIMEOUT (WM_USER+2)
-#endif
-
-#define zendi_zval_copy_ctor(p) zval_copy_ctor(&(p))
-#define zendi_zval_dtor(p) zval_dtor(&(p))
-
-#define active_opline (*EG(opline_ptr))
-
-void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts TSRMLS_DC);
-
-#define IS_OVERLOADED_OBJECT 1
-#define IS_STRING_OFFSET 2
-
-#endif /* ZEND_EXECUTE_H */
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
deleted file mode 100644
index a9ea4469a7..0000000000
--- a/Zend/zend_execute_API.c
+++ /dev/null
@@ -1,854 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdio.h>
-#include <signal.h>
-
-#include "zend.h"
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_API.h"
-#include "zend_ptr_stack.h"
-#include "zend_constants.h"
-#include "zend_extensions.h"
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-
-ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
-
-#ifdef ZEND_WIN32
-#include <process.h>
-/* true global */
-static WNDCLASS wc;
-static HWND timeout_window;
-static HANDLE timeout_thread_event;
-static DWORD timeout_thread_id;
-static int timeout_thread_initialized=0;
-#endif
-
-
-#if ZEND_DEBUG
-static void (*original_sigsegv_handler)(int);
-static void zend_handle_sigsegv(int dummy)
-{
- fflush(stdout);
- fflush(stderr);
- if (original_sigsegv_handler==zend_handle_sigsegv) {
- signal(SIGSEGV, original_sigsegv_handler);
- } else {
- signal(SIGSEGV, SIG_DFL);
- }
- {
- TSRMLS_FETCH();
-
- fprintf(stderr, "SIGSEGV caught on opcode %d on opline %d of %s() at %s:%d\n\n",
- active_opline->opcode,
- active_opline-EG(active_op_array)->opcodes,
- get_active_function_name(TSRMLS_C),
- zend_get_executed_filename(TSRMLS_C),
- zend_get_executed_lineno(TSRMLS_C));
- }
- if (original_sigsegv_handler!=zend_handle_sigsegv) {
- original_sigsegv_handler(dummy);
- }
-}
-#endif
-
-
-static void zend_extension_activator(zend_extension *extension TSRMLS_DC)
-{
- if (extension->activate) {
- extension->activate();
- }
-}
-
-
-static void zend_extension_deactivator(zend_extension *extension TSRMLS_DC)
-{
- if (extension->deactivate) {
- extension->deactivate();
- }
-}
-
-
-static int is_not_internal_function(zend_function *function TSRMLS_DC)
-{
- if (function->type == ZEND_INTERNAL_FUNCTION) {
- return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
- } else {
- return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
- }
-}
-
-
-static int is_not_internal_class(zend_class_entry *ce TSRMLS_DC)
-{
- if (ce->type == ZEND_INTERNAL_CLASS) {
- return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
- } else {
- return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
- }
-}
-
-
-void init_executor(TSRMLS_D)
-{
- INIT_ZVAL(EG(uninitialized_zval));
- INIT_ZVAL(EG(error_zval));
- EG(uninitialized_zval_ptr)=&EG(uninitialized_zval);
- EG(error_zval_ptr)=&EG(error_zval);
- zend_ptr_stack_init(&EG(arg_types_stack));
-/* destroys stack frame, therefore makes core dumps worthless */
-#if 0&&ZEND_DEBUG
- original_sigsegv_handler = signal(SIGSEGV, zend_handle_sigsegv);
-#endif
- EG(return_value_ptr_ptr) = NULL;
-
- EG(symtable_cache_ptr) = EG(symtable_cache)-1;
- EG(symtable_cache_limit)=EG(symtable_cache)+SYMTABLE_CACHE_SIZE-1;
- EG(no_extensions)=0;
-
- EG(function_table) = CG(function_table);
- EG(class_table) = CG(class_table);
-
- EG(in_execution) = 0;
-
- zend_ptr_stack_init(&EG(argument_stack));
-
- zend_hash_init(&EG(symbol_table), 50, NULL, ZVAL_PTR_DTOR, 0);
- EG(active_symbol_table) = &EG(symbol_table);
-
- zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator TSRMLS_CC);
- EG(opline_ptr) = NULL;
- EG(garbage_ptr) = 0;
-
- zend_hash_init(&EG(included_files), 5, NULL, NULL, 0);
-
- EG(ticks_count) = 0;
-
- EG(user_error_handler) = NULL;
-
- zend_ptr_stack_init(&EG(user_error_handlers));
-
- EG(orig_error_reporting) = EG(error_reporting);
- zend_objects_init(&EG(objects), 1024);
-
- EG(full_tables_cleanup) = 0;
-#ifdef ZEND_WIN32
- EG(timed_out) = 0;
-#endif
-
- EG(exception) = NULL;
-
- EG(namespace) = NULL;
-}
-
-
-void shutdown_executor(TSRMLS_D)
-{
- zend_try {
- zend_ptr_stack_destroy(&EG(arg_types_stack));
-
- while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
- zend_hash_destroy(*EG(symtable_cache_ptr));
- efree(*EG(symtable_cache_ptr));
- EG(symtable_cache_ptr)--;
- }
- zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_deactivator TSRMLS_CC);
-
- zend_hash_destroy(&EG(symbol_table));
-
- while (EG(garbage_ptr)--) {
- if (EG(garbage)[EG(garbage_ptr)]->refcount==1) {
- zval_ptr_dtor(&EG(garbage)[EG(garbage_ptr)]);
- }
- }
-
- zend_ptr_stack_destroy(&EG(argument_stack));
-
- /* Destroy all op arrays */
- if (EG(full_tables_cleanup)) {
- zend_hash_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
- zend_hash_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
- } else {
- zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
- zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
- }
- } zend_end_try();
-
- /* The regular list must be destroyed after the main symbol table and
- * op arrays are destroyed.
- */
- zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC);
-
- zend_try {
- clean_non_persistent_constants(TSRMLS_C);
-#if ZEND_DEBUG
- signal(SIGSEGV, original_sigsegv_handler);
-#endif
-
- zend_hash_destroy(&EG(included_files));
-
- if (EG(user_error_handler)) {
- zval_dtor(EG(user_error_handler));
- FREE_ZVAL(EG(user_error_handler));
- }
-
- zend_ptr_stack_clean(&EG(user_error_handlers), ZVAL_DESTRUCTOR, 1);
- zend_ptr_stack_destroy(&EG(user_error_handlers));
-
- EG(error_reporting) = EG(orig_error_reporting);
- zend_objects_destroy(&EG(objects));
- } zend_end_try();
-}
-
-
-ZEND_API char *get_active_function_name(TSRMLS_D)
-{
- switch(EG(function_state_ptr)->function->type) {
- case ZEND_USER_FUNCTION: {
- char *function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name;
-
- if (function_name) {
- return function_name;
- } else {
- return "main";
- }
- }
- break;
- case ZEND_INTERNAL_FUNCTION:
- return ((zend_internal_function *) EG(function_state_ptr)->function)->function_name;
- break;
- default:
- return NULL;
- }
-}
-
-
-ZEND_API char *zend_get_executed_filename(TSRMLS_D)
-{
- if (EG(active_op_array)) {
- return EG(active_op_array)->filename;
- } else {
- return "[no active file]";
- }
-}
-
-
-ZEND_API uint zend_get_executed_lineno(TSRMLS_D)
-{
- if (EG(opline_ptr)) {
- return active_opline->lineno;
- } else {
- return 0;
- }
-}
-
-
-ZEND_API zend_bool zend_is_executing(TSRMLS_D)
-{
- return EG(in_execution);
-}
-
-
-ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
-{
-#if DEBUG_ZEND>=2
- printf("Reducing refcount for %x (%x): %d->%d\n", *zval_ptr, zval_ptr, (*zval_ptr)->refcount, (*zval_ptr)->refcount-1);
-#endif
- (*zval_ptr)->refcount--;
- if ((*zval_ptr)->refcount==0) {
- zval_dtor(*zval_ptr);
- safe_free_zval_ptr(*zval_ptr);
- } else if ((*zval_ptr)->refcount == 1) {
- (*zval_ptr)->is_ref = 0;
- }
-}
-
-
-ZEND_API int zend_is_true(zval *op)
-{
- return i_zend_is_true(op);
-}
-
-#include "../TSRM/tsrm_strtok_r.h"
-
-ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
-{
- zval *p = *pp;
- zend_bool inline_change = (zend_bool) (unsigned long) arg;
- zval const_value;
-
- if (p->type == IS_CONSTANT) {
- int refcount;
-
- SEPARATE_ZVAL(pp);
- p = *pp;
-
- refcount = p->refcount;
-
- if (strchr(p->value.str.val, ':')) {
- char *cur, *temp;
- char *last;
- zend_class_entry *ce;
- zval **value;
-
- last = tsrm_strtok_r(p->value.str.val, ":", &temp);
-
- if (zend_hash_find(EG(class_table), last, strlen(last)+1, &ce) == FAILURE) {
- zend_error(E_ERROR, "Invalid class! Improve this error message");
- }
-
- for(;;) {
- cur = tsrm_strtok_r(NULL, ":", &temp);
- if (!cur) {
- break;
- }
- if (zend_hash_find(EG(class_table), last, strlen(last)+1, &ce) == FAILURE) {
- zend_error(E_ERROR, "Invalid class! Improve this error message");
- }
- last = cur;
- }
- if (zend_hash_find(&ce->constants_table, last, strlen(last)+1, (void **) &value) == FAILURE) {
- zend_error(E_ERROR, "Invalid class! Improve this error message");
- }
- const_value = **value;
- zval_copy_ctor(&const_value);
- if (inline_change) {
- STR_FREE(p->value.str.val);
- }
- *p = const_value;
- } else {
- if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
- p->value.str.val,
- p->value.str.val);
- p->type = IS_STRING;
- if (!inline_change) {
- zval_copy_ctor(p);
- }
- } else {
- if (inline_change) {
- STR_FREE(p->value.str.val);
- }
- *p = const_value;
- }
- }
- INIT_PZVAL(p);
- p->refcount = refcount;
- } else if (p->type == IS_CONSTANT_ARRAY) {
- zval **element;
- char *str_index;
- uint str_index_len;
- ulong num_index;
-
- SEPARATE_ZVAL(pp);
- p = *pp;
- p->type = IS_ARRAY;
-
- /* First go over the array and see if there are any constant indices */
- zend_hash_internal_pointer_reset(p->value.ht);
- while (zend_hash_get_current_data(p->value.ht, (void **) &element)==SUCCESS) {
- if (!(Z_TYPE_PP(element) & IS_CONSTANT_INDEX)) {
- zend_hash_move_forward(p->value.ht);
- continue;
- }
- Z_TYPE_PP(element) &= ~IS_CONSTANT_INDEX;
- if (zend_hash_get_current_key_ex(p->value.ht, &str_index, &str_index_len, &num_index, 0, NULL)!=HASH_KEY_IS_STRING) {
- zend_hash_move_forward(p->value.ht);
- continue;
- }
- if (!zend_get_constant(str_index, str_index_len-1, &const_value TSRMLS_CC)) {
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", str_index, str_index);
- zend_hash_move_forward(p->value.ht);
- continue;
- }
- switch (const_value.type) {
- case IS_STRING:
- zend_hash_update(p->value.ht, const_value.value.str.val, const_value.value.str.len+1, element, sizeof(zval *), NULL);
- (*element)->refcount++;
- break;
- case IS_LONG:
- zend_hash_index_update(p->value.ht, const_value.value.lval, element, sizeof(zval *), NULL);
- (*element)->refcount++;
- break;
- }
- zend_hash_del(p->value.ht, str_index, str_index_len);
- }
- zend_hash_apply_with_argument(p->value.ht, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
- }
- return 0;
-}
-
-
-int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC)
-{
- zval ***params_array = (zval ***) emalloc(sizeof(zval **)*param_count);
- int i;
- int ex_retval;
- zval *local_retval_ptr;
-
- for (i=0; i<param_count; i++) {
- params_array[i] = &params[i];
- }
- ex_retval = call_user_function_ex(function_table, object_pp, function_name, &local_retval_ptr, param_count, params_array, 1, NULL TSRMLS_CC);
- if (local_retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
- } else {
- INIT_ZVAL(*retval_ptr);
- }
- efree(params_array);
- return ex_retval;
-}
-
-
-int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC)
-{
- int i;
- zval **original_return_value;
- HashTable *calling_symbol_table;
- zend_function_state function_state;
- zend_function_state *original_function_state_ptr;
- zend_op_array *original_op_array;
- zend_op **original_opline_ptr;
- int orig_free_op1, orig_free_op2;
- int (*orig_unary_op)(zval *result, zval *op1);
- int (*orig_binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
- zval function_name_copy;
-
- *retval_ptr_ptr = NULL;
-
- if (function_name->type==IS_ARRAY) { /* assume array($obj, $name) couple */
- zval **tmp_object_ptr, **tmp_real_function_name;
-
- if (zend_hash_index_find(function_name->value.ht, 0, (void **) &tmp_object_ptr)==FAILURE) {
- return FAILURE;
- }
- if (zend_hash_index_find(function_name->value.ht, 1, (void **) &tmp_real_function_name)==FAILURE) {
- return FAILURE;
- }
- function_name = *tmp_real_function_name;
- SEPARATE_ZVAL_IF_NOT_REF(tmp_object_ptr);
- object_pp = tmp_object_ptr;
- (*object_pp)->is_ref = 1;
- }
-
- if (object_pp && !*object_pp) {
- object_pp = NULL;
- }
- if (object_pp) {
- if (Z_TYPE_PP(object_pp) == IS_OBJECT) {
- function_table = &Z_OBJCE_PP(object_pp)->function_table;
- } else if (Z_TYPE_PP(object_pp) == IS_STRING) {
- zend_class_entry *ce;
- char *lc_class;
- int found;
-
- lc_class = estrndup(Z_STRVAL_PP(object_pp), Z_STRLEN_PP(object_pp));
- zend_str_tolower(lc_class, Z_STRLEN_PP(object_pp));
- found = zend_hash_find(EG(class_table), lc_class, Z_STRLEN_PP(object_pp) + 1, (void **) &ce);
- efree(lc_class);
- if (found == FAILURE)
- return FAILURE;
-
- function_table = &ce->function_table;
- object_pp = NULL;
- } else
- return FAILURE;
- }
-
- if (function_name->type!=IS_STRING) {
- return FAILURE;
- }
-
- function_name_copy = *function_name;
- zval_copy_ctor(&function_name_copy);
- zend_str_tolower(function_name_copy.value.str.val, function_name_copy.value.str.len);
-
- original_function_state_ptr = EG(function_state_ptr);
- if (zend_hash_find(function_table, function_name_copy.value.str.val, function_name_copy.value.str.len+1, (void **) &function_state.function)==FAILURE) {
- zval_dtor(&function_name_copy);
- return FAILURE;
- }
- zval_dtor(&function_name_copy);
-
- for (i=0; i<param_count; i++) {
- zval *param;
-
- if (function_state.function->common.arg_types
- && i<function_state.function->common.arg_types[0]
- && function_state.function->common.arg_types[i+1]==BYREF_FORCE
- && !PZVAL_IS_REF(*params[i])) {
- if ((*params[i])->refcount>1) {
- zval *new_zval;
-
- if (no_separation) {
- return FAILURE;
- }
- ALLOC_ZVAL(new_zval);
- *new_zval = **params[i];
- zval_copy_ctor(new_zval);
- new_zval->refcount = 1;
- (*params[i])->refcount--;
- *params[i] = new_zval;
- }
- (*params[i])->refcount++;
- (*params[i])->is_ref = 1;
- param = *params[i];
- } else if (*params[i] != &EG(uninitialized_zval)) {
- (*params[i])->refcount++;
- param = *params[i];
- } else {
- ALLOC_ZVAL(param);
- *param = **(params[i]);
- INIT_PZVAL(param);
- }
- zend_ptr_stack_push(&EG(argument_stack), param);
- }
-
- zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (long) param_count, NULL);
-
- EG(function_state_ptr) = &function_state;
-
- if (function_state.function->type == ZEND_USER_FUNCTION) {
- calling_symbol_table = EG(active_symbol_table);
- if (symbol_table) {
- EG(active_symbol_table) = symbol_table;
- } else {
- ALLOC_HASHTABLE(EG(active_symbol_table));
- zend_hash_init(EG(active_symbol_table), 0, NULL, ZVAL_PTR_DTOR, 0);
- }
- if (object_pp) {
- zval *dummy, **this_ptr;
-
- ALLOC_ZVAL(dummy);
- INIT_ZVAL(*dummy);
- zend_hash_update(EG(active_symbol_table), "this", sizeof("this"), &dummy, sizeof(zval *), (void **) &this_ptr);
- zend_assign_to_variable_reference(NULL, this_ptr, object_pp, NULL TSRMLS_CC);
- }
- original_return_value = EG(return_value_ptr_ptr);
- original_op_array = EG(active_op_array);
- EG(return_value_ptr_ptr) = retval_ptr_ptr;
- EG(active_op_array) = (zend_op_array *) function_state.function;
- original_opline_ptr = EG(opline_ptr);
- orig_free_op1 = EG(free_op1);
- orig_free_op2 = EG(free_op2);
- orig_unary_op = EG(unary_op);
- orig_binary_op = EG(binary_op);
- zend_execute(EG(active_op_array) TSRMLS_CC);
- if (!symbol_table) {
- zend_hash_destroy(EG(active_symbol_table));
- FREE_HASHTABLE(EG(active_symbol_table));
- }
- EG(active_symbol_table) = calling_symbol_table;
- EG(active_op_array) = original_op_array;
- EG(return_value_ptr_ptr)=original_return_value;
- EG(opline_ptr) = original_opline_ptr;
- EG(free_op1) = orig_free_op1;
- EG(free_op2) = orig_free_op2;
- EG(unary_op) = orig_unary_op;
- EG(binary_op) = orig_binary_op;
- } else {
- ALLOC_INIT_ZVAL(*retval_ptr_ptr);
- ((zend_internal_function *) function_state.function)->handler(param_count, *retval_ptr_ptr, (object_pp?*object_pp:NULL), 1 TSRMLS_CC);
- INIT_PZVAL(*retval_ptr_ptr);
- }
- zend_ptr_stack_clear_multiple(TSRMLS_C);
- EG(function_state_ptr) = original_function_state_ptr;
-
- return SUCCESS;
-}
-
-
-ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC)
-{
- zval pv;
- zend_op_array *new_op_array;
- zend_op_array *original_active_op_array = EG(active_op_array);
- zend_function_state *original_function_state_ptr = EG(function_state_ptr);
- int original_handle_op_arrays;
- int retval;
-
- if (retval_ptr) {
- pv.value.str.len = strlen(str)+sizeof("return ;")-1;
- pv.value.str.val = emalloc(pv.value.str.len+1);
- strcpy(pv.value.str.val, "return ");
- strcat(pv.value.str.val, str);
- strcat(pv.value.str.val, " ;");
- } else {
- pv.value.str.len = strlen(str);
- pv.value.str.val = estrndup(str, pv.value.str.len);
- }
- pv.type = IS_STRING;
-
- /*printf("Evaluating '%s'\n", pv.value.str.val);*/
-
- original_handle_op_arrays = CG(handle_op_arrays);
- CG(handle_op_arrays) = 0;
- new_op_array = compile_string(&pv, string_name TSRMLS_CC);
- CG(handle_op_arrays) = original_handle_op_arrays;
-
- if (new_op_array) {
- zval *local_retval_ptr=NULL;
- zval **original_return_value_ptr_ptr = EG(return_value_ptr_ptr);
- zend_op **original_opline_ptr = EG(opline_ptr);
-
- EG(return_value_ptr_ptr) = &local_retval_ptr;
- EG(active_op_array) = new_op_array;
- EG(no_extensions)=1;
-
- zend_execute(new_op_array TSRMLS_CC);
-
- if (local_retval_ptr) {
- if (retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
- } else {
- zval_ptr_dtor(&local_retval_ptr);
- }
- } else {
- if (retval_ptr) {
- INIT_ZVAL(*retval_ptr);
- }
- }
-
- EG(no_extensions)=0;
- EG(opline_ptr) = original_opline_ptr;
- EG(active_op_array) = original_active_op_array;
- EG(function_state_ptr) = original_function_state_ptr;
- destroy_op_array(new_op_array);
- efree(new_op_array);
- EG(return_value_ptr_ptr) = original_return_value_ptr_ptr;
- retval = SUCCESS;
- } else {
- retval = FAILURE;
- }
- zval_dtor(&pv);
- return retval;
-}
-
-
-void execute_new_code(TSRMLS_D)
-{
- zend_op *opline, *end;
- zend_op *ret_opline;
- zval *local_retval=NULL;
-
- if (!CG(interactive)
- || CG(active_op_array)->backpatch_count>0
- || CG(active_op_array)->function_name
- || CG(active_op_array)->type!=ZEND_USER_FUNCTION) {
- return;
- }
-
- ret_opline = get_next_op(CG(active_op_array) TSRMLS_CC);
- ret_opline->opcode = ZEND_RETURN;
- ret_opline->op1.op_type = IS_CONST;
- INIT_ZVAL(ret_opline->op1.u.constant);
- SET_UNUSED(ret_opline->op2);
-
- if (!CG(active_op_array)->start_op) {
- CG(active_op_array)->start_op = CG(active_op_array)->opcodes;
- }
-
- opline=CG(active_op_array)->start_op;
- end=CG(active_op_array)->opcodes+CG(active_op_array)->last;
-
- while (opline<end) {
- if (opline->op1.op_type==IS_CONST) {
- opline->op1.u.constant.is_ref = 1;
- opline->op1.u.constant.refcount = 2; /* Make sure is_ref won't be reset */
- }
- if (opline->op2.op_type==IS_CONST) {
- opline->op2.u.constant.is_ref = 1;
- opline->op2.u.constant.refcount = 2;
- }
- opline++;
- }
-
- EG(return_value_ptr_ptr) = &local_retval;
- EG(active_op_array) = CG(active_op_array);
- zend_execute(CG(active_op_array) TSRMLS_CC);
- if (local_retval) {
- zval_ptr_dtor(&local_retval);
- }
-
- CG(active_op_array)->last--; /* get rid of that ZEND_RETURN */
- CG(active_op_array)->start_op = CG(active_op_array)->opcodes+CG(active_op_array)->last;
-}
-
-
-ZEND_API void zend_timeout(int dummy)
-{
- TSRMLS_FETCH();
-
- /* is there any point in this? we're terminating the request anyway...
- PG(connection_status) |= PHP_CONNECTION_TIMEOUT;
- */
- zend_error(E_ERROR, "Maximum execution time of %d second%s exceeded",
- EG(timeout_seconds), EG(timeout_seconds) == 1 ? "" : "s");
-}
-
-
-#ifdef ZEND_WIN32
-static LRESULT CALLBACK zend_timeout_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message) {
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- case WM_REGISTER_ZEND_TIMEOUT:
- /* wParam is the thread id pointer, lParam is the timeout amount in seconds */
- if (lParam==0) {
- KillTimer(timeout_window, wParam);
- } else {
- SetTimer(timeout_window, wParam, lParam*1000, NULL);
- }
- break;
- case WM_UNREGISTER_ZEND_TIMEOUT:
- /* wParam is the thread id pointer */
- KillTimer(timeout_window, wParam);
- break;
- case WM_TIMER: {
-#ifdef ZTS
- void ***tsrm_ls;
-
- tsrm_ls = ts_resource_ex(0, &wParam);
- if (!tsrm_ls) {
- /* Thread died before receiving its timeout? */
- break;
- }
-#endif
- KillTimer(timeout_window, wParam);
- EG(timed_out) = 1;
- }
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
-}
-
-
-
-static unsigned __stdcall timeout_thread_proc(void *pArgs)
-{
- MSG message;
-
- wc.style=0;
- wc.lpfnWndProc = zend_timeout_WndProc;
- wc.cbClsExtra=0;
- wc.cbWndExtra=0;
- wc.hInstance=NULL;
- wc.hIcon=NULL;
- wc.hCursor=NULL;
- wc.hbrBackground=(HBRUSH)(COLOR_BACKGROUND + 5);
- wc.lpszMenuName=NULL;
- wc.lpszClassName = "Zend Timeout Window";
- if (!RegisterClass(&wc)) {
- return -1;
- }
- timeout_window = CreateWindow(wc.lpszClassName, wc.lpszClassName, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL);
- SetEvent(timeout_thread_event);
- while (GetMessage(&message, NULL, 0, 0)) {
- SendMessage(timeout_window, message.message, message.wParam, message.lParam);
- if (message.message == WM_QUIT) {
- break;
- }
- }
- DestroyWindow(timeout_window);
- UnregisterClass(wc.lpszClassName, NULL);
- return 0;
-}
-
-
-void zend_init_timeout_thread()
-{
- timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL);
- _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id);
- WaitForSingleObject(timeout_thread_event, INFINITE);
-}
-
-
-void zend_shutdown_timeout_thread()
-{
- if (!timeout_thread_initialized) {
- return;
- }
- PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0);
-}
-
-#endif
-
-/* This one doesn't exists on QNX */
-#ifndef SIGPROF
-#define SIGPROF 27
-#endif
-
-void zend_set_timeout(long seconds)
-{
- TSRMLS_FETCH();
-
- EG(timeout_seconds) = seconds;
-#ifdef ZEND_WIN32
- if (timeout_thread_initialized==0 && InterlockedIncrement(&timeout_thread_initialized)==1) {
- /* We start up this process-wide thread here and not in zend_startup(), because if Zend
- * is initialized inside a DllMain(), you're not supposed to start threads from it.
- */
- zend_init_timeout_thread();
- }
- PostThreadMessage(timeout_thread_id, WM_REGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) seconds);
-#else
-# ifdef HAVE_SETITIMER
- {
- struct itimerval t_r; /* timeout requested */
- sigset_t sigset;
-
- t_r.it_value.tv_sec = seconds;
- t_r.it_value.tv_usec = t_r.it_interval.tv_sec = t_r.it_interval.tv_usec = 0;
-
- setitimer(ITIMER_PROF, &t_r, NULL);
- signal(SIGPROF, zend_timeout);
- sigemptyset(&sigset);
- sigaddset(&sigset, SIGPROF);
- sigprocmask(SIG_UNBLOCK, &sigset, NULL);
- }
-# endif
-#endif
-}
-
-
-void zend_unset_timeout(TSRMLS_D)
-{
-#ifdef ZEND_WIN32
- PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0);
-#else
-# ifdef HAVE_SETITIMER
- {
- struct itimerval no_timeout;
-
- no_timeout.it_value.tv_sec = no_timeout.it_value.tv_usec = no_timeout.it_interval.tv_sec = no_timeout.it_interval.tv_usec = 0;
-
- setitimer(ITIMER_PROF, &no_timeout, NULL);
- }
-# endif
-#endif
-}
diff --git a/Zend/zend_execute_locks.h b/Zend/zend_execute_locks.h
deleted file mode 100644
index 88381268a2..0000000000
--- a/Zend/zend_execute_locks.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef ZEND_EXECUTE_LOCKS_H
-#define ZEND_EXECUTE_LOCKS_H
-
-#define PZVAL_LOCK(z) zend_pzval_lock_func(z)
-
-static inline void zend_pzval_lock_func(zval *z)
-{
- z->refcount++;
-}
-
-#define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z TSRMLS_CC)
-
-static inline void zend_pzval_unlock_func(zval *z TSRMLS_DC)
-{
- z->refcount--;
- if (!z->refcount) {
- z->refcount = 1;
- z->is_ref = 0;
- EG(garbage)[EG(garbage_ptr)++] = z;
- }
-}
-
-static inline void zend_clean_garbage(TSRMLS_D)
-{
- while (EG(garbage_ptr)) {
- zval_ptr_dtor(&EG(garbage)[--EG(garbage_ptr)]);
- }
-}
-
-#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); }
-
-#endif /* ZEND_EXECUTE_LOCKS_H */
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c
deleted file mode 100644
index 0c59ab1c4c..0000000000
--- a/Zend/zend_extensions.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend_extensions.h"
-
-ZEND_API zend_llist zend_extensions;
-static int last_resource_number;
-
-int zend_load_extension(char *path)
-{
-#if ZEND_EXTENSIONS_SUPPORT
- DL_HANDLE handle;
- zend_extension *new_extension;
- zend_extension_version_info *extension_version_info;
-
- handle = DL_LOAD(path);
- if (!handle) {
-#ifndef ZEND_WIN32
- fprintf(stderr, "Failed loading %s: %s\n", path, dlerror());
-#else
- fprintf(stderr, "Failed loading %s\n", path);
-#endif
- return FAILURE;
- }
-
- extension_version_info = (zend_extension_version_info *) DL_FETCH_SYMBOL(handle, "extension_version_info");
- new_extension = (zend_extension *) DL_FETCH_SYMBOL(handle, "zend_extension_entry");
- if (!extension_version_info || !new_extension) {
- fprintf(stderr, "%s doesn't appear to be a valid Zend extension\n", path);
- return FAILURE;
- }
-
-
- /* allow extension to proclaim compatibility with any Zend version */
- if (extension_version_info->zend_extension_api_no != ZEND_EXTENSION_API_NO &&(!new_extension->api_no_check || new_extension->api_no_check(ZEND_EXTENSION_API_NO) != SUCCESS)) {
- if (extension_version_info->zend_extension_api_no > ZEND_EXTENSION_API_NO) {
- fprintf(stderr, "%s requires Zend Engine API version %d.\n"
- "The Zend Engine API version %d which is installed, is outdated.\n\n",
- new_extension->name,
- extension_version_info->zend_extension_api_no,
- ZEND_EXTENSION_API_NO);
- DL_UNLOAD(handle);
- return FAILURE;
- } else if (extension_version_info->zend_extension_api_no < ZEND_EXTENSION_API_NO) {
- fprintf(stderr, "%s requires Zend Engine API version %d.\n"
- "The Zend Engine API version %d which is installed, is newer.\n"
- "Contact %s at %s for a later version of %s.\n\n",
- new_extension->name,
- extension_version_info->zend_extension_api_no,
- ZEND_EXTENSION_API_NO,
- new_extension->author,
- new_extension->URL,
- new_extension->name);
- DL_UNLOAD(handle);
- return FAILURE;
- }
- } else if (ZTS_V!=extension_version_info->thread_safe) {
- fprintf(stderr, "Cannot load %s - it %s thread safe, whereas Zend %s\n",
- new_extension->name,
- (extension_version_info->thread_safe?"is":"isn't"),
- (ZTS_V?"is":"isn't"));
- DL_UNLOAD(handle);
- return FAILURE;
- } else if (ZEND_DEBUG!=extension_version_info->debug) {
- fprintf(stderr, "Cannot load %s - it %s debug information, whereas Zend %s\n",
- new_extension->name,
- (extension_version_info->debug?"contains":"does not contain"),
- (ZEND_DEBUG?"does":"does not"));
- DL_UNLOAD(handle);
- return FAILURE;
- }
-
- return zend_register_extension(new_extension, handle);
-#else
- fprintf(stderr, "Extensions are not supported on this platform.\n");
- return FAILURE;
-#endif
-}
-
-
-int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle)
-{
-#if ZEND_EXTENSIONS_SUPPORT
- zend_extension extension;
-
- extension = *new_extension;
- extension.handle = handle;
-
- zend_extension_dispatch_message(ZEND_EXTMSG_NEW_EXTENSION, &extension);
-
- zend_llist_add_element(&zend_extensions, &extension);
-
- /*fprintf(stderr, "Loaded %s, version %s\n", extension.name, extension.version);*/
-#endif
-
- return SUCCESS;
-}
-
-
-static void zend_extension_shutdown(zend_extension *extension TSRMLS_DC)
-{
-#if ZEND_EXTENSIONS_SUPPORT
- if (extension->shutdown) {
- extension->shutdown(extension);
- }
-#endif
-}
-
-static int zend_extension_startup(zend_extension *extension)
-{
-#if ZEND_EXTENSIONS_SUPPORT
- if (extension->startup) {
- if (extension->startup(extension)!=SUCCESS) {
- return 1;
- }
- zend_append_version_info(extension);
- }
-#endif
- return 0;
-}
-
-
-int zend_startup_extensions_mechanism()
-{
- /* Startup extensions mechanism */
- zend_llist_init(&zend_extensions, sizeof(zend_extension), (void (*)(void *)) zend_extension_dtor, 1);
- last_resource_number = 0;
- return SUCCESS;
-}
-
-
-int zend_startup_extensions()
-{
- zend_llist_apply_with_del(&zend_extensions, (int (*)(void *)) zend_extension_startup);
- return SUCCESS;
-}
-
-
-void zend_shutdown_extensions(TSRMLS_D)
-{
- zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_shutdown TSRMLS_CC);
- zend_llist_destroy(&zend_extensions);
-}
-
-
-void zend_extension_dtor(zend_extension *extension)
-{
-#if ZEND_EXTENSIONS_SUPPORT && !ZEND_DEBUG
- if (extension->handle) {
- DL_UNLOAD(extension->handle);
- }
-#endif
-}
-
-
-static void zend_extension_message_dispatcher(zend_extension *extension, int num_args, va_list args TSRMLS_DC)
-{
- int message;
- void *arg;
-
- if (!extension->message_handler || num_args!=2) {
- return;
- }
- message = va_arg(args, int);
- arg = va_arg(args, void *);
- extension->message_handler(message, arg);
-}
-
-
-ZEND_API void zend_extension_dispatch_message(int message, void *arg)
-{
- TSRMLS_FETCH();
-
- zend_llist_apply_with_arguments(&zend_extensions, (llist_apply_with_args_func_t) zend_extension_message_dispatcher TSRMLS_CC, 2, message, arg);
-}
-
-
-ZEND_API int zend_get_resource_handle(zend_extension *extension)
-{
- if (last_resource_number<ZEND_MAX_RESERVED_RESOURCES) {
- extension->resource_number = last_resource_number;
- return last_resource_number++;
- } else {
- return -1;
- }
-}
-
-
-ZEND_API zend_extension *zend_get_extension(char *extension_name)
-{
- zend_llist_element *element;
-
- for (element = zend_extensions.head; element; element = element->next) {
- zend_extension *extension = (zend_extension *) element->data;
-
- if (!strcmp(extension->name, extension_name)) {
- return extension;
- }
- }
- return NULL;
-}
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
deleted file mode 100644
index c5d69808b2..0000000000
--- a/Zend/zend_extensions.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_EXTENSIONS_H
-#define ZEND_EXTENSIONS_H
-
-#include "zend_compile.h"
-
-#define ZEND_EXTENSION_API_NO 20010710
-
-typedef struct _zend_extension_version_info {
- int zend_extension_api_no;
- char *required_zend_version;
- unsigned char thread_safe;
- unsigned char debug;
-} zend_extension_version_info;
-
-
-typedef struct _zend_extension zend_extension;
-
-/* Typedef's for zend_extension function pointers */
-typedef int (*startup_func_t)(zend_extension *extension);
-typedef void (*shutdown_func_t)(zend_extension *extension);
-typedef void (*activate_func_t)(void);
-typedef void (*deactivate_func_t)(void);
-
-typedef void (*message_handler_func_t)(int message, void *arg);
-
-typedef void (*op_array_handler_func_t)(zend_op_array *op_array);
-
-typedef void (*statement_handler_func_t)(zend_op_array *op_array);
-typedef void (*fcall_begin_handler_func_t)(zend_op_array *op_array);
-typedef void (*fcall_end_handler_func_t)(zend_op_array *op_array);
-
-typedef void (*op_array_ctor_func_t)(zend_op_array *op_array);
-typedef void (*op_array_dtor_func_t)(zend_op_array *op_array);
-
-struct _zend_extension {
- char *name;
- char *version;
- char *author;
- char *URL;
- char *copyright;
-
- startup_func_t startup;
- shutdown_func_t shutdown;
- activate_func_t activate;
- deactivate_func_t deactivate;
-
- message_handler_func_t message_handler;
-
- op_array_handler_func_t op_array_handler;
-
- statement_handler_func_t statement_handler;
- fcall_begin_handler_func_t fcall_begin_handler;
- fcall_end_handler_func_t fcall_end_handler;
-
- op_array_ctor_func_t op_array_ctor;
- op_array_dtor_func_t op_array_dtor;
-
- int (*api_no_check)(int api_no);
- void *reserved2;
- void *reserved3;
- void *reserved4;
- void *reserved5;
- void *reserved6;
- void *reserved7;
- void *reserved8;
-
- DL_HANDLE handle;
- int resource_number;
-};
-
-
-ZEND_API int zend_get_resource_handle(zend_extension *extension);
-ZEND_API void zend_extension_dispatch_message(int message, void *arg);
-
-#define ZEND_EXTMSG_NEW_EXTENSION 1
-
-
-#define ZEND_EXTENSION() \
- ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, ZEND_VERSION, ZTS_V, ZEND_DEBUG }
-
-#define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
-#define COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
-
-
-ZEND_API extern zend_llist zend_extensions;
-
-void zend_extension_dtor(zend_extension *extension);
-ZEND_API int zend_load_extension(char *path);
-ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle);
-void zend_append_version_info(zend_extension *extension);
-int zend_startup_extensions_mechanism(void);
-int zend_startup_extensions(void);
-void zend_shutdown_extensions(TSRMLS_D);
-ZEND_API zend_extension *zend_get_extension(char *extension_name);
-
-#endif /* ZEND_EXTENSIONS_H */
diff --git a/Zend/zend_fast_cache.h b/Zend/zend_fast_cache.h
deleted file mode 100644
index c57983d7ff..0000000000
--- a/Zend/zend_fast_cache.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_FAST_CACHE_H
-#define ZEND_FAST_CACHE_H
-
-#ifndef ZEND_ENABLE_FAST_CACHE
-# if ZEND_DEBUG
-# define ZEND_ENABLE_FAST_CACHE 0
-# else
-# define ZEND_ENABLE_FAST_CACHE 1
-# endif
-#endif
-
-typedef struct _zend_fast_cache_list_entry {
- struct _zend_fast_cache_list_entry *next;
-} zend_fast_cache_list_entry;
-
-#define MAX_FAST_CACHE_TYPES 4
-
-
-#define ZVAL_CACHE_LIST 0
-#define HASHTABLE_CACHE_LIST 1
-
-#if ZEND_ENABLE_FAST_CACHE
-
-
-#include "zend_globals.h"
-#include "zend_globals_macros.h"
-#include "zend_alloc.h"
-
-
-#if ZEND_DEBUG
-# define RECORD_ZVAL_CACHE_HIT(fc_type) AG(fast_cache_stats)[fc_type][1]++;
-# define RECORD_ZVAL_CACHE_MISS(fc_type) AG(fast_cache_stats)[fc_type][0]++;
-#else
-# define RECORD_ZVAL_CACHE_HIT(fc_type)
-# define RECORD_ZVAL_CACHE_MISS(fc_type)
-#endif
-
-
-#define ZEND_FAST_ALLOC(p, type, fc_type) \
- { \
- TSRMLS_FETCH(); \
- \
- if (((p) = (type *) AG(fast_cache_list_head)[fc_type])) { \
- AG(fast_cache_list_head)[fc_type] = ((zend_fast_cache_list_entry *) AG(fast_cache_list_head)[fc_type])->next; \
- RECORD_ZVAL_CACHE_HIT(fc_type); \
- } else { \
- (p) = (type *) emalloc(sizeof(type)); \
- RECORD_ZVAL_CACHE_MISS(fc_type); \
- } \
- }
-
-
-#define ZEND_FAST_FREE(p, fc_type) \
- { \
- TSRMLS_FETCH(); \
- \
- ((zend_fast_cache_list_entry *) (p))->next = (zend_fast_cache_list_entry *) AG(fast_cache_list_head)[fc_type]; \
- AG(fast_cache_list_head)[fc_type] = (zend_fast_cache_list_entry *) (p); \
- }
-
-#define ZEND_FAST_ALLOC_REL(p, type, fc_type) \
- ZEND_FAST_ALLOC(p, type, fc_type)
-
-#define ZEND_FAST_FREE_REL(p, fc_type) \
- ZEND_FAST_FREE(p, fc_type)
-
-
-#else /* !ZEND_ENABLE_FAST_CACHE */
-
-#define ZEND_FAST_ALLOC(p, type, fc_type) \
- (p) = (type *) emalloc(sizeof(type))
-
-#define ZEND_FAST_FREE(p, fc_type) \
- efree(p)
-
-#define ZEND_FAST_ALLOC_REL(p, type, fc_type) \
- (p) = (type *) emalloc_rel(sizeof(type))
-
-#define ZEND_FAST_FREE_REL(p, fc_type) \
- efree_rel(p)
-
-#endif /* ZEND_ENABLE_FAST_CACHE */
-
-
-
-
-/* fast cache for zval's */
-#define ALLOC_ZVAL(z) \
- ZEND_FAST_ALLOC(z, zval, ZVAL_CACHE_LIST)
-
-#define FREE_ZVAL(z) \
- ZEND_FAST_FREE(z, ZVAL_CACHE_LIST)
-
-#define ALLOC_ZVAL_REL(z) \
- ZEND_FAST_ALLOC_REL(z, zval, ZVAL_CACHE_LIST)
-
-#define FREE_ZVAL_REL(z) \
- ZEND_FAST_FREE_REL(z, ZVAL_CACHE_LIST)
-
-/* fast cache for HashTables */
-#define ALLOC_HASHTABLE(ht) \
- ZEND_FAST_ALLOC(ht, HashTable, HASHTABLE_CACHE_LIST)
-
-#define FREE_HASHTABLE(ht) \
- ZEND_FAST_FREE(ht, HASHTABLE_CACHE_LIST)
-
-#define ALLOC_HASHTABLE_REL(ht) \
- ZEND_FAST_ALLOC_REL(ht, HashTable, HASHTABLE_CACHE_LIST)
-
-#define FREE_HASHTABLE_REL(ht) \
- ZEND_FAST_FREE_REL(ht, HASHTABLE_CACHE_LIST)
-
-#endif /* ZEND_FAST_CACHE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
deleted file mode 100644
index d6001aac43..0000000000
--- a/Zend/zend_globals.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_GLOBALS_H
-#define ZEND_GLOBALS_H
-
-
-#include <setjmp.h>
-
-#include "zend_globals_macros.h"
-
-#include "zend_stack.h"
-#include "zend_ptr_stack.h"
-#include "zend_hash.h"
-#include "zend_llist.h"
-#include "zend_fast_cache.h"
-
-/* Define ZTS if you want a thread-safe Zend */
-/*#undef ZTS*/
-
-#ifdef ZTS
-
-BEGIN_EXTERN_C()
-ZEND_API extern int compiler_globals_id;
-ZEND_API extern int executor_globals_id;
-ZEND_API extern int alloc_globals_id;
-END_EXTERN_C()
-
-#endif
-
-#define SYMTABLE_CACHE_SIZE 32
-
-
-#include "zend_compile.h"
-
-/* excpt.h on Digital Unix 4.0 defines function_table */
-#undef function_table
-
-
-typedef struct _zend_declarables {
- zval ticks;
-} zend_declarables;
-
-
-struct _zend_compiler_globals {
- zend_stack bp_stack;
- zend_stack switch_cond_stack;
- zend_stack foreach_copy_stack;
- zend_stack object_stack;
- zend_stack declare_stack;
-
- zend_class_entry *active_class_entry;
- zval active_ce_parent_class_name;
-
- /* variables for list() compilation */
- zend_llist list_llist;
- zend_llist dimension_llist;
- zend_stack list_stack;
-
- zend_stack function_call_stack;
-
- char *compiled_filename;
-
- int zend_lineno;
- int comment_start_line;
- char *heredoc;
- int heredoc_len;
-
- zend_op_array *active_op_array;
-
- zend_class_entry main_class;
- HashTable *function_table; /* function symbol table */
- HashTable *class_table; /* class table */
-
- HashTable filenames_table;
-
- HashTable *auto_globals;
-
- zend_bool in_compilation;
- zend_bool short_tags;
- zend_bool asp_tags;
- zend_bool allow_call_time_pass_reference;
-
- zend_declarables declarables;
-
- /* For extensions support */
- zend_bool extended_info; /* generate extension information for debugger/profiler */
- zend_bool handle_op_arrays; /* run op_arrays through op_array handlers */
-
- zend_bool unclean_shutdown;
-
- zend_bool ini_parser_unbuffered_errors;
-
- zend_llist open_files;
-
- zend_llist *throw_list;
-
- struct _zend_ini_parser_param *ini_parser_param;
-
- int interactive;
-
- zend_bool increment_lineno;
-};
-
-
-struct _zend_executor_globals {
- zval **return_value_ptr_ptr;
-
- zval uninitialized_zval;
- zval *uninitialized_zval_ptr;
-
- zval error_zval;
- zval *error_zval_ptr;
-
- zend_function_state *function_state_ptr;
- zend_ptr_stack arg_types_stack;
-
- /* symbol table cache */
- HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
- HashTable **symtable_cache_limit;
- HashTable **symtable_cache_ptr;
-
- zend_op **opline_ptr;
-
- HashTable *active_symbol_table;
- HashTable symbol_table; /* main symbol table */
-
- HashTable included_files; /* files already included */
-
- jmp_buf bailout;
-
- int error_reporting;
- int orig_error_reporting;
- int exit_status;
-
- zend_op_array *active_op_array;
-
- HashTable *function_table; /* function symbol table */
- HashTable *class_table; /* class table */
- HashTable *zend_constants; /* constants table */
-
- zend_class_entry *namespace;
-
- long precision;
-
- int ticks_count;
-
- zend_bool in_execution;
- zend_bool bailout_set;
- zend_bool full_tables_cleanup;
-
- /* for extended information support */
- zend_bool no_extensions;
-
-#ifdef ZEND_WIN32
- zend_bool timed_out;
-#endif
-
- HashTable regular_list;
- HashTable persistent_list;
-
- zend_ptr_stack argument_stack;
- int free_op1, free_op2;
- int (*unary_op)(zval *result, zval *op1);
- int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-
- zval *garbage[2];
- int garbage_ptr;
-
- zval *user_error_handler;
- zend_ptr_stack user_error_handlers;
-
- /* timeout support */
- int timeout_seconds;
-
- int lambda_count;
-
- HashTable ini_directives;
- zend_objects objects;
- zval *exception;
-
- void *reserved[ZEND_MAX_RESERVED_RESOURCES];
-};
-
-
-struct _zend_alloc_globals {
- zend_mem_header *head; /* standard list */
- zend_mem_header *phead; /* persistent list */
- void *cache[MAX_CACHED_MEMORY][MAX_CACHED_ENTRIES];
- unsigned int cache_count[MAX_CACHED_MEMORY];
- void *fast_cache_list_head[MAX_FAST_CACHE_TYPES];
-
-#ifdef ZEND_WIN32
- HANDLE memory_heap;
-#endif
-
-#if ZEND_DEBUG
- /* for performance tuning */
- int cache_stats[MAX_CACHED_MEMORY][2];
- int fast_cache_stats[MAX_FAST_CACHE_TYPES][2];
-#endif
-#if MEMORY_LIMIT
- unsigned int memory_limit;
- unsigned int allocated_memory;
- unsigned int allocated_memory_peak;
- unsigned char memory_exhausted;
-#endif
-};
-
-struct _zend_scanner_globals {
- FILE *yy_in;
- FILE *yy_out;
- int yy_leng;
- char *yy_text;
- struct yy_buffer_state *current_buffer;
- char *c_buf_p;
- int init;
- int start;
- char _yy_hold_char;
- int yy_n_chars;
- int _yy_did_buffer_switch_on_eof;
- int _yy_last_accepting_state; /* Must be of the same type as yy_state_type,
- * if for whatever reason it's no longer int!
- */
- char *_yy_last_accepting_cpos;
- int _yy_more_flag;
- int _yy_more_len;
-};
-
-#endif /* ZEND_GLOBALS_H */
diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h
deleted file mode 100644
index 1c6fb3d4c6..0000000000
--- a/Zend/zend_globals_macros.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_GLOBALS_MACROS_H
-#define ZEND_GLOBALS_MACROS_H
-
-typedef struct _zend_compiler_globals zend_compiler_globals;
-typedef struct _zend_executor_globals zend_executor_globals;
-typedef struct _zend_alloc_globals zend_alloc_globals;
-typedef struct _zend_scanner_globals zend_scanner_globals;
-
-/* Compiler */
-#ifdef ZTS
-# define CG(v) TSRMG(compiler_globals_id, zend_compiler_globals *, v)
-BEGIN_EXTERN_C()
-int zendparse(void *compiler_globals);
-END_EXTERN_C()
-#else
-# define CG(v) (compiler_globals.v)
-extern ZEND_API struct _zend_compiler_globals compiler_globals;
-int zendparse(void);
-#endif
-
-
-/* Executor */
-#ifdef ZTS
-# define EG(v) TSRMG(executor_globals_id, zend_executor_globals *, v)
-#else
-# define EG(v) (executor_globals.v)
-extern ZEND_API zend_executor_globals executor_globals;
-#endif
-
-
-/* Memory Manager */
-#ifdef ZTS
-# define AG(v) TSRMG(alloc_globals_id, zend_alloc_globals *, v)
-#else
-# define AG(v) (alloc_globals.v)
-extern ZEND_API zend_alloc_globals alloc_globals;
-#endif
-
-
-/* Language Scanner */
-#ifdef ZTS
-# define LANG_SCNG(v) TSRMG(language_scanner_globals_id, zend_scanner_globals *, v)
-extern ZEND_API ts_rsrc_id language_scanner_globals_id;
-#else
-# define LANG_SCNG(v) (language_scanner_globals.v)
-extern ZEND_API zend_scanner_globals language_scanner_globals;
-#endif
-
-
-/* INI Scanner */
-#ifdef ZTS
-# define INI_SCNG(v) TSRMG(ini_scanner_globals_id, zend_scanner_globals *, v)
-extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
-#else
-# define INI_SCNG(v) (ini_scanner_globals.v)
-extern ZEND_API zend_scanner_globals ini_scanner_globals;
-#endif
-
-
-/* For limited downwards source compatibility */
-#define CLS_FETCH()
-#define ELS_FETCH()
-#define ALS_FETCH()
-#define PLS_FETCH()
-#define SLS_FETCH()
-#define CLS_D
-#define ELS_D
-#define ALS_D
-#define PLS_D
-#define SLS_D
-#define CLS_DC
-#define ELS_DC
-#define ALS_DC
-#define PLS_DC
-#define SLS_DC
-#define CLS_C
-#define ELS_C
-#define ALS_C
-#define PLS_C
-#define SLS_C
-#define CLS_CC
-#define ELS_CC
-#define ALS_CC
-#define PLS_CC
-#define SLS_CC
-
-
-#endif /* ZEND_GLOBALS_MACROS_H */
-
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
deleted file mode 100644
index 4c0c84b04a..0000000000
--- a/Zend/zend_hash.c
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#define HANDLE_NUMERIC(key, length, func) { \
- register char *tmp=key; \
- \
- if ((*tmp>='0' && *tmp<='9')) do { /* possibly a numeric index */ \
- char *end=tmp+length-1; \
- ulong idx; \
- \
- if (*tmp++=='0' && length>2) { /* don't accept numbers with leading zeros */ \
- break; \
- } \
- while (tmp<end) { \
- if (!(*tmp>='0' && *tmp<='9')) { \
- break; \
- } \
- tmp++; \
- } \
- if (tmp==end && *tmp=='\0') { /* a numeric index */ \
- idx = strtol(key, NULL, 10); \
- if (idx!=LONG_MAX) { \
- return func; \
- } \
- } \
- } while (0); \
-}
-
-
-#define CONNECT_TO_BUCKET_DLLIST(element, list_head) \
- (element)->pNext = (list_head); \
- (element)->pLast = NULL; \
- if ((element)->pNext) { \
- (element)->pNext->pLast = (element); \
- }
-
-#define CONNECT_TO_GLOBAL_DLLIST(element, ht) \
- (element)->pListLast = (ht)->pListTail; \
- (ht)->pListTail = (element); \
- (element)->pListNext = NULL; \
- if ((element)->pListLast != NULL) { \
- (element)->pListLast->pListNext = (element); \
- } \
- if (!(ht)->pListHead) { \
- (ht)->pListHead = (element); \
- } \
- if ((ht)->pInternalPointer == NULL) { \
- (ht)->pInternalPointer = (element); \
- }
-
-#if ZEND_DEBUG
-#define HT_OK 0
-#define HT_IS_DESTROYING 1
-#define HT_DESTROYED 2
-#define HT_CLEANING 3
-
-static void _zend_is_inconsistent(HashTable *ht, char *file, int line)
-{
- if (ht->inconsistent==HT_OK) {
- return;
- }
- switch (ht->inconsistent) {
- case HT_IS_DESTROYING:
- zend_output_debug_string(1, "%s(%d) : ht=0x%08x is being destroyed", file, line, ht);
- break;
- case HT_DESTROYED:
- zend_output_debug_string(1, "%s(%d) : ht=0x%08x is already destroyed", file, line, ht);
- break;
- case HT_CLEANING:
- zend_output_debug_string(1, "%s(%d) : ht=0x%08x is being cleaned", file, line, ht);
- break;
- }
- zend_bailout();
-}
-#define IS_CONSISTENT(a) _zend_is_inconsistent(a, __FILE__, __LINE__);
-#define SET_INCONSISTENT(n) ht->inconsistent = n;
-#else
-#define IS_CONSISTENT(a)
-#define SET_INCONSISTENT(n)
-#endif
-
-#define HASH_PROTECT_RECURSION(ht) \
- if ((ht)->bApplyProtection) { \
- if ((ht)->nApplyCount++ >= 3) { \
- zend_error(E_ERROR, "Nesting level too deep - recursive dependency?"); \
- } \
- }
-
-
-#define HASH_UNPROTECT_RECURSION(ht) \
- (ht)->nApplyCount--;
-
-
-#define ZEND_HASH_IF_FULL_DO_RESIZE(ht) \
- if ((ht)->nNumOfElements > (ht)->nTableSize) { \
- zend_hash_do_resize(ht); \
- }
-
-static int zend_hash_do_resize(HashTable *ht);
-
-ZEND_API ulong zend_hash_func(char *arKey, uint nKeyLength)
-{
- return zend_inline_hash_func(arKey, nKeyLength);
-}
-
-
-#define UPDATE_DATA(ht, p, pData, nDataSize) \
- if (nDataSize == sizeof(void*)) { \
- if (!(p)->pDataPtr) { \
- pefree((p)->pData, (ht)->persistent); \
- } \
- memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \
- (p)->pData = &(p)->pDataPtr; \
- } else { \
- if ((p)->pDataPtr) { \
- (p)->pData = (void *) pemalloc(nDataSize, (ht)->persistent); \
- (p)->pDataPtr=NULL; \
- } \
- memcpy((p)->pData, pData, nDataSize); \
- }
-
-#define INIT_DATA(ht, p, pData, nDataSize); \
- if (nDataSize == sizeof(void*)) { \
- memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \
- (p)->pData = &(p)->pDataPtr; \
- } else { \
- (p)->pData = (void *) pemalloc(nDataSize, (ht)->persistent); \
- if (!(p)->pData) { \
- pefree(p, (ht)->persistent); \
- return FAILURE; \
- } \
- memcpy((p)->pData, pData, nDataSize); \
- (p)->pDataPtr=NULL; \
- }
-
-
-ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent)
-{
- uint i = 3;
-
- SET_INCONSISTENT(HT_OK);
-
- while ((1U << i) < nSize) {
- i++;
- }
-
- ht->nTableSize = 1 << i;
- ht->nTableMask = ht->nTableSize - 1;
-
- /* Uses ecalloc() so that Bucket* == NULL */
- ht->arBuckets = (Bucket **) pecalloc(ht->nTableSize, sizeof(Bucket *), persistent);
-
- if (!ht->arBuckets) {
- return FAILURE;
- }
-
- ht->pDestructor = pDestructor;
- ht->pListHead = NULL;
- ht->pListTail = NULL;
- ht->nNumOfElements = 0;
- ht->nNextFreeElement = 0;
- ht->pInternalPointer = NULL;
- ht->persistent = persistent;
- ht->nApplyCount = 0;
- ht->bApplyProtection = 1;
- return SUCCESS;
-}
-
-
-ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent, zend_bool bApplyProtection)
-{
- int retval = zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent);
-
- ht->bApplyProtection = bApplyProtection;
- return retval;
-}
-
-
-ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)
-{
- ht->bApplyProtection = bApplyProtection;
-}
-
-
-
-ZEND_API int zend_hash_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag)
-{
- ulong h;
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- if (nKeyLength <= 0) {
-#if ZEND_DEBUG
- ZEND_PUTS("zend_hash_update: Can't put in empty key\n");
-#endif
- return FAILURE;
- }
-
- HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_update_or_next_insert(ht, idx, pData, nDataSize, pDest, flag));
-
- h = zend_inline_hash_func(arKey, nKeyLength);
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
- if (!memcmp(p->arKey, arKey, nKeyLength)) {
- if (flag & HASH_ADD) {
- return FAILURE;
- }
- HANDLE_BLOCK_INTERRUPTIONS();
-#if ZEND_DEBUG
- if (p->pData == pData) {
- ZEND_PUTS("Fatal error in zend_hash_update: p->pData == pData\n");
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return FAILURE;
- }
-#endif
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- UPDATE_DATA(ht, p, pData, nDataSize);
- if (pDest) {
- *pDest = p->pData;
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return SUCCESS;
- }
- }
- p = p->pNext;
- }
-
- p = (Bucket *) pemalloc(sizeof(Bucket)-1+nKeyLength, ht->persistent);
- if (!p) {
- return FAILURE;
- }
- memcpy(p->arKey, arKey, nKeyLength);
- p->nKeyLength = nKeyLength;
- INIT_DATA(ht, p, pData, nDataSize);
- p->h = h;
- CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]);
- if (pDest) {
- *pDest = p->pData;
- }
-
- HANDLE_BLOCK_INTERRUPTIONS();
- CONNECT_TO_GLOBAL_DLLIST(p, ht);
- ht->arBuckets[nIndex] = p;
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- ht->nNumOfElements++;
- ZEND_HASH_IF_FULL_DO_RESIZE(ht); /* If the Hash table is full, resize it */
- return SUCCESS;
-}
-
-ZEND_API int zend_hash_quick_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- if (nKeyLength <= 0) {
-#if ZEND_DEBUG
- ZEND_PUTS("zend_hash_update: Can't put in empty key\n");
-#endif
- return FAILURE;
- }
-
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
- if (!memcmp(p->arKey, arKey, nKeyLength)) {
- if (flag & HASH_ADD) {
- return FAILURE;
- }
- HANDLE_BLOCK_INTERRUPTIONS();
-#if ZEND_DEBUG
- if (p->pData == pData) {
- ZEND_PUTS("Fatal error in zend_hash_update: p->pData == pData\n");
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return FAILURE;
- }
-#endif
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- UPDATE_DATA(ht, p, pData, nDataSize);
- if (pDest) {
- *pDest = p->pData;
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return SUCCESS;
- }
- }
- p = p->pNext;
- }
-
- p = (Bucket *) pemalloc(sizeof(Bucket)-1+nKeyLength, ht->persistent);
- if (!p) {
- return FAILURE;
- }
-
- memcpy(p->arKey, arKey, nKeyLength);
- p->nKeyLength = nKeyLength;
- INIT_DATA(ht, p, pData, nDataSize);
- p->h = h;
-
- CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]);
-
- if (pDest) {
- *pDest = p->pData;
- }
-
- HANDLE_BLOCK_INTERRUPTIONS();
- ht->arBuckets[nIndex] = p;
- CONNECT_TO_GLOBAL_DLLIST(p, ht);
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- ht->nNumOfElements++;
- ZEND_HASH_IF_FULL_DO_RESIZE(ht); /* If the Hash table is full, resize it */
- return SUCCESS;
-}
-
-
-ZEND_API int zend_hash_add_empty_element(HashTable *ht, char *arKey, uint nKeyLength)
-{
- void *dummy = (void *) 1;
-
- return zend_hash_add(ht, arKey, nKeyLength, &dummy, sizeof(void *), NULL);
-}
-
-
-ZEND_API int zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- if (flag & HASH_NEXT_INSERT) {
- h = ht->nNextFreeElement;
- }
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->nKeyLength == 0) && (p->h == h)) {
- if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {
- return FAILURE;
- }
- HANDLE_BLOCK_INTERRUPTIONS();
-#if ZEND_DEBUG
- if (p->pData == pData) {
- ZEND_PUTS("Fatal error in zend_hash_index_update: p->pData == pData\n");
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return FAILURE;
- }
-#endif
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- UPDATE_DATA(ht, p, pData, nDataSize);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- if (h >= ht->nNextFreeElement) {
- ht->nNextFreeElement = h + 1;
- }
- if (pDest) {
- *pDest = p->pData;
- }
- return SUCCESS;
- }
- p = p->pNext;
- }
- p = (Bucket *) pemalloc(sizeof(Bucket)-1, ht->persistent);
- if (!p) {
- return FAILURE;
- }
- p->nKeyLength = 0; /* Numeric indices are marked by making the nKeyLength == 0 */
- p->h = h;
- INIT_DATA(ht, p, pData, nDataSize);
- if (pDest) {
- *pDest = p->pData;
- }
-
- CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]);
-
- HANDLE_BLOCK_INTERRUPTIONS();
- ht->arBuckets[nIndex] = p;
- CONNECT_TO_GLOBAL_DLLIST(p, ht);
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- if (h >= ht->nNextFreeElement) {
- ht->nNextFreeElement = h + 1;
- }
- ht->nNumOfElements++;
- ZEND_HASH_IF_FULL_DO_RESIZE(ht);
- return SUCCESS;
-}
-
-
-static int zend_hash_do_resize(HashTable *ht)
-{
- Bucket **t;
-
- IS_CONSISTENT(ht);
-
- if ((ht->nTableSize << 1) > 0) { /* Let's double the table size */
- t = (Bucket **) perealloc_recoverable(ht->arBuckets, (ht->nTableSize << 1) * sizeof(Bucket *), ht->persistent);
- if (t) {
- HANDLE_BLOCK_INTERRUPTIONS();
- ht->arBuckets = t;
- ht->nTableSize = (ht->nTableSize << 1);
- ht->nTableMask = ht->nTableSize - 1;
- zend_hash_rehash(ht);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- return SUCCESS;
- }
- return FAILURE;
- }
- return SUCCESS;
-}
-
-ZEND_API int zend_hash_rehash(HashTable *ht)
-{
- Bucket *p;
- uint nIndex;
-
- IS_CONSISTENT(ht);
-
- memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *));
- p = ht->pListHead;
- while (p != NULL) {
- nIndex = p->h & ht->nTableMask;
- CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]);
- ht->arBuckets[nIndex] = p;
- p = p->pListNext;
- }
- return SUCCESS;
-}
-
-ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLength, ulong h, int flag)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- if (flag == HASH_DEL_KEY) {
- HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_del_key_or_index(ht, arKey, nKeyLength, idx, HASH_DEL_INDEX));
- h = zend_inline_hash_func(arKey, nKeyLength);
- }
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && ((p->nKeyLength == 0) || /* Numeric index */
- ((p->nKeyLength == nKeyLength) && (!memcmp(p->arKey, arKey, nKeyLength))))) {
- HANDLE_BLOCK_INTERRUPTIONS();
- if (p == ht->arBuckets[nIndex]) {
- ht->arBuckets[nIndex] = p->pNext;
- } else {
- p->pLast->pNext = p->pNext;
- }
- if (p->pNext) {
- p->pNext->pLast = p->pLast;
- }
- if (p->pListLast != NULL) {
- p->pListLast->pListNext = p->pListNext;
- } else {
- /* Deleting the head of the list */
- ht->pListHead = p->pListNext;
- }
- if (p->pListNext != NULL) {
- p->pListNext->pListLast = p->pListLast;
- } else {
- ht->pListTail = p->pListLast;
- }
- if (ht->pInternalPointer == p) {
- ht->pInternalPointer = p->pListNext;
- }
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- if (!p->pDataPtr) {
- pefree(p->pData, ht->persistent);
- }
- pefree(p, ht->persistent);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- ht->nNumOfElements--;
- return SUCCESS;
- }
- p = p->pNext;
- }
- return FAILURE;
-}
-
-
-ZEND_API void zend_hash_destroy(HashTable *ht)
-{
- Bucket *p, *q;
-
- IS_CONSISTENT(ht);
-
- SET_INCONSISTENT(HT_IS_DESTROYING);
-
- p = ht->pListHead;
- while (p != NULL) {
- q = p;
- p = p->pListNext;
- if (ht->pDestructor) {
- ht->pDestructor(q->pData);
- }
- if (!q->pDataPtr && q->pData) {
- pefree(q->pData, ht->persistent);
- }
- pefree(q, ht->persistent);
- }
- pefree(ht->arBuckets, ht->persistent);
-
- SET_INCONSISTENT(HT_DESTROYED);
-}
-
-
-ZEND_API void zend_hash_clean(HashTable *ht)
-{
- Bucket *p, *q;
-
- IS_CONSISTENT(ht);
-
- SET_INCONSISTENT(HT_CLEANING);
-
- p = ht->pListHead;
- while (p != NULL) {
- q = p;
- p = p->pListNext;
- if (ht->pDestructor) {
- ht->pDestructor(q->pData);
- }
- if (!q->pDataPtr && q->pData) {
- pefree(q->pData, ht->persistent);
- }
- pefree(q, ht->persistent);
- }
- memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *));
- ht->pListHead = NULL;
- ht->pListTail = NULL;
- ht->nNumOfElements = 0;
- ht->nNextFreeElement = 0;
- ht->pInternalPointer = NULL;
-
- SET_INCONSISTENT(HT_OK);
-}
-
-/* This function is used by the various apply() functions.
- * It deletes the passed bucket, and returns the address of the
- * next bucket. The hash *may* be altered during that time, the
- * returned value will still be valid.
- */
-static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p)
-{
- Bucket *retval;
-
- HANDLE_BLOCK_INTERRUPTIONS();
-
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- if (!p->pDataPtr) {
- pefree(p->pData, ht->persistent);
- }
- retval = p->pListNext;
-
- if (p->pLast) {
- p->pLast->pNext = p->pNext;
- } else {
- uint nIndex;
-
- nIndex = p->h & ht->nTableMask;
- ht->arBuckets[nIndex] = p->pNext;
- }
- if (p->pNext) {
- p->pNext->pLast = p->pLast;
- } else {
- /* Nothing to do as this list doesn't have a tail */
- }
-
- if (p->pListLast != NULL) {
- p->pListLast->pListNext = p->pListNext;
- } else {
- /* Deleting the head of the list */
- ht->pListHead = p->pListNext;
- }
- if (p->pListNext != NULL) {
- p->pListNext->pListLast = p->pListLast;
- } else {
- ht->pListTail = p->pListLast;
- }
- if (ht->pInternalPointer == p) {
- ht->pInternalPointer = p->pListNext;
- }
- pefree(p, ht->persistent);
- HANDLE_UNBLOCK_INTERRUPTIONS();
- ht->nNumOfElements--;
-
- return retval;
-}
-
-
-ZEND_API void zend_hash_graceful_destroy(HashTable *ht)
-{
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- p = ht->pListHead;
- while (p != NULL) {
- p = zend_hash_apply_deleter(ht, p);
- }
- pefree(ht->arBuckets, ht->persistent);
-
- SET_INCONSISTENT(HT_DESTROYED);
-}
-
-/* This is used to selectively delete certain entries from a hashtable.
- * destruct() receives the data and decides if the entry should be deleted
- * or not
- */
-
-
-ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
-{
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- HASH_PROTECT_RECURSION(ht);
- p = ht->pListHead;
- while (p != NULL) {
- if (apply_func(p->pData TSRMLS_CC)) {
- p = zend_hash_apply_deleter(ht, p);
- } else {
- p = p->pListNext;
- }
- }
- HASH_UNPROTECT_RECURSION(ht);
-}
-
-
-ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)
-{
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- HASH_PROTECT_RECURSION(ht);
- p = ht->pListHead;
- while (p != NULL) {
- if (apply_func(p->pData, argument TSRMLS_CC)) {
- p = zend_hash_apply_deleter(ht, p);
- } else {
- p = p->pListNext;
- }
- }
- HASH_UNPROTECT_RECURSION(ht);
-}
-
-
-ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t destruct, int num_args, ...)
-{
- Bucket *p;
- va_list args;
- zend_hash_key hash_key;
-
- IS_CONSISTENT(ht);
-
- HASH_PROTECT_RECURSION(ht);
-
- va_start(args, num_args);
- p = ht->pListHead;
- while (p != NULL) {
- hash_key.arKey = p->arKey;
- hash_key.nKeyLength = p->nKeyLength;
- hash_key.h = p->h;
- if (destruct(p->pData, num_args, args, &hash_key)) {
- p = zend_hash_apply_deleter(ht, p);
- } else {
- p = p->pListNext;
- }
- }
- va_end(args);
-
- HASH_UNPROTECT_RECURSION(ht);
-}
-
-
-ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
-{
- Bucket *p, *q;
-
- IS_CONSISTENT(ht);
-
- HASH_PROTECT_RECURSION(ht);
- p = ht->pListTail;
- while (p != NULL) {
- int result = apply_func(p->pData TSRMLS_CC);
-
- q = p;
- p = p->pListLast;
- if (result & ZEND_HASH_APPLY_REMOVE) {
- if (q->nKeyLength>0) {
- zend_hash_del(ht, q->arKey, q->nKeyLength);
- } else {
- zend_hash_index_del(ht, q->h);
- }
- }
- if (result & ZEND_HASH_APPLY_STOP) {
- break;
- }
- }
- HASH_UNPROTECT_RECURSION(ht);
-}
-
-
-ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size)
-{
- Bucket *p;
- void *new_entry;
-
- IS_CONSISTENT(source);
- IS_CONSISTENT(target);
-
- p = source->pListHead;
- while (p) {
- if (p->nKeyLength) {
- zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &new_entry);
- } else {
- zend_hash_index_update(target, p->h, p->pData, size, &new_entry);
- }
- if (pCopyConstructor) {
- pCopyConstructor(new_entry);
- }
- p = p->pListNext;
- }
- target->pInternalPointer = target->pListHead;
-}
-
-
-ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite)
-{
- Bucket *p;
- void *t;
- int mode = (overwrite?HASH_UPDATE:HASH_ADD);
-
- IS_CONSISTENT(source);
- IS_CONSISTENT(target);
-
- p = source->pListHead;
- while (p) {
- if (p->nKeyLength>0) {
- if (zend_hash_add_or_update(target, p->arKey, p->nKeyLength, p->pData, size, &t, mode)==SUCCESS && pCopyConstructor) {
- pCopyConstructor(t);
- }
- } else {
- if ((mode==HASH_UPDATE || !zend_hash_index_exists(target, p->h)) && zend_hash_index_update(target, p->h, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
- pCopyConstructor(t);
- }
- }
- p = p->pListNext;
- }
- target->pInternalPointer = target->pListHead;
-}
-
-
-ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, zend_bool (*pReplaceOrig)(void *orig, void *p_new))
-{
- Bucket *p;
- void *t;
- void *pOrig;
-
- IS_CONSISTENT(source);
- IS_CONSISTENT(target);
-
- p = source->pListHead;
- while (p) {
- if (p->nKeyLength>0) {
- if (zend_hash_find(target, p->arKey, p->nKeyLength, &pOrig)==FAILURE
- || pReplaceOrig(pOrig, p->pData)) {
- if (zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
- pCopyConstructor(t);
- }
- }
- } else {
- if (zend_hash_index_find(target, p->h, &pOrig)==FAILURE
- || pReplaceOrig(pOrig, p->pData)) {
- if (zend_hash_index_update(target, p->h, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
- pCopyConstructor(t);
- }
- }
- }
- p = p->pListNext;
- }
- target->pInternalPointer = target->pListHead;
-}
-
-
-ZEND_API ulong zend_get_hash_value(HashTable *ht, char *arKey, uint nKeyLength)
-{
- IS_CONSISTENT(ht);
-
- return zend_inline_hash_func(arKey, nKeyLength);
-}
-
-
-/* Returns SUCCESS if found and FAILURE if not. The pointer to the
- * data is returned in pData. The reason is that there's no reason
- * someone using the hash table might not want to have NULL data
- */
-ZEND_API int zend_hash_find(HashTable *ht, char *arKey, uint nKeyLength, void **pData)
-{
- ulong h;
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_find(ht, idx, pData));
-
- h = zend_inline_hash_func(arKey, nKeyLength);
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
- if (!memcmp(p->arKey, arKey, nKeyLength)) {
- *pData = p->pData;
- return SUCCESS;
- }
- }
- p = p->pNext;
- }
- return FAILURE;
-}
-
-
-ZEND_API int zend_hash_quick_find(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void **pData)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
- if (!memcmp(p->arKey, arKey, nKeyLength)) {
- *pData = p->pData;
- return SUCCESS;
- }
- }
- p = p->pNext;
- }
- return FAILURE;
-}
-
-
-ZEND_API int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLength)
-{
- ulong h;
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_exists(ht, idx));
-
- h = zend_inline_hash_func(arKey, nKeyLength);
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
- if (!memcmp(p->arKey, arKey, nKeyLength)) {
- return 1;
- }
- }
- p = p->pNext;
- }
- return 0;
-}
-
-
-ZEND_API int zend_hash_index_find(HashTable *ht, ulong h, void **pData)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == 0)) {
- *pData = p->pData;
- return SUCCESS;
- }
- p = p->pNext;
- }
- return FAILURE;
-}
-
-
-ZEND_API int zend_hash_index_exists(HashTable *ht, ulong h)
-{
- uint nIndex;
- Bucket *p;
-
- IS_CONSISTENT(ht);
-
- nIndex = h & ht->nTableMask;
-
- p = ht->arBuckets[nIndex];
- while (p != NULL) {
- if ((p->h == h) && (p->nKeyLength == 0)) {
- return 1;
- }
- p = p->pNext;
- }
- return 0;
-}
-
-
-ZEND_API int zend_hash_num_elements(HashTable *ht)
-{
- IS_CONSISTENT(ht);
-
- return ht->nNumOfElements;
-}
-
-
-ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)
-{
- IS_CONSISTENT(ht);
-
- if (pos)
- *pos = ht->pListHead;
- else
- ht->pInternalPointer = ht->pListHead;
-}
-
-
-/* This function will be extremely optimized by remembering
- * the end of the list
- */
-ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)
-{
- IS_CONSISTENT(ht);
-
- if (pos)
- *pos = ht->pListTail;
- else
- ht->pInternalPointer = ht->pListTail;
-}
-
-
-ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)
-{
- HashPosition *current = pos ? pos : &ht->pInternalPointer;
-
- IS_CONSISTENT(ht);
-
- if (*current) {
- *current = (*current)->pListNext;
- return SUCCESS;
- } else
- return FAILURE;
-}
-
-ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)
-{
- HashPosition *current = pos ? pos : &ht->pInternalPointer;
-
- IS_CONSISTENT(ht);
-
- if (*current) {
- *current = (*current)->pListLast;
- return SUCCESS;
- } else
- return FAILURE;
-}
-
-
-/* This function should be made binary safe */
-ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos)
-{
- Bucket *p;
-
- p = pos ? (*pos) : ht->pInternalPointer;
-
- IS_CONSISTENT(ht);
-
- if (p) {
- if (p->nKeyLength) {
- if (duplicate) {
- *str_index = estrndup(p->arKey, p->nKeyLength);
- } else {
- *str_index = p->arKey;
- }
- if (str_length) {
- *str_length = p->nKeyLength;
- }
- return HASH_KEY_IS_STRING;
- } else {
- *num_index = p->h;
- return HASH_KEY_IS_LONG;
- }
- }
- return HASH_KEY_NON_EXISTANT;
-}
-
-
-ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)
-{
- Bucket *p;
-
- p = pos ? (*pos) : ht->pInternalPointer;
-
- IS_CONSISTENT(ht);
-
- if (p) {
- if (p->nKeyLength) {
- return HASH_KEY_IS_STRING;
- } else {
- return HASH_KEY_IS_LONG;
- }
- }
- return HASH_KEY_NON_EXISTANT;
-}
-
-
-ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)
-{
- Bucket *p;
-
- p = pos ? (*pos) : ht->pInternalPointer;
-
- IS_CONSISTENT(ht);
-
- if (p) {
- *pData = p->pData;
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-
-ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
- compare_func_t compar, int renumber TSRMLS_DC)
-{
- Bucket **arTmp;
- Bucket *p;
- int i, j;
-
- IS_CONSISTENT(ht);
-
- if (ht->nNumOfElements <= 1) { /* Doesn't require sorting */
- return SUCCESS;
- }
- arTmp = (Bucket **) pemalloc(ht->nNumOfElements * sizeof(Bucket *), ht->persistent);
- if (!arTmp) {
- return FAILURE;
- }
- p = ht->pListHead;
- i = 0;
- while (p) {
- arTmp[i] = p;
- p = p->pListNext;
- i++;
- }
-
- (*sort_func)((void *) arTmp, i, sizeof(Bucket *), compar TSRMLS_CC);
-
- HANDLE_BLOCK_INTERRUPTIONS();
- ht->pListHead = arTmp[0];
- ht->pListTail = NULL;
- ht->pInternalPointer = ht->pListHead;
-
- for (j = 0; j < i; j++) {
- if (ht->pListTail) {
- ht->pListTail->pListNext = arTmp[j];
- }
- arTmp[j]->pListLast = ht->pListTail;
- arTmp[j]->pListNext = NULL;
- ht->pListTail = arTmp[j];
- }
- pefree(arTmp, ht->persistent);
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- if (renumber) {
- p = ht->pListHead;
- i=0;
- while (p != NULL) {
- p->nKeyLength = 0;
- p->h = i++;
- p = p->pListNext;
- }
- ht->nNextFreeElement = i;
- zend_hash_rehash(ht);
- }
- return SUCCESS;
-}
-
-
-ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)
-{
- Bucket *p1, *p2;
- int result;
- void *pData2;
-
- IS_CONSISTENT(ht1);
- IS_CONSISTENT(ht2);
-
- HASH_PROTECT_RECURSION(ht1);
- HASH_PROTECT_RECURSION(ht2);
-
- result = ht1->nNumOfElements - ht2->nNumOfElements;
- if (result!=0) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return result;
- }
-
- p1 = ht1->pListHead;
- if (ordered) {
- p2 = ht2->pListHead;
- }
-
- while (p1) {
- if (ordered && !p2) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return 1; /* That's not supposed to happen */
- }
- if (ordered) {
- if (p1->nKeyLength==0 && p2->nKeyLength==0) { /* numeric indices */
- result = p1->h - p2->h;
- if (result!=0) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return result;
- }
- } else { /* string indices */
- result = p1->nKeyLength - p2->nKeyLength;
- if (result!=0) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return result;
- }
- result = memcmp(p1->arKey, p2->arKey, p1->nKeyLength);
- if (result!=0) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return result;
- }
- }
- pData2 = p2->pData;
- } else {
- if (p1->nKeyLength==0) { /* numeric index */
- if (zend_hash_index_find(ht2, p1->h, &pData2)==FAILURE) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return 1;
- }
- } else { /* string index */
- if (zend_hash_find(ht2, p1->arKey, p1->nKeyLength, &pData2)==FAILURE) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return 1;
- }
- }
- }
- result = compar(p1->pData, pData2 TSRMLS_CC);
- if (result!=0) {
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return result;
- }
- p1 = p1->pListNext;
- if (ordered) {
- p2 = p2->pListNext;
- }
- }
-
- HASH_UNPROTECT_RECURSION(ht1);
- HASH_UNPROTECT_RECURSION(ht2);
- return 0;
-}
-
-
-ZEND_API int zend_hash_minmax(HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)
-{
- Bucket *p, *res;
-
- IS_CONSISTENT(ht);
-
- if (ht->nNumOfElements == 0 ) {
- *pData=NULL;
- return FAILURE;
- }
-
- res = p = ht->pListHead;
- while ((p = p->pListNext)) {
- if (flag) {
- if (compar(&res, &p TSRMLS_CC) < 0) { /* max */
- res = p;
- }
- } else {
- if (compar(&res, &p TSRMLS_CC) > 0) { /* min */
- res = p;
- }
- }
- }
- *pData = res->pData;
- return SUCCESS;
-}
-
-ZEND_API ulong zend_hash_next_free_element(HashTable *ht)
-{
- IS_CONSISTENT(ht);
-
- return ht->nNextFreeElement;
-
-}
-
-
-#if ZEND_DEBUG
-void zend_hash_display_pListTail(HashTable *ht)
-{
- Bucket *p;
-
- p = ht->pListTail;
- while (p != NULL) {
- zend_output_debug_string(0, "pListTail has key %s\n", p->arKey);
- p = p->pListLast;
- }
-}
-
-void zend_hash_display(HashTable *ht)
-{
- Bucket *p;
- uint i;
-
- for (i = 0; i < ht->nTableSize; i++) {
- p = ht->arBuckets[i];
- while (p != NULL) {
- zend_output_debug_string(0, "%s <==> 0x%X\n", p->arKey, p->h);
- p = p->pNext;
- }
- }
-
- p = ht->pListTail;
- while (p != NULL) {
- zend_output_debug_string(0, "%s <==> 0x%X\n", p->arKey, p->h);
- p = p->pListLast;
- }
-}
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
deleted file mode 100644
index 2adb858bde..0000000000
--- a/Zend/zend_hash.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef ZEND_HASH_H
-#define ZEND_HASH_H
-
-#include <sys/types.h>
-
-#define HASH_KEY_IS_STRING 1
-#define HASH_KEY_IS_LONG 2
-#define HASH_KEY_NON_EXISTANT 3
-
-#define HASH_UPDATE (1<<0)
-#define HASH_ADD (1<<1)
-#define HASH_NEXT_INSERT (1<<2)
-
-#define HASH_DEL_KEY 0
-#define HASH_DEL_INDEX 1
-
-typedef ulong (*hash_func_t)(char *arKey, uint nKeyLength);
-typedef int (*compare_func_t)(const void *, const void * TSRMLS_DC);
-typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t TSRMLS_DC);
-typedef void (*dtor_func_t)(void *pDest);
-typedef void (*copy_ctor_func_t)(void *pElement);
-
-struct _hashtable;
-
-typedef struct bucket {
- ulong h; /* Used for numeric indexing */
- uint nKeyLength;
- void *pData;
- void *pDataPtr;
- struct bucket *pListNext;
- struct bucket *pListLast;
- struct bucket *pNext;
- struct bucket *pLast;
- char arKey[1]; /* Must be last element */
-} Bucket;
-
-typedef struct _hashtable {
- uint nTableSize;
- uint nTableMask;
- uint nNumOfElements;
- ulong nNextFreeElement;
- Bucket *pInternalPointer; /* Used for element traversal */
- Bucket *pListHead;
- Bucket *pListTail;
- Bucket **arBuckets;
- dtor_func_t pDestructor;
- zend_bool persistent;
- unsigned char nApplyCount;
- zend_bool bApplyProtection;
-#if ZEND_DEBUG
- int inconsistent;
-#endif
-} HashTable;
-
-typedef Bucket* HashPosition;
-
-BEGIN_EXTERN_C()
-
-/* startup/shutdown */
-ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent);
-ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent, zend_bool bApplyProtection);
-ZEND_API void zend_hash_destroy(HashTable *ht);
-ZEND_API void zend_hash_clean(HashTable *ht);
-
-/* additions/updates/changes */
-ZEND_API int zend_hash_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag);
-#define zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest) \
- zend_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_UPDATE)
-#define zend_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest) \
- zend_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_ADD)
-
-ZEND_API int zend_hash_quick_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag);
-#define zend_hash_quick_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \
- zend_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_UPDATE)
-#define zend_hash_quick_add(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \
- zend_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_ADD)
-
-ZEND_API int zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag);
-#define zend_hash_index_update(ht, h, pData, nDataSize, pDest) \
- zend_hash_index_update_or_next_insert(ht, h, pData, nDataSize, pDest, HASH_UPDATE)
-#define zend_hash_next_index_insert(ht, pData, nDataSize, pDest) \
- zend_hash_index_update_or_next_insert(ht, 0, pData, nDataSize, pDest, HASH_NEXT_INSERT)
-
-ZEND_API int zend_hash_add_empty_element(HashTable *ht, char *arKey, uint nKeyLength);
-
-
-#define ZEND_HASH_APPLY_KEEP 0
-#define ZEND_HASH_APPLY_REMOVE 1<<0
-#define ZEND_HASH_APPLY_STOP 1<<1
-
-typedef struct _zend_hash_key {
- char *arKey;
- uint nKeyLength;
- ulong h;
-} zend_hash_key;
-
-
-typedef int (*apply_func_t)(void *pDest TSRMLS_DC);
-typedef int (*apply_func_arg_t)(void *pDest, void *argument TSRMLS_DC);
-typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key);
-
-ZEND_API void zend_hash_graceful_destroy(HashTable *ht);
-ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC);
-ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void * TSRMLS_DC);
-ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...);
-
-/* This function should be used with special care (in other words,
- * it should usually not be used). When used with the ZEND_HASH_APPLY_STOP
- * return value, it assumes things about the order of the elements in the hash.
- * Also, it does not provide the same kind of reentrancy protection that
- * the standard apply functions do.
- */
-ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC);
-
-
-/* Deletes */
-ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLength, ulong h, int flag);
-#define zend_hash_del(ht, arKey, nKeyLength) \
- zend_hash_del_key_or_index(ht, arKey, nKeyLength, 0, HASH_DEL_KEY)
-#define zend_hash_index_del(ht, h) \
- zend_hash_del_key_or_index(ht, NULL, 0, h, HASH_DEL_INDEX)
-
-ZEND_API ulong zend_get_hash_value(HashTable *ht, char *arKey, uint nKeyLength);
-
-/* Data retreival */
-ZEND_API int zend_hash_find(HashTable *ht, char *arKey, uint nKeyLength, void **pData);
-ZEND_API int zend_hash_quick_find(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void **pData);
-ZEND_API int zend_hash_index_find(HashTable *ht, ulong h, void **pData);
-
-/* Misc */
-ZEND_API int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLength);
-ZEND_API int zend_hash_index_exists(HashTable *ht, ulong h);
-ZEND_API ulong zend_hash_next_free_element(HashTable *ht);
-
-/* traversing */
-ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos);
-ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos);
-ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos);
-ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos);
-ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos);
-ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
-ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
-
-#define zend_hash_move_forward(ht) \
- zend_hash_move_forward_ex(ht, NULL)
-#define zend_hash_move_backwards(ht) \
- zend_hash_move_backwards_ex(ht, NULL)
-#define zend_hash_get_current_key(ht, str_index, num_index, duplicate) \
- zend_hash_get_current_key_ex(ht, str_index, NULL, num_index, duplicate, NULL)
-#define zend_hash_get_current_key_type(ht) \
- zend_hash_get_current_key_type_ex(ht, NULL)
-#define zend_hash_get_current_data(ht, pData) \
- zend_hash_get_current_data_ex(ht, pData, NULL)
-#define zend_hash_internal_pointer_reset(ht) \
- zend_hash_internal_pointer_reset_ex(ht, NULL)
-#define zend_hash_internal_pointer_end(ht) \
- zend_hash_internal_pointer_end_ex(ht, NULL)
-
-/* Copying, merging and sorting */
-ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size);
-ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite);
-ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, zend_bool (*pReplaceOrig)(void *orig, void *p_new));
-ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber TSRMLS_DC);
-ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC);
-ZEND_API int zend_hash_minmax(HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC);
-
-ZEND_API int zend_hash_num_elements(HashTable *ht);
-
-ZEND_API int zend_hash_rehash(HashTable *ht);
-
-static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
-{
- ulong h = 5381;
- char *arEnd = arKey + nKeyLength;
-
- while (arKey < arEnd) {
- h += (h << 5);
- h ^= (ulong) *arKey++;
- }
- return h;
-}
-
-ZEND_API ulong zend_hash_func(char *arKey, uint nKeyLength);
-
-#if ZEND_DEBUG
-/* debug */
-void zend_hash_display_pListTail(HashTable *ht);
-void zend_hash_display(HashTable *ht);
-#endif
-
-END_EXTERN_C()
-
-#define ZEND_INIT_SYMTABLE(ht) \
- ZEND_INIT_SYMTABLE_EX(ht, 2, 0)
-
-#define ZEND_INIT_SYMTABLE_EX(ht, n, persistent) \
- zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent)
-
-
-#endif /* ZEND_HASH_H */
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
deleted file mode 100644
index 69fc8c8d0a..0000000000
--- a/Zend/zend_highlight.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_language_parser.h"
-#include "zend_compile.h"
-#include "zend_highlight.h"
-#include "zend_ptr_stack.h"
-#include "zend_globals.h"
-
-ZEND_API void zend_html_putc(char c)
-{
- switch (c) {
- case '\n':
- ZEND_PUTS("<br />");
- break;
- case '<':
- ZEND_PUTS("&lt;");
- break;
- case '>':
- ZEND_PUTS("&gt;");
- break;
- case '&':
- ZEND_PUTS("&amp;");
- break;
- case ' ':
- ZEND_PUTS("&nbsp;");
- break;
- case '\t':
- ZEND_PUTS("&nbsp;&nbsp;&nbsp;&nbsp;");
- break;
- default:
- ZEND_PUTC(c);
- break;
- }
-}
-
-
-ZEND_API void zend_html_puts(char *s, uint len)
-{
- register char *ptr=s, *end=s+len;
-
- while (ptr<end) {
- if (*ptr==' '
- && len>1
- && !(((ptr+1)>=end) || (*(ptr+1)==' ')) /* next is not a space */
- && !((ptr==s) || (*(ptr-1)==' '))) /* last is not a space */ {
- char c = *ptr++;
-
- ZEND_PUTC(c);
- continue;
- }
- zend_html_putc(*ptr++);
- }
-}
-
-
-
-ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
-{
- zval token;
- int token_type;
- char *last_color = syntax_highlighter_ini->highlight_html;
- char *next_color;
- int in_string=0;
-
- zend_printf("<code>");
- zend_printf("<font color=\"%s\">\n", last_color);
- /* highlight stuff coming back from zendlex() */
- token.type = 0;
- while ((token_type=lex_scan(&token TSRMLS_CC))) {
- switch (token_type) {
- case T_INLINE_HTML:
- next_color = syntax_highlighter_ini->highlight_html;
- break;
- case T_COMMENT:
- next_color = syntax_highlighter_ini->highlight_comment;
- break;
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- next_color = syntax_highlighter_ini->highlight_default;
- break;
- case T_CLOSE_TAG:
- next_color = syntax_highlighter_ini->highlight_default;
- break;
- case T_CONSTANT_ENCAPSED_STRING:
- next_color = syntax_highlighter_ini->highlight_string;
- break;
- case '"':
- next_color = syntax_highlighter_ini->highlight_string;
- in_string = !in_string;
- break;
- case T_WHITESPACE:
- zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); /* no color needed */
- token.type = 0;
- continue;
- break;
- default:
- if (token.type==0) {
- next_color = syntax_highlighter_ini->highlight_keyword;
- } else {
- if (in_string) {
- next_color = syntax_highlighter_ini->highlight_string;
- } else {
- next_color = syntax_highlighter_ini->highlight_default;
- }
- }
- break;
- }
-
- if (last_color != next_color) {
- if (last_color != syntax_highlighter_ini->highlight_html) {
- zend_printf("</font>");
- }
- last_color = next_color;
- if (last_color != syntax_highlighter_ini->highlight_html) {
- zend_printf("<font color=\"%s\">", last_color);
- }
- }
- switch (token_type) {
- case T_END_HEREDOC:
- zend_html_puts(token.value.str.val, token.value.str.len);
- break;
- default:
- zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
- break;
- }
-
- if (token.type == IS_STRING) {
- switch (token_type) {
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- case T_CLOSE_TAG:
- case T_WHITESPACE:
- case T_COMMENT:
- break;
- default:
- efree(token.value.str.val);
- break;
- }
- } else if (token_type == T_END_HEREDOC) {
- zend_bool has_semicolon=(strchr(token.value.str.val, ';')?1:0);
-
- efree(token.value.str.val);
- if (has_semicolon) {
- /* the following semicolon was unput(), ignore it */
- lex_scan(&token TSRMLS_CC);
- }
- }
- token.type = 0;
- }
- if (last_color != syntax_highlighter_ini->highlight_html) {
- zend_printf("</font>\n");
- }
- zend_printf("</font>\n");
- zend_printf("</code>");
-}
-
-
-
-ZEND_API void zend_strip(TSRMLS_D)
-{
- zval token;
- int token_type;
-
- token.type = 0;
- while ((token_type=lex_scan(&token TSRMLS_CC))) {
- switch (token_type) {
- case T_COMMENT:
- token.type = 0;
- break;
-
- case T_WHITESPACE:
- if (token.type) {
- putchar(' ');
- token.type = 0;
- }
- continue;
- }
-
- switch (token_type) {
- case 349:
- break;
-
- default: {
- char c, *ptr=LANG_SCNG(yy_text), *end=LANG_SCNG(yy_text)+LANG_SCNG(yy_leng);
- while (ptr<end) {
- c = *ptr++;
- putchar(c);
- }
- }
- break;
- }
-
- if (token.type == IS_STRING) {
- switch (token_type) {
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- case T_CLOSE_TAG:
- case T_WHITESPACE:
- case T_COMMENT:
- break;
-
- default:
- efree(token.value.str.val);
- break;
- }
- } else if (token_type == T_END_HEREDOC) {
- zend_bool has_semicolon=(strchr(token.value.str.val, ';')?1:0);
-
- efree(token.value.str.val);
- if (has_semicolon) {
- /* the following semicolon was unput(), ignore it */
- lex_scan(&token TSRMLS_CC);
- }
- }
- token.type = 0;
- }
-}
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h
deleted file mode 100644
index 1395f0952f..0000000000
--- a/Zend/zend_highlight.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_HIGHLIGHT_H
-#define ZEND_HIGHLIGHT_H
-
-#define HL_COMMENT_COLOR "#FF8000" /* orange */
-#define HL_DEFAULT_COLOR "#0000BB" /* blue */
-#define HL_HTML_COLOR "#000000" /* black */
-#define HL_STRING_COLOR "#DD0000" /* red */
-#define HL_BG_COLOR "#FFFFFF" /* white */
-#define HL_KEYWORD_COLOR "#007700" /* green */
-
-
-typedef struct _zend_syntax_highlighter_ini {
- char *highlight_html;
- char *highlight_comment;
- char *highlight_default;
- char *highlight_string;
- char *highlight_keyword;
-} zend_syntax_highlighter_ini;
-
-
-BEGIN_EXTERN_C()
-ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
-ZEND_API void zend_strip(TSRMLS_D);
-ZEND_API int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
-ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC);
-ZEND_API void zend_html_putc(char c);
-ZEND_API void zend_html_puts(char *s, uint len);
-END_EXTERN_C()
-
-extern zend_syntax_highlighter_ini syntax_highlighter_ini;
-
-#endif
diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c
deleted file mode 100644
index 0aa2e46dfb..0000000000
--- a/Zend/zend_indent.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* This indenter doesn't really work, it's here for no particular reason. */
-
-
-#include "zend.h"
-#include "zend_language_parser.h"
-#include "zend_compile.h"
-#include "zend_indent.h"
-
-#define zendtext LANG_SCNG(yy_text)
-#define zendleng LANG_SCNG(yy_leng)
-
-
-static void handle_whitespace(int *emit_whitespace)
-{
- unsigned char c;
- int i;
-
- for (c=0; c<128; c++) {
- if (emit_whitespace[c]>0) {
- for (i=0; i<emit_whitespace[c]; i++) {
- zend_write((char *) &c, 1);
- }
- }
- }
- memset(emit_whitespace, 0, sizeof(int)*256);
-}
-
-
-ZEND_API void zend_indent()
-{
- zval token;
- int token_type;
- int in_string=0;
- int nest_level=0;
- int emit_whitespace[256];
- int i;
- TSRMLS_FETCH();
-
- memset(emit_whitespace, 0, sizeof(int)*256);
-
- /* highlight stuff coming back from zendlex() */
- token.type = 0;
- while ((token_type=lex_scan(&token TSRMLS_CC))) {
- switch (token_type) {
- case T_INLINE_HTML:
- zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
- break;
- case T_WHITESPACE: {
- token.type = 0;
- /* eat whitespace, emit newlines */
- for (i=0; i<LANG_SCNG(yy_leng); i++) {
- emit_whitespace[(unsigned char) LANG_SCNG(yy_text)[i]]++;
- }
- continue;
- }
- break;
- case '"':
- in_string = !in_string;
- /* break missing intentionally */
- default:
- if (token.type==0) {
- /* keyword */
- switch(token_type) {
- case ',':
- ZEND_PUTS(", ");
- goto dflt_printout;
- break;
- case '{':
- nest_level++;
- if (emit_whitespace['\n']>0) {
- ZEND_PUTS(" {\n");
- memset(emit_whitespace, 0, sizeof(int)*256);
- } else {
- ZEND_PUTS("{");
- }
- break;
- case '}':
- nest_level--;
- if (emit_whitespace['\n']==0) {
- ZEND_PUTS("\n");
- }
- for (i=0; i<nest_level; i++) {
- ZEND_PUTS(" ");
- }
- goto dflt_printout;
- break;
-dflt_printout:
- default:
- if (emit_whitespace['\n']>0) {
- for (i=0; i<emit_whitespace['\n']; i++) {
- ZEND_PUTS("\n");
- }
- memset(emit_whitespace, 0, sizeof(int)*256);
- for (i=0; i<nest_level; i++) {
- ZEND_PUTS(" ");
- }
- } else {
- handle_whitespace(emit_whitespace);
- }
- zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
- break;
- }
- } else {
- handle_whitespace(emit_whitespace);
- if (in_string) {
- zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
- /* a part of a string */
- } else {
- zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
- }
- }
- break;
- }
- if (token.type == IS_STRING) {
- switch (token_type) {
- case T_OPEN_TAG:
- case T_CLOSE_TAG:
- case T_WHITESPACE:
- break;
- default:
- efree(token.value.str.val);
- break;
- }
- }
- token.type = 0;
- }
-}
diff --git a/Zend/zend_indent.h b/Zend/zend_indent.h
deleted file mode 100644
index 0272667d2a..0000000000
--- a/Zend/zend_indent.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_INDENT_H
-#define ZEND_INDENT_H
-
-ZEND_API void zend_indent(void);
-
-#endif /* ZEND_INDENT_H */
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
deleted file mode 100644
index 53526e00ec..0000000000
--- a/Zend/zend_ini.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdlib.h>
-
-#include "zend.h"
-#include "zend_qsort.h"
-#include "zend_API.h"
-#include "zend_ini.h"
-#include "zend_alloc.h"
-#include "zend_operators.h"
-
-static HashTable *registered_zend_ini_directives;
-
-
-/*
- * hash_apply functions
- */
-static int zend_remove_ini_entries(zend_ini_entry *ini_entry, int *module_number TSRMLS_DC)
-{
- if (ini_entry->module_number == *module_number) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage TSRMLS_DC)
-{
- if (ini_entry->modified) {
- if (ini_entry->on_modify) {
- ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC);
- }
- efree(ini_entry->value);
- ini_entry->value = ini_entry->orig_value;
- ini_entry->value_length = ini_entry->orig_value_length;
- ini_entry->modified = 0;
- ini_entry->orig_value = NULL;
- ini_entry->orig_value_length = 0;
- }
- return 0;
-}
-
-/*
- * Startup / shutdown
- */
-ZEND_API int zend_ini_startup(TSRMLS_D)
-{
- registered_zend_ini_directives = &EG(ini_directives);
- if (zend_hash_init_ex(registered_zend_ini_directives, 100, NULL, NULL, 1, 0)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int zend_ini_shutdown(TSRMLS_D)
-{
- zend_hash_destroy(&EG(ini_directives));
- return SUCCESS;
-}
-
-
-ZEND_API int zend_ini_deactivate(TSRMLS_D)
-{
- zend_hash_apply_with_argument(&EG(ini_directives), (apply_func_arg_t) zend_restore_ini_entry_cb, (void *) ZEND_INI_STAGE_DEACTIVATE TSRMLS_CC);
- return SUCCESS;
-}
-
-
-ZEND_API int zend_copy_ini_directives(TSRMLS_D)
-{
- zend_ini_entry ini_entry;
-
- if (zend_hash_init_ex(&EG(ini_directives), registered_zend_ini_directives->nNumOfElements, NULL, NULL, 1, 0)==FAILURE) {
- return FAILURE;
- }
- zend_hash_copy(&EG(ini_directives), registered_zend_ini_directives, NULL, &ini_entry, sizeof(zend_ini_entry));
- zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC);
- return SUCCESS;
-}
-
-
-static int ini_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength==0 && s->nKeyLength==0) { /* both numeric */
- return ZEND_NORMALIZE_BOOL(f->nKeyLength - s->nKeyLength);
- } else if (f->nKeyLength==0) { /* f is numeric, s is not */
- return -1;
- } else if (s->nKeyLength==0) { /* s is numeric, f is not */
- return 1;
- } else { /* both strings */
- return zend_binary_strcasecmp(f->arKey, f->nKeyLength, s->arKey, s->nKeyLength);
- }
-}
-
-
-ZEND_API void zend_ini_sort_entries(TSRMLS_D)
-{
- zend_hash_sort(&EG(ini_directives), zend_qsort, ini_key_compare, 0 TSRMLS_CC);
-}
-
-/*
- * Registration / unregistration
- */
-
-ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number TSRMLS_DC)
-{
- zend_ini_entry *p = ini_entry;
- zend_ini_entry *hashed_ini_entry;
- zval default_value;
-
- while (p->name) {
- p->module_number = module_number;
- if (zend_hash_add(registered_zend_ini_directives, p->name, p->name_length, p, sizeof(zend_ini_entry), (void **) &hashed_ini_entry)==FAILURE) {
- zend_unregister_ini_entries(module_number TSRMLS_CC);
- return FAILURE;
- }
- if ((zend_get_configuration_directive(p->name, p->name_length, &default_value))==SUCCESS) {
- if (!hashed_ini_entry->on_modify
- || hashed_ini_entry->on_modify(hashed_ini_entry, default_value.value.str.val, default_value.value.str.len, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC)==SUCCESS) {
- hashed_ini_entry->value = default_value.value.str.val;
- hashed_ini_entry->value_length = default_value.value.str.len;
- }
- } else {
- if (hashed_ini_entry->on_modify) {
- hashed_ini_entry->on_modify(hashed_ini_entry, hashed_ini_entry->value, hashed_ini_entry->value_length, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC);
- }
- }
- p++;
- }
- return SUCCESS;
-}
-
-
-ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC)
-{
- zend_hash_apply_with_argument(registered_zend_ini_directives, (apply_func_arg_t) zend_remove_ini_entries, (void *) &module_number TSRMLS_CC);
-}
-
-
-static int zend_ini_refresh_cache(zend_ini_entry *p, int stage TSRMLS_DC)
-{
- if (p->on_modify) {
- p->on_modify(p, p->value, p->value_length, p->mh_arg1, p->mh_arg2, p->mh_arg3, stage TSRMLS_CC);
- }
- return 0;
-}
-
-
-ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC)
-{
- zend_hash_apply_with_argument(&EG(ini_directives), (apply_func_arg_t) zend_ini_refresh_cache, (void *)(long) stage TSRMLS_CC);
-}
-
-
-ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage)
-{
- zend_ini_entry *ini_entry;
- char *duplicate;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&EG(ini_directives), name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- if (!(ini_entry->modifyable & modify_type)) {
- return FAILURE;
- }
-
- duplicate = estrndup(new_value, new_value_length);
-
- if (!ini_entry->on_modify
- || ini_entry->on_modify(ini_entry, duplicate, new_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC)==SUCCESS) {
- if (!ini_entry->modified) {
- ini_entry->orig_value = ini_entry->value;
- ini_entry->orig_value_length = ini_entry->value_length;
- } else { /* we already changed the value, free the changed value */
- efree(ini_entry->value);
- }
- ini_entry->value = duplicate;
- ini_entry->value_length = new_value_length;
- ini_entry->modified = 1;
- } else {
- efree(duplicate);
- }
-
- return SUCCESS;
-}
-
-
-ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage)
-{
- zend_ini_entry *ini_entry;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&EG(ini_directives), name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- zend_restore_ini_entry_cb(ini_entry, stage TSRMLS_CC);
- return SUCCESS;
-}
-
-
-ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type))
-{
- zend_ini_entry *ini_entry;
-
- if (zend_hash_find(registered_zend_ini_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- ini_entry->displayer = displayer;
- return SUCCESS;
-}
-
-
-
-/*
- * Data retrieval
- */
-
-ZEND_API long zend_ini_long(char *name, uint name_length, int orig)
-{
- zend_ini_entry *ini_entry;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return (ini_entry->orig_value ? strtol(ini_entry->orig_value, NULL, 0) : 0);
- } else if (ini_entry->value) {
- return strtol(ini_entry->value, NULL, 0);
- }
- }
-
- return 0;
-}
-
-
-ZEND_API double zend_ini_double(char *name, uint name_length, int orig)
-{
- zend_ini_entry *ini_entry;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return (double) (ini_entry->orig_value ? strtod(ini_entry->orig_value, NULL) : 0.0);
- } else if (ini_entry->value) {
- return (double) strtod(ini_entry->value, NULL);
- }
- }
-
- return 0.0;
-}
-
-
-ZEND_API char *zend_ini_string(char *name, uint name_length, int orig)
-{
- zend_ini_entry *ini_entry;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return ini_entry->orig_value;
- } else {
- return ini_entry->value;
- }
- }
-
- return "";
-}
-
-
-static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type)
-{
- if (ini_entry->displayer) {
- ini_entry->displayer(ini_entry, type);
- } else {
- char *display_string;
- uint display_string_length;
-
- if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
- if (ini_entry->orig_value) {
- display_string = ini_entry->orig_value;
- display_string_length = ini_entry->orig_value_length;
- } else {
- display_string = "<i>no value</i>";
- display_string_length = sizeof("<i>no value</i>")-1;
- }
- } else if (ini_entry->value && ini_entry->value[0]) {
- display_string = ini_entry->value;
- display_string_length = ini_entry->value_length;
- } else {
- display_string = "<i>no value</i>";
- display_string_length = sizeof("<i>no value</i>")-1;
- }
- ZEND_WRITE(display_string, display_string_length);
- }
-}
-
-
-ZEND_INI_DISP(zend_ini_boolean_displayer_cb)
-{
- int value;
-
- if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = (ini_entry->orig_value ? atoi(ini_entry->orig_value) : 0);
- } else if (ini_entry->value) {
- value = atoi(ini_entry->value);
- } else {
- value = 0;
- }
- if (value) {
- ZEND_PUTS("On");
- } else {
- ZEND_PUTS("Off");
- }
-}
-
-
-ZEND_INI_DISP(zend_ini_color_displayer_cb)
-{
- char *value;
-
- if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
- if (value) {
- zend_printf("<font color=\"%s\">%s</font>", value, value);
- } else {
- ZEND_PUTS("<i>no value</i>;");
- }
-}
-
-
-ZEND_INI_DISP(display_link_numbers)
-{
- char *value;
-
- if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
- if (atoi(value)==-1) {
- ZEND_PUTS("Unlimited");
- } else {
- zend_printf("%s", value);
- }
- }
-}
-
-
-/* Standard message handlers */
-
-ZEND_API ZEND_INI_MH(OnUpdateBool)
-{
- zend_bool *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (zend_bool *) (base+(size_t) mh_arg1);
-
- *p = (zend_bool) atoi(new_value);
- return SUCCESS;
-}
-
-
-ZEND_API ZEND_INI_MH(OnUpdateInt)
-{
- long *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (long *) (base+(size_t) mh_arg1);
-
- *p = zend_atoi(new_value, new_value_length);
- return SUCCESS;
-}
-
-
-ZEND_API ZEND_INI_MH(OnUpdateReal)
-{
- double *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (double *) (base+(size_t) mh_arg1);
-
- *p = strtod(new_value, NULL);
- return SUCCESS;
-}
-
-
-ZEND_API ZEND_INI_MH(OnUpdateString)
-{
- char **p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (char **) (base+(size_t) mh_arg1);
-
- *p = new_value;
- return SUCCESS;
-}
-
-
-ZEND_API ZEND_INI_MH(OnUpdateStringUnempty)
-{
- char **p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- if (new_value && !new_value[0]) {
- return FAILURE;
- }
-
- p = (char **) (base+(size_t) mh_arg1);
-
- *p = new_value;
- return SUCCESS;
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h
deleted file mode 100644
index 0e88d32670..0000000000
--- a/Zend/zend_ini.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_INI_H
-#define ZEND_INI_H
-
-#define ZEND_INI_USER (1<<0)
-#define ZEND_INI_PERDIR (1<<1)
-#define ZEND_INI_SYSTEM (1<<2)
-
-#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)
-
-#ifndef XtOffsetOf
-# if defined(CRAY) || (defined(__arm) && !defined(LINUX))
-# ifdef __STDC__
-# define XtOffset(p_type, field) _Offsetof(p_type, field)
-# else
-# ifdef CRAY2
-# define XtOffset(p_type, field) \
- (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
-
-# else /* !CRAY2 */
-
-# define XtOffset(p_type, field) ((unsigned int)&(((p_type)NULL)->field))
-
-# endif /* !CRAY2 */
-# endif /* __STDC__ */
-# else /* ! (CRAY || __arm) */
-
-# define XtOffset(p_type, field) \
- ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
-
-# endif /* !CRAY */
-
-# ifdef offsetof
-# define XtOffsetOf(s_type, field) offsetof(s_type, field)
-# else
-# define XtOffsetOf(s_type, field) XtOffset(s_type*, field)
-# endif
-
-#endif
-
-typedef struct _zend_ini_entry zend_ini_entry;
-
-#define ZEND_INI_MH(name) int name(zend_ini_entry *entry, char *new_value, uint new_value_length, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage TSRMLS_DC)
-#define ZEND_INI_DISP(name) void name(zend_ini_entry *ini_entry, int type)
-
-struct _zend_ini_entry {
- int module_number;
- int modifyable;
- char *name;
- uint name_length;
- ZEND_INI_MH((*on_modify));
- void *mh_arg1;
- void *mh_arg2;
- void *mh_arg3;
-
- char *value;
- uint value_length;
-
- char *orig_value;
- uint orig_value_length;
- int modified;
-
- void (*displayer)(zend_ini_entry *ini_entry, int type);
-};
-
-
-ZEND_API int zend_ini_startup(TSRMLS_D);
-ZEND_API int zend_ini_shutdown(TSRMLS_D);
-ZEND_API int zend_ini_deactivate(TSRMLS_D);
-
-ZEND_API int zend_copy_ini_directives(TSRMLS_D);
-
-ZEND_API void zend_ini_sort_entries(TSRMLS_D);
-
-ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number TSRMLS_DC);
-ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC);
-ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC);
-ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage);
-ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage);
-ZEND_API void display_ini_entries(zend_module_entry *module);
-
-ZEND_API long zend_ini_long(char *name, uint name_length, int orig);
-ZEND_API double zend_ini_double(char *name, uint name_length, int orig);
-ZEND_API char *zend_ini_string(char *name, uint name_length, int orig);
-
-ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
-
-ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
-ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
-ZEND_API ZEND_INI_DISP(display_link_numbers);
-
-#define ZEND_INI_BEGIN() static zend_ini_entry ini_entries[] = {
-#define ZEND_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } };
-
-#define ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, displayer) \
- { 0, modifyable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, displayer },
-
-#define ZEND_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, arg2, arg3) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, NULL)
-
-#define ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, displayer) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL, displayer)
-
-#define ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, arg1, arg2) \
- ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL)
-
-#define ZEND_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, displayer) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, NULL, NULL, displayer)
-
-#define ZEND_INI_ENTRY1(name, default_value, modifyable, on_modify, arg1) \
- ZEND_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, NULL)
-
-#define ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, displayer) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, NULL, NULL, NULL, displayer)
-
-#define ZEND_INI_ENTRY(name, default_value, modifyable, on_modify) \
- ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, NULL)
-
-#ifdef ZTS
-#define STD_ZEND_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
-#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
- ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer)
-#define STD_ZEND_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb)
-#else
-#define STD_ZEND_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr)
-#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
- ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer)
-#define STD_ZEND_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
-#endif
-
-#define INI_INT(name) zend_ini_long((name), sizeof(name), 0)
-#define INI_FLT(name) zend_ini_double((name), sizeof(name), 0)
-#define INI_STR(name) zend_ini_string((name), sizeof(name), 0)
-#define INI_BOOL(name) ((zend_bool) INI_INT(name))
-
-#define INI_ORIG_INT(name) zend_ini_long((name), sizeof(name), 1)
-#define INI_ORIG_FLT(name) zend_ini_double((name), sizeof(name), 1)
-#define INI_ORIG_STR(name) zend_ini_string((name), sizeof(name), 1)
-#define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name))
-
-
-#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number TSRMLS_CC)
-#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number TSRMLS_CC)
-#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
-
-#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name), displayer)
-#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb)
-
-/* Standard message handlers */
-ZEND_API ZEND_INI_MH(OnUpdateBool);
-ZEND_API ZEND_INI_MH(OnUpdateInt);
-ZEND_API ZEND_INI_MH(OnUpdateReal);
-ZEND_API ZEND_INI_MH(OnUpdateString);
-ZEND_API ZEND_INI_MH(OnUpdateStringUnempty);
-
-
-#define ZEND_INI_DISPLAY_ORIG 1
-#define ZEND_INI_DISPLAY_ACTIVE 2
-
-#define ZEND_INI_STAGE_STARTUP (1<<0)
-#define ZEND_INI_STAGE_SHUTDOWN (1<<1)
-#define ZEND_INI_STAGE_ACTIVATE (1<<2)
-#define ZEND_INI_STAGE_DEACTIVATE (1<<3)
-#define ZEND_INI_STAGE_RUNTIME (1<<4)
-
-/* INI parsing engine */
-typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, void *arg);
-int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg);
-#define ZEND_INI_PARSER_ENTRY 1
-#define ZEND_INI_PARSER_SECTION 2
-
-typedef struct _zend_ini_parser_param {
- zend_ini_parser_cb_t ini_parser_cb;
- void *arg;
-} zend_ini_parser_param;
-
-#endif /* ZEND_INI_H */
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
deleted file mode 100644
index bd1ddc7d22..0000000000
--- a/Zend/zend_ini_parser.y
+++ /dev/null
@@ -1,236 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#define DEBUG_CFG_PARSER 0
-#include "zend.h"
-#include "zend_API.h"
-#include "zend_ini.h"
-#include "zend_constants.h"
-#include "zend_ini_scanner.h"
-#include "zend_extensions.h"
-
-
-#if WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winbase.h>
-#endif
-
-#define YYSTYPE zval
-
-#ifdef ZTS
-#define YYPARSE_PARAM tsrm_ls
-#define YYLEX_PARAM tsrm_ls
-#endif
-
-#define ZEND_INI_PARSER_CB (CG(ini_parser_param))->ini_parser_cb
-#define ZEND_INI_PARSER_ARG (CG(ini_parser_param))->arg
-
-int ini_lex(zval *ini_lval TSRMLS_DC);
-#ifdef ZTS
-int ini_parse(void *arg);
-#else
-int ini_parse(void);
-#endif
-
-zval yylval;
-
-#ifndef ZTS
-extern int ini_lex(zval *ini_lval TSRMLS_DC);
-extern FILE *ini_in;
-extern int ini_lineno;
-extern void init_cfg_scanner(void);
-#endif
-
-void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
-{
- int i_result;
- int i_op1, i_op2;
- char str_result[MAX_LENGTH_OF_LONG];
-
- i_op1 = atoi(op1->value.str.val);
- free(op1->value.str.val);
- if (op2) {
- i_op2 = atoi(op2->value.str.val);
- free(op2->value.str.val);
- } else {
- i_op2 = 0;
- }
-
- switch (type) {
- case '|':
- i_result = i_op1 | i_op2;
- break;
- case '&':
- i_result = i_op1 & i_op2;
- break;
- case '~':
- i_result = ~i_op1;
- break;
- case '!':
- i_result = !i_op1;
- break;
- default:
- i_result = 0;
- break;
- }
-
- result->value.str.len = zend_sprintf(str_result, "%d", i_result);
- result->value.str.val = (char *) malloc(result->value.str.len+1);
- memcpy(result->value.str.val, str_result, result->value.str.len);
- result->value.str.val[result->value.str.len] = 0;
- result->type = IS_STRING;
-}
-
-
-void zend_ini_get_constant(zval *result, zval *name)
-{
- zval z_constant;
- TSRMLS_FETCH();
-
- if (zend_get_constant(name->value.str.val, name->value.str.len, &z_constant TSRMLS_CC)) {
- /* z_constant is emalloc()'d */
- convert_to_string(&z_constant);
- result->value.str.val = zend_strndup(z_constant.value.str.val, z_constant.value.str.len);
- result->value.str.len = z_constant.value.str.len;
- result->type = z_constant.type;
- zval_dtor(&z_constant);
- free(name->value.str.val);
- } else {
- *result = *name;
- }
-}
-
-
-static void ini_error(char *str)
-{
- char *error_buf;
- int error_buf_len;
- char *currently_parsed_filename;
- TSRMLS_FETCH();
-
- currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C);
- error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */
- error_buf = (char *) emalloc(error_buf_len);
-
- sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C));
-
- if (CG(ini_parser_unbuffered_errors)) {
-#ifdef PHP_WIN32
- MessageBox(NULL, error_buf, "PHP Error", MB_OK|MB_TOPMOST|0x00200000L);
-#else
- fprintf(stderr, "PHP: %s", error_buf);
-#endif
- } else {
- zend_error(E_CORE_WARNING, error_buf);
- }
- efree(error_buf);
-}
-
-
-int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg)
-{
- int retval;
- zend_ini_parser_param ini_parser_param;
- TSRMLS_FETCH();
-
- ini_parser_param.ini_parser_cb = ini_parser_cb;
- ini_parser_param.arg = arg;
-
- CG(ini_parser_param) = &ini_parser_param;
- if (zend_ini_open_file_for_scanning(fh TSRMLS_CC)==FAILURE) {
- return FAILURE;
- }
-
- CG(ini_parser_unbuffered_errors) = unbuffered_errors;
- retval = ini_parse(TSRMLS_C);
-
- zend_ini_close_file(fh TSRMLS_CC);
-
- if (retval==0) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-
-%}
-
-%pure_parser
-%token TC_STRING
-%token TC_ENCAPSULATED_STRING
-%token SECTION
-%token CFG_TRUE
-%token CFG_FALSE
-%left '|' '&'
-%right '~' '!'
-
-%%
-
-statement_list:
- statement_list statement
- | /* empty */
-;
-
-statement:
- TC_STRING '=' string_or_value {
-#if DEBUG_CFG_PARSER
- printf("'%s' = '%s'\n", $1.value.str.val, $3.value.str.val);
-#endif
- ZEND_INI_PARSER_CB(&$1, &$3, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG);
- free($1.value.str.val);
- free($3.value.str.val);
- }
- | TC_STRING { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
- | SECTION { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
- | '\n'
-;
-
-
-string_or_value:
- expr { $$ = $1; }
- | TC_ENCAPSULATED_STRING { $$ = $1; }
- | CFG_TRUE { $$ = $1; }
- | CFG_FALSE { $$ = $1; }
- | '\n' { $$.value.str.val = strdup(""); $$.value.str.len=0; $$.type = IS_STRING; }
- | '\0' { $$.value.str.val = strdup(""); $$.value.str.len=0; $$.type = IS_STRING; }
-;
-
-expr:
- constant_string { $$ = $1; }
- | expr '|' expr { zend_ini_do_op('|', &$$, &$1, &$3); }
- | expr '&' expr { zend_ini_do_op('&', &$$, &$1, &$3); }
- | '~' expr { zend_ini_do_op('~', &$$, &$2, NULL); }
- | '!' expr { zend_ini_do_op('!', &$$, &$2, NULL); }
- | '(' expr ')' { $$ = $2; }
-;
-
-constant_string:
- TC_STRING { zend_ini_get_constant(&$$, &$1); }
-;
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h
deleted file mode 100644
index c683f0b33c..0000000000
--- a/Zend/zend_ini_scanner.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _ZEND_INI_SCANNER_H
-#define _ZEND_INI_SCANNER_H
-
-BEGIN_EXTERN_C()
-int zend_ini_scanner_get_lineno(TSRMLS_D);
-char *zend_ini_scanner_get_filename(TSRMLS_D);
-int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC);
-void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC);
-int ini_lex(zval *ini_lval TSRMLS_DC);
-END_EXTERN_C()
-
-#endif /* _ZEND_INI_SCANNER_H */
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
deleted file mode 100644
index 3d3245132a..0000000000
--- a/Zend/zend_ini_scanner.l
+++ /dev/null
@@ -1,227 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#define yyleng SCNG(yy_leng)
-#define yytext SCNG(yy_text)
-#define yytext_ptr SCNG(yy_text)
-#define yyin SCNG(yy_in)
-#define yyout SCNG(yy_out)
-#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
-#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
-#define yy_more_flag SCNG(_yy_more_flag)
-#define yy_more_len SCNG(_yy_more_len)
-
-#include "zend.h"
-#include "zend_globals.h"
-#include "zend_ini_parser.h"
-#include "zend_ini_scanner.h"
-
-#undef YYSTYPE
-#define YYSTYPE zval
-
-#define YY_DECL int ini_lex(zval *ini_lval TSRMLS_DC)
-
-/* Globals Macros */
-#define SCNG INI_SCNG
-#ifdef ZTS
-ZEND_API ts_rsrc_id ini_scanner_globals_id;
-#else
-ZEND_API zend_scanner_globals ini_scanner_globals;
-#endif
-
-
-static char *ini_filename;
-
-void init_ini_scanner()
-{
- ini_lineno=1;
-}
-
-
-int zend_ini_scanner_get_lineno(TSRMLS_D)
-{
- return ini_lineno;
-}
-
-
-char *zend_ini_scanner_get_filename(TSRMLS_D)
-{
- return ini_filename;
-}
-
-
-int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
-{
- FILE *fp;
-
- switch (fh->type) {
- case ZEND_HANDLE_FP:
- fp = fh->handle.fp;
- break;
- case ZEND_HANDLE_FILENAME:
- fp = zend_fopen(fh->filename, NULL);
- fh->type = ZEND_HANDLE_FP;
- break;
- default:
- return FAILURE;
- }
-
- init_ini_scanner();
- yyin = fp;
- yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
- ini_filename = fh->filename;
- return SUCCESS;
-}
-
-
-void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC)
-{
- switch (fh->type) {
- case ZEND_HANDLE_FP:
- fclose(fh->handle.fp);
- break;
- }
-}
-
-%}
-
-NEWLINE ("\r"|"\n"|"\r\n")
-
-%option noyywrap
-%option yylineno
-
-%%
-
-
-<INITIAL>[ ]*("true"|"on"|"yes")[ ]* {
- ini_lval->value.str.val = zend_strndup("1", 1);
- ini_lval->value.str.len = 1;
- ini_lval->type = IS_STRING;
- return CFG_TRUE;
-}
-
-
-<INITIAL>[ ]*("false"|"off"|"no"|"none")[ ]* {
- ini_lval->value.str.val = zend_strndup("", 0);
- ini_lval->value.str.len = 0;
- ini_lval->type = IS_STRING;
- return CFG_FALSE;
-}
-
-<INITIAL>[[][^[]+[\]]{NEWLINE}? {
- /* SECTION */
-
- /* eat trailng ] */
- while (yyleng>0 && (yytext[yyleng-1]=='\n' || yytext[yyleng-1]=='\r' || yytext[yyleng-1]==']')) {
- yyleng--;
- yytext[yyleng]=0;
- }
-
- /* eat leading [ */
- yytext++;
- yyleng--;
-
- ini_lval->value.str.val = zend_strndup(yytext, yyleng);
- ini_lval->value.str.len = yyleng;
- ini_lval->type = IS_STRING;
- return SECTION;
-}
-
-
-<INITIAL>["][^\n\r"]*["] {
- /* ENCAPSULATED TC_STRING */
-
- /* eat trailing " */
- yytext[yyleng-1]=0;
-
- /* eat leading " */
- yytext++;
-
- ini_lval->value.str.val = zend_strndup(yytext, yyleng - 2);
- ini_lval->value.str.len = yyleng - 2;
- ini_lval->type = IS_STRING;
- return TC_ENCAPSULATED_STRING;
-}
-
-<INITIAL>[&|~()!] {
- return yytext[0];
-}
-
-
-<INITIAL>[^=\n\r\t;|&~()!"]+ {
- /* STRING */
- register int i;
-
- /* eat trailing whitespace */
- for (i=yyleng-1; i>=0; i--) {
- if (yytext[i]==' ' || yytext[i]=='\t') {
- yytext[i]=0;
- yyleng--;
- } else {
- break;
- }
- }
- /* eat leading whitespace */
- while (yytext[0]) {
- if (yytext[0]==' ' || yytext[0]=='\t') {
- yytext++;
- yyleng--;
- } else {
- break;
- }
- }
- if (yyleng!=0) {
- ini_lval->value.str.val = zend_strndup(yytext, yyleng);
- ini_lval->value.str.len = yyleng;
- ini_lval->type = IS_STRING;
- return TC_STRING;
- } else {
- /* whitespace */
- }
-}
-
-
-
-<INITIAL>[=\n] {
- return yytext[0];
-}
-
-<INITIAL>{NEWLINE} {
- return '\n';
-}
-
-<INITIAL>[;][^\r\n]*{NEWLINE}? {
- /* comment */
- return '\n';
-}
-
-<INITIAL>[ \t] {
- /* eat whitespace */
-}
-
-<INITIAL>. {
-#if DEBUG
- php_error(E_NOTICE,"Unexpected character on line %d: '%s' (ASCII %d)\n", yylineno, yytext, yytext[0]);
-#endif
-}
-
-<<EOF>> {
- yy_delete_buffer(YY_CURRENT_BUFFER TSRMLS_CC);
- yyterminate();
-}
diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h
deleted file mode 100644
index 00b65b3793..0000000000
--- a/Zend/zend_istdiostream.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _ZEND_STDIOSTREAM
-#define _ZEND_STDIOSTREAM
-
-#if defined(ZTS) && !defined(HAVE_CLASS_ISTDIOSTREAM)
-class istdiostream : public istream
-{
-private:
- stdiobuf _file;
-public:
- istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); }
- stdiobuf* rdbuf()/* const */ { return &_file; }
-};
-#endif
-
-#endif
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
deleted file mode 100644
index a5b3ac3a85..0000000000
--- a/Zend/zend_language_parser.y
+++ /dev/null
@@ -1,777 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/*
- * LALR shift/reduce conflicts and how they are resolved:
- *
- * - 2 shift/reduce conflicts due to the dangeling elseif/else ambiguity. Solved by shift.
- * - 1 shift/reduce conflict due to arrays within encapsulated strings. Solved by shift.
- * - 1 shift/reduce conflict due to objects within encapsulated strings. Solved by shift.
- *
- */
-
-
-#include "zend_compile.h"
-#include "zend.h"
-#include "zend_list.h"
-#include "zend_globals.h"
-#include "zend_API.h"
-
-#define YYERROR_VERBOSE
-#define YYSTYPE znode
-#ifdef ZTS
-# define YYPARSE_PARAM tsrm_ls
-# define YYLEX_PARAM tsrm_ls
-#endif
-
-
-%}
-
-%pure_parser
-%expect 4
-
-%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
-%left ','
-%left T_LOGICAL_OR
-%left T_LOGICAL_XOR
-%left T_LOGICAL_AND
-%right T_PRINT
-%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
-%left '?' ':'
-%left T_BOOLEAN_OR
-%left T_BOOLEAN_AND
-%left '|'
-%left '^'
-%left '&'
-%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL
-%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
-%left T_SL T_SR
-%left '+' '-' '.'
-%left '*' '/' '%'
-%right '!' '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
-%right '['
-%nonassoc T_NEW T_DELETE
-%token T_EXIT
-%token T_IF
-%left T_ELSEIF
-%left T_ELSE
-%left T_ENDIF
-%token T_LNUMBER
-%token T_DNUMBER
-%token T_STRING
-%token T_STRING_VARNAME
-%token T_VARIABLE
-%token T_NUM_STRING
-%token T_INLINE_HTML
-%token T_CHARACTER
-%token T_BAD_CHARACTER
-%token T_ENCAPSED_AND_WHITESPACE
-%token T_CONSTANT_ENCAPSED_STRING
-%token T_ECHO
-%token T_DO
-%token T_WHILE
-%token T_ENDWHILE
-%token T_FOR
-%token T_ENDFOR
-%token T_FOREACH
-%token T_ENDFOREACH
-%token T_DECLARE
-%token T_ENDDECLARE
-%token T_AS
-%token T_SWITCH
-%token T_ENDSWITCH
-%token T_CASE
-%token T_DEFAULT
-%token T_BREAK
-%token T_CONTINUE
-%token T_OLD_FUNCTION
-%token T_FUNCTION
-%token T_CONST
-%token T_RETURN
-%token T_TRY
-%token T_CATCH
-%token T_THROW
-%token T_USE
-%token T_GLOBAL
-%token T_STATIC
-%token T_VAR
-%token T_UNSET
-%token T_ISSET
-%token T_EMPTY
-%token T_NAMESPACE
-%token T_CLASS
-%token T_EXTENDS
-%token T_OBJECT_OPERATOR
-%token T_DOUBLE_ARROW
-%token T_LIST
-%token T_ARRAY
-%token T_LINE
-%token T_FILE
-%token T_COMMENT
-%token T_ML_COMMENT
-%token T_OPEN_TAG
-%token T_OPEN_TAG_WITH_ECHO
-%token T_CLOSE_TAG
-%token T_WHITESPACE
-%token T_START_HEREDOC
-%token T_END_HEREDOC
-%token T_DOLLAR_OPEN_CURLY_BRACES
-%token T_CURLY_OPEN
-%token T_PAAMAYIM_NEKUDOTAYIM
-
-%% /* Rules */
-
-start:
- top_statement_list
-;
-
-top_statement_list:
- top_statement_list { zend_do_extended_info(TSRMLS_C); } top_statement { HANDLE_INTERACTIVE(); }
- | /* empty */
-;
-
-
-top_statement:
- statement
- | declaration_statement { zend_do_early_binding(TSRMLS_C); }
-;
-
-
-inner_statement_list:
- inner_statement_list { zend_do_extended_info(TSRMLS_C); } inner_statement { HANDLE_INTERACTIVE(); }
- | /* empty */
-;
-
-
-inner_statement:
- statement
- | declaration_statement
-;
-
-
-statement:
- unticked_statement { zend_do_ticks(TSRMLS_C); }
-;
-
-
-unticked_statement:
- '{' inner_statement_list '}'
- | T_IF '(' expr ')' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } statement { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } elseif_list else_single { zend_do_if_end(TSRMLS_C); }
- | T_IF '(' expr ')' ':' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } new_elseif_list new_else_single T_ENDIF ';' { zend_do_if_end(TSRMLS_C); }
- | T_WHILE '(' { $1.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' { zend_do_while_cond(&$4, &$5 TSRMLS_CC); } while_statement { zend_do_while_end(&$1, &$5 TSRMLS_CC); }
- | T_DO { $1.u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_do_while_begin(TSRMLS_C); } statement T_WHILE '(' { $5.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' ';' { zend_do_do_while_end(&$1, &$5, &$7 TSRMLS_CC); }
- | T_FOR
- '('
- for_expr
- ';' { zend_do_free(&$3 TSRMLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); }
- for_expr
- ';' { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&$6, &$7 TSRMLS_CC); }
- for_expr
- ')' { zend_do_free(&$9 TSRMLS_CC); zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); }
- for_statement { zend_do_for_end(&$7 TSRMLS_CC); }
- | T_SWITCH '(' expr ')' { zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6 TSRMLS_CC); }
- | T_BREAK ';' { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
- | T_BREAK expr ';' { zend_do_brk_cont(ZEND_BRK, &$2 TSRMLS_CC); }
- | T_CONTINUE ';' { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
- | T_CONTINUE expr ';' { zend_do_brk_cont(ZEND_CONT, &$2 TSRMLS_CC); }
- | T_RETURN ';' { zend_do_return(NULL, 0 TSRMLS_CC); }
- | T_RETURN expr_without_variable ';' { zend_do_return(&$2, 0 TSRMLS_CC); }
- | T_RETURN cvar ';' { zend_do_return(&$2, 1 TSRMLS_CC); }
- | T_GLOBAL global_var_list ';'
- | T_STATIC static_var_list ';'
- | T_ECHO echo_expr_list ';'
- | T_INLINE_HTML { zend_do_echo(&$1 TSRMLS_CC); }
- | expr ';' { zend_do_free(&$1 TSRMLS_CC); }
- | T_USE use_filename ';' { zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()"); zval_dtor(&$2.u.constant); }
- | T_UNSET '(' unset_variables ')' ';'
- | T_FOREACH '(' cvar T_AS { zend_do_foreach_begin(&$1, &$3, &$2, &$4, 1 TSRMLS_CC); } w_cvar foreach_optional_arg ')' { zend_do_foreach_cont(&$6, &$7, &$4 TSRMLS_CC); } foreach_statement { zend_do_foreach_end(&$1, &$2 TSRMLS_CC); }
- | T_FOREACH '(' expr_without_variable T_AS { zend_do_foreach_begin(&$1, &$3, &$2, &$4, 0 TSRMLS_CC); } w_cvar foreach_optional_arg ')' { zend_do_foreach_cont(&$6, &$7, &$4 TSRMLS_CC); } foreach_statement { zend_do_foreach_end(&$1, &$2 TSRMLS_CC); }
- | T_DECLARE { zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(TSRMLS_C); }
- | ';' /* empty statement */
- | T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
- T_CATCH '(' T_VARIABLE ')' { zend_do_begin_catch(&$1, &$8 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
- | T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
- | T_DELETE cvar ';' { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1, ZEND_UNSET_OBJ TSRMLS_CC); }
- | T_NAMESPACE namespace_class_entry ';' { do_namespace(&$2 TSRMLS_CC); }
- | T_NAMESPACE ';' { do_namespace(NULL TSRMLS_CC); }
-;
-
-unset_variables:
- unset_variable
- | unset_variables ',' unset_variable
-;
-
-unset_variable:
- cvar { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1, ZEND_UNSET_REG TSRMLS_CC); }
-;
-
-use_filename:
- T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
- | '(' T_CONSTANT_ENCAPSED_STRING ')' { $$ = $2; }
-;
-
-
-declaration_statement:
- unticked_declaration_statement { zend_do_ticks(TSRMLS_C); }
-;
-
-
-unticked_declaration_statement:
- T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type TSRMLS_CC); }
- '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
- | T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type TSRMLS_CC); }
- parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
- | T_CLASS T_STRING { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
- | T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
-;
-
-
-foreach_optional_arg:
- /* empty */ { $$.op_type = IS_UNUSED; }
- | T_DOUBLE_ARROW w_cvar { $$ = $2; }
-;
-
-
-for_statement:
- statement
- | ':' inner_statement_list T_ENDFOR ';'
-;
-
-
-foreach_statement:
- statement
- | ':' inner_statement_list T_ENDFOREACH ';'
-;
-
-
-declare_statement:
- statement
- | ':' inner_statement_list T_ENDDECLARE ';'
-;
-
-
-declare_list:
- T_STRING '=' static_scalar { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); }
- | declare_list ',' T_STRING '=' static_scalar { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); }
-;
-
-
-switch_case_list:
- '{' case_list '}' { $$ = $2; }
- | '{' ';' case_list '}' { $$ = $3; }
- | ':' case_list T_ENDSWITCH ';' { $$ = $2; }
- | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
-;
-
-
-case_list:
- /* empty */ { $$.op_type = IS_UNUSED; }
- | case_list T_CASE expr case_separator { zend_do_extended_info(TSRMLS_C); zend_do_case_before_statement(&$1, &$2, &$3 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST }
- | case_list T_DEFAULT case_separator { zend_do_extended_info(TSRMLS_C); zend_do_default_before_statement(&$1, &$2 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST; }
-;
-
-
-case_separator:
- ':'
- | ';'
-;
-
-
-while_statement:
- statement
- | ':' inner_statement_list T_ENDWHILE ';'
-;
-
-
-
-elseif_list:
- /* empty */
- | elseif_list T_ELSEIF '(' expr ')' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
-;
-
-
-new_elseif_list:
- /* empty */
- | new_elseif_list T_ELSEIF '(' expr ')' ':' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
-;
-
-
-else_single:
- /* empty */
- | T_ELSE statement
-;
-
-
-new_else_single:
- /* empty */
- | T_ELSE ':' inner_statement_list
-;
-
-
-parameter_list:
- non_empty_parameter_list
- | /* empty */
-;
-
-
-non_empty_parameter_list:
- T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$1, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
- | '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE TSRMLS_CC); }
- | T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
- | T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$1, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$3, BYREF_NONE TSRMLS_CC); }
- | non_empty_parameter_list ',' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
- | non_empty_parameter_list ',' '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE TSRMLS_CC); }
- | non_empty_parameter_list ',' T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
- | non_empty_parameter_list ',' T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, BYREF_NONE TSRMLS_CC); }
-;
-
-
-function_call_parameter_list:
- non_empty_function_call_parameter_list { $$ = $1; }
- | /* empty */ { $$.u.constant.value.lval = 0; }
-;
-
-
-non_empty_function_call_parameter_list:
- expr_without_variable { $$.u.constant.value.lval = 1; zend_do_pass_param(&$1, ZEND_SEND_VAL, $$.u.constant.value.lval TSRMLS_CC); }
- | cvar { $$.u.constant.value.lval = 1; zend_do_pass_param(&$1, ZEND_SEND_VAR, $$.u.constant.value.lval TSRMLS_CC); }
- | '&' w_cvar { $$.u.constant.value.lval = 1; zend_do_pass_param(&$2, ZEND_SEND_REF, $$.u.constant.value.lval TSRMLS_CC); }
- | non_empty_function_call_parameter_list ',' expr_without_variable { $$.u.constant.value.lval=$1.u.constant.value.lval+1; zend_do_pass_param(&$3, ZEND_SEND_VAL, $$.u.constant.value.lval TSRMLS_CC); }
- | non_empty_function_call_parameter_list ',' cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; zend_do_pass_param(&$3, ZEND_SEND_VAR, $$.u.constant.value.lval TSRMLS_CC); }
- | non_empty_function_call_parameter_list ',' '&' w_cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; zend_do_pass_param(&$4, ZEND_SEND_REF, $$.u.constant.value.lval TSRMLS_CC); }
-;
-
-global_var_list:
- global_var_list ',' global_var { zend_do_fetch_global_or_static_variable(&$3, NULL, ZEND_FETCH_GLOBAL TSRMLS_CC); }
- | global_var { zend_do_fetch_global_or_static_variable(&$1, NULL, ZEND_FETCH_GLOBAL TSRMLS_CC); }
-;
-
-
-global_var:
- T_VARIABLE { $$ = $1; }
- | '$' r_cvar { $$ = $2; }
- | '$' '{' expr '}' { $$ = $3; }
-;
-
-
-static_var_list:
- static_var_list ',' T_VARIABLE { zend_do_fetch_global_or_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
- | static_var_list ',' T_VARIABLE '=' static_scalar { zend_do_fetch_global_or_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); }
- | T_VARIABLE { zend_do_fetch_global_or_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
- | T_VARIABLE '=' static_scalar { zend_do_fetch_global_or_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); }
-
-;
-
-
-class_statement_list:
- class_statement_list class_statement
- | /* empty */
-;
-
-
-class_statement:
- class_variable_decleration ';'
- | class_constant_decleration ';'
- | T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 1, $3.op_type TSRMLS_CC); } '('
- parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
- | T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 1, $3.op_type TSRMLS_CC); }
- parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
- | T_CLASS T_STRING { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
- | T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
-;
-
-is_reference:
- /* empty */ { $$.op_type = ZEND_RETURN_VAL; }
- | '&' { $$.op_type = ZEND_RETURN_REF; }
-
-class_variable_decleration:
- class_variable_decleration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL, $1.op_type TSRMLS_CC); }
- | class_variable_decleration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5, $1.op_type TSRMLS_CC); }
- | class_decleration_type T_VARIABLE { $$ = $1; zend_do_declare_property(&$2, NULL, $1.op_type TSRMLS_CC); }
- | class_decleration_type T_VARIABLE '=' static_scalar { $$ = $1; zend_do_declare_property(&$2, &$4, $1.op_type TSRMLS_CC); }
-;
-
-class_decleration_type:
- T_VAR { $$.op_type = T_VAR; }
- | T_STATIC { $$.op_type = T_STATIC; }
-;
-
-class_constant_decleration:
- | T_CONST ',' T_STRING '=' static_scalar { zend_do_declare_property(&$3, &$5, T_CONST TSRMLS_CC); }
- | T_CONST T_STRING '=' static_scalar { zend_do_declare_property(&$2, &$4, T_CONST TSRMLS_CC); }
-;
-
-echo_expr_list:
- | echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
- | expr { zend_do_echo(&$1 TSRMLS_CC); }
-;
-
-
-for_expr:
- /* empty */ { $$.op_type = IS_CONST; $$.u.constant.type = IS_BOOL; $$.u.constant.value.lval = 1; }
- | non_empty_for_expr { $$ = $1; }
-;
-
-non_empty_for_expr:
- non_empty_for_expr ',' { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; }
- | expr { $$ = $1; }
-;
-
-expr_without_variable:
- T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
- | cvar '=' expr { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
- | cvar '=' '&' w_cvar { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
- | cvar '=' '&' function_call { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
- | cvar '=' '&' T_NEW new_class_entry { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
- | T_NEW new_class_entry { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
- | cvar T_PLUS_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_MINUS_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_MUL_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_DIV_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_CONCAT_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_MOD_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_AND_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_OR_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_XOR_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_SL_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); }
- | cvar T_SR_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); }
- | rw_cvar T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); }
- | T_INC rw_cvar { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); }
- | rw_cvar T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); }
- | T_DEC rw_cvar { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_DEC TSRMLS_CC); }
- | expr T_BOOLEAN_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
- | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
- | expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
- | expr T_LOGICAL_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
- | expr T_LOGICAL_XOR expr { zend_do_binary_op(ZEND_BOOL_XOR, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '|' expr { zend_do_binary_op(ZEND_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '&' expr { zend_do_binary_op(ZEND_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '^' expr { zend_do_binary_op(ZEND_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '.' expr { zend_do_binary_op(ZEND_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '+' expr { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '-' expr { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '*' expr { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '/' expr { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '%' expr { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_SL expr { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_SR expr { zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); }
- | '+' expr { $1.u.constant.value.lval=0; $1.u.constant.type=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_ADD, &$$, &$1, &$2 TSRMLS_CC); }
- | '-' expr { $1.u.constant.value.lval=0; $1.u.constant.type=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_SUB, &$$, &$1, &$2 TSRMLS_CC); }
- | '!' expr { zend_do_unary_op(ZEND_BOOL_NOT, &$$, &$2 TSRMLS_CC); }
- | '~' expr { zend_do_unary_op(ZEND_BW_NOT, &$$, &$2 TSRMLS_CC); }
- | expr T_IS_IDENTICAL expr { zend_do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_IS_NOT_IDENTICAL expr { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_IS_EQUAL expr { zend_do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '<' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 TSRMLS_CC); }
- | expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
- | expr '>' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }
- | expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); }
- | '(' expr ')' { $$ = $2; }
- | expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
- expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
- expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); }
- | function_call { $$ = $1; }
- | internal_functions_in_yacc { $$ = $1; }
- | T_INT_CAST expr { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); }
- | T_DOUBLE_CAST expr { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); }
- | T_STRING_CAST expr { zend_do_cast(&$$, &$2, IS_STRING TSRMLS_CC); }
- | T_ARRAY_CAST expr { zend_do_cast(&$$, &$2, IS_ARRAY TSRMLS_CC); }
- | T_OBJECT_CAST expr { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); }
- | T_BOOL_CAST expr { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); }
- | T_UNSET_CAST expr { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); }
- | T_EXIT exit_expr { zend_do_exit(&$$, &$2 TSRMLS_CC); }
- | '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
- | scalar { $$ = $1; }
- | T_ARRAY '(' array_pair_list ')' { $$ = $3; }
- | '`' encaps_list '`' { zend_do_shell_exec(&$$, &$2 TSRMLS_CC); }
- | T_PRINT expr { zend_do_print(&$$, &$2 TSRMLS_CC); }
-;
-
-function_call:
- T_STRING '(' { $2.u.opline_num = zend_do_begin_function_call(&$1 TSRMLS_CC); }
- function_call_parameter_list
- ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
- | parse_class_entry static_or_variable_string '(' { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_class_member_function_call(&$1, &$2 TSRMLS_CC); }
- function_call_parameter_list
- ')' { zend_do_end_function_call(&$2, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
- | cvar_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1 TSRMLS_CC); }
- function_call_parameter_list ')'
- { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
-;
-
-parse_class_entry:
- parse_class_entry T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
- | T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
-;
-
-parse_class_name_entry:
- parse_class_name_entry T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class_name(&$$, &$1, &$2 TSRMLS_CC); }
- | T_STRING T_PAAMAYIM_NEKUDOTAYIM { $$ = $1; }
-;
-
-namespace_class_entry:
- parse_class_entry T_STRING { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
- | T_STRING { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
-;
-
-new_class_entry:
- parse_class_entry static_or_variable_string { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
- | static_or_variable_string { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
-;
-
-static_or_variable_string:
- T_STRING { $$ = $1; }
- | r_cvar_without_static_member { $$ = $1; }
-;
-
-
-exit_expr:
- /* empty */ { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
- | '(' ')' { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
- | '(' expr ')' { $$ = $2; }
-;
-
-
-ctor_arguments:
- /* empty */ { $$.u.constant.value.lval=0; }
- | '(' function_call_parameter_list ')' { $$ = $2; }
-;
-
-
-common_scalar:
- T_LNUMBER { $$ = $1; }
- | T_DNUMBER { $$ = $1; }
- | T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
- | T_LINE { $$ = $1; }
- | T_FILE { $$ = $1; }
-;
-
-
-static_scalar: /* compile-time evaluated scalars */
- common_scalar { $$ = $1; }
- | T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT TSRMLS_CC); }
- | '+' static_scalar { $$ = $1; }
- | '-' static_scalar { zval minus_one; minus_one.type = IS_LONG; minus_one.value.lval = -1; mul_function(&$2.u.constant, &$2.u.constant, &minus_one TSRMLS_CC); $$ = $2; }
- | T_ARRAY '(' static_array_pair_list ')' { $$ = $3; $$.u.constant.type = IS_CONSTANT_ARRAY; }
- | parse_class_name_entry T_STRING { zend_do_fetch_constant(&$$, &$1, &$2, ZEND_CT TSRMLS_CC); }
-;
-
-
-scalar:
- T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT TSRMLS_CC); }
- | T_STRING_VARNAME { $$ = $1; }
- | parse_class_entry T_STRING { zend_do_fetch_constant(&$$, &$1, &$2, ZEND_RT TSRMLS_CC); }
- | common_scalar { $$ = $1; }
- | '"' encaps_list '"' { $$ = $2; }
- | '\'' encaps_list '\'' { $$ = $2; }
- | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; zend_do_end_heredoc(TSRMLS_C); }
-;
-
-
-static_array_pair_list:
- /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
- | non_empty_static_array_pair_list possible_comma { $$ = $1; }
-;
-
-possible_comma:
- /* empty */
- | ','
-;
-
-non_empty_static_array_pair_list:
- non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); }
- | non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); }
- | static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, &$1, &$3); }
- | static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); }
-;
-
-expr:
- r_cvar { $$ = $1; }
- | expr_without_variable { $$ = $1; }
-;
-
-
-r_cvar:
- cvar { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
-;
-
-
-w_cvar:
- cvar { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); $$ = $1; }
-;
-
-
-rw_cvar:
- cvar { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); $$ = $1; }
-;
-
-r_cvar_without_static_member:
- variable { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
-;
-
-cvar:
- variable { $$ = $1; }
- | static_member {$$ = $1; }
-;
-
-static_member:
- parse_class_entry variable { $$ = $2; zend_do_fetch_static_member(&$1 TSRMLS_CC); }
-;
-
-variable:
- variable_property '(' { zend_do_begin_method_call(NULL, &$1 TSRMLS_CC); }
- function_call_parameter_list ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
- | variable_property { $$ = $1; }
- | cvar_without_objects { $$ = $1; }
-;
-
-variable_property:
- variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } object_property { $$ = $4; }
-;
-
-
-cvar_without_objects:
- reference_variable { $$ = $1; }
- | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); }
-;
-
-
-reference_variable:
- reference_variable '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
- | reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
- | compound_variable { zend_do_fetch_globals(&$1 TSRMLS_CC); zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
-;
-
-
-compound_variable:
- T_VARIABLE { $$ = $1; }
- | '$' '{' expr '}' { $$ = $3; }
-;
-
-dim_offset:
- /* empty */ { $$.op_type = IS_UNUSED; }
- | expr { $$ = $1; }
-;
-
-
-object_property:
- object_dim_list { $$ = $1; }
- | cvar_without_objects { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); } { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
-;
-
-object_dim_list:
- object_dim_list '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
- | object_dim_list '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
- | variable_name { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
-;
-
-variable_name:
- T_STRING { $$ = $1; }
- | '{' expr '}' { $$ = $2; }
-;
-
-
-simple_indirect_reference:
- '$' { $$.u.constant.value.lval = 1; }
- | simple_indirect_reference '$' { $$.u.constant.value.lval++; }
-;
-
-assignment_list:
- assignment_list ',' assignment_list_element
- | assignment_list_element
-;
-
-
-assignment_list_element:
- cvar { zend_do_add_list_element(&$1 TSRMLS_CC); }
- | T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')' { zend_do_new_list_end(TSRMLS_C); }
- | /* empty */ { zend_do_add_list_element(NULL TSRMLS_CC); }
-;
-
-
-array_pair_list:
- /* empty */ { zend_do_init_array(&$$, NULL, NULL, 0 TSRMLS_CC); }
- | non_empty_array_pair_list possible_comma { $$ = $1; }
-;
-
-non_empty_array_pair_list:
- non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { zend_do_add_array_element(&$$, &$5, &$3, 0 TSRMLS_CC); }
- | non_empty_array_pair_list ',' expr { zend_do_add_array_element(&$$, &$3, NULL, 0 TSRMLS_CC); }
- | expr T_DOUBLE_ARROW expr { zend_do_init_array(&$$, &$3, &$1, 0 TSRMLS_CC); }
- | expr { zend_do_init_array(&$$, &$1, NULL, 0 TSRMLS_CC); }
- | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_cvar { zend_do_add_array_element(&$$, &$6, &$3, 1 TSRMLS_CC); }
- | non_empty_array_pair_list ',' '&' w_cvar { zend_do_add_array_element(&$$, &$4, NULL, 1 TSRMLS_CC); }
- | expr T_DOUBLE_ARROW '&' w_cvar { zend_do_init_array(&$$, &$4, &$1, 1 TSRMLS_CC); }
- | '&' w_cvar { zend_do_init_array(&$$, &$2, NULL, 1 TSRMLS_CC); }
-;
-
-encaps_list:
- encaps_list encaps_var { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_STRING { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_NUM_STRING { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_ENCAPSED_AND_WHITESPACE { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_CHARACTER { zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_BAD_CHARACTER { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list '[' { $2.u.constant.value.lval = (long) '['; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list ']' { $2.u.constant.value.lval = (long) ']'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list '{' { $2.u.constant.value.lval = (long) '{'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list '}' { $2.u.constant.value.lval = (long) '}'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); }
- | encaps_list T_OBJECT_OPERATOR { znode tmp; $2.u.constant.value.lval = (long) '-'; zend_do_add_char(&tmp, &$1, &$2 TSRMLS_CC); $2.u.constant.value.lval = (long) '>'; zend_do_add_char(&$$, &tmp, &$2 TSRMLS_CC); }
- | /* empty */ { zend_do_init_string(&$$ TSRMLS_CC); }
-
-;
-
-
-
-encaps_var:
- T_VARIABLE { zend_do_fetch_globals(&$1 TSRMLS_CC); zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
- | T_VARIABLE '[' { zend_do_begin_variable_parse(TSRMLS_C); } encaps_var_offset ']' { zend_do_fetch_globals(&$1 TSRMLS_CC); fetch_array_begin(&$$, &$1, &$4 TSRMLS_CC); }
- | T_VARIABLE T_OBJECT_OPERATOR T_STRING { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$2, &$1, 1 TSRMLS_CC); zend_do_fetch_property(&$$, &$2, &$3 TSRMLS_CC); }
- | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$2, 1 TSRMLS_CC); }
- | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_array_begin(&$$, &$2, &$4 TSRMLS_CC); }
- | T_CURLY_OPEN cvar '}' { $$ = $2; }
-;
-
-
-encaps_var_offset:
- T_STRING { $$ = $1; }
- | T_NUM_STRING { $$ = $1; }
- | T_VARIABLE { fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
-;
-
-
-internal_functions_in_yacc:
- T_ISSET '(' isset_variables ')' { $$ = $3; }
- | T_EMPTY '(' cvar ')' { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); }
- | T_INCLUDE expr { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); }
- | T_INCLUDE_ONCE expr { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); }
- | T_EVAL '(' expr ')' { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); }
- | T_REQUIRE expr { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); }
- | T_REQUIRE_ONCE expr { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); }
-;
-
-isset_variables:
- cvar { zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); }
- | isset_variables ',' { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } cvar { znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp, &$4 TSRMLS_CC); zend_do_boolean_and_end(&$$, &$1, &tmp, &$2 TSRMLS_CC); }
-;
-
-%%
-
diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h
deleted file mode 100644
index ea373d6b36..0000000000
--- a/Zend/zend_language_scanner.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_SCANNER_H
-#define ZEND_SCANNER_H
-
-typedef struct _zend_lex_state {
- YY_BUFFER_STATE buffer_state;
- int state;
- FILE *in;
- uint lineno;
- char *filename;
-} zend_lex_state;
-
-
-void zend_fatal_scanner_error(char *);
-BEGIN_EXTERN_C()
-int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2);
-END_EXTERN_C()
-
-#endif
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
deleted file mode 100644
index 88b4cef268..0000000000
--- a/Zend/zend_language_scanner.l
+++ /dev/null
@@ -1,1472 +0,0 @@
-%{
-
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#define yyleng SCNG(yy_leng)
-#define yytext SCNG(yy_text)
-#define yytext_ptr SCNG(yy_text)
-#define yyin SCNG(yy_in)
-#define yyout SCNG(yy_out)
-#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
-#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
-#define yy_more_flag SCNG(_yy_more_flag)
-#define yy_more_len SCNG(_yy_more_len)
-
-%}
-
-%x ST_IN_SCRIPTING
-%x ST_DOUBLE_QUOTES
-%x ST_SINGLE_QUOTE
-%x ST_BACKQUOTE
-%x ST_HEREDOC
-%x ST_LOOKING_FOR_PROPERTY
-%x ST_LOOKING_FOR_VARNAME
-%x ST_COMMENT
-%x ST_ONE_LINE_COMMENT
-%option stack
-
-%{
-
-#ifdef ZEND_WIN32
-#include <io.h>
-#endif
-
-#include <errno.h>
-#include "zend.h"
-#include "zend_alloc.h"
-#include "zend_language_parser.h"
-#include "zend_compile.h"
-#include "zend_language_scanner.h"
-#include "zend_highlight.h"
-#include "zend_constants.h"
-#include "zend_variables.h"
-#include "zend_operators.h"
-
-#ifdef HAVE_STDARG_H
-# include <stdarg.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#define YY_DECL int lex_scan(zval *zendlval TSRMLS_DC)
-
-#define ECHO { ZEND_WRITE( yytext, yyleng ); }
-
-#ifdef ZTS
-# define MY_INPUT yyinput
-#else
-# define MY_INPUT input
-#endif
-
-
-/* Globals Macros */
-#define SCNG LANG_SCNG
-#ifdef ZTS
-ZEND_API ts_rsrc_id language_scanner_globals_id;
-#else
-ZEND_API zend_scanner_globals language_scanner_globals;
-#endif
-
-
-#define YY_FATAL_ERROR zend_fatal_scanner_error
-
-#define HANDLE_NEWLINES(s, l) \
-do { \
- char *p = (s), *boundary = p+(l); \
- \
- while (p<boundary) { \
- if (*p == '\n') { \
- CG(zend_lineno)++; \
- } else if ((*p == '\r') && (p+1 < boundary) && (*(p+1) != '\n')) { \
- CG(zend_lineno)++; \
- } \
- p++; \
- } \
-} while (0)
-
-#define HANDLE_NEWLINE(c) \
-{ \
- if (c == '\n' || c == '\r') { \
- CG(zend_lineno)++; \
- } \
-}
-
-
-#define ZEND_IS_OCT(c) ((c)>='0' && (c)<='7')
-#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))
-
-
-void zend_fatal_scanner_error(char *message)
-{
- zend_error(E_COMPILE_ERROR, message);
-}
-
-BEGIN_EXTERN_C()
-void startup_scanner(TSRMLS_D)
-{
- CG(heredoc) = NULL;
- CG(heredoc_len)=0;
-}
-
-
-void shutdown_scanner(TSRMLS_D)
-{
- if (CG(heredoc)) {
- efree(CG(heredoc));
- CG(heredoc_len)=0;
- }
-}
-END_EXTERN_C()
-
-
-static inline void save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
-{
- memcpy(&lex_state->buffer_state, &YY_CURRENT_BUFFER, sizeof(YY_BUFFER_STATE));
- lex_state->in = SCNG(yy_in);
- lex_state->state = YYSTATE;
- lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
- lex_state->lineno = CG(zend_lineno);
-}
-
-
-static inline void restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
-{
- YY_BUFFER_STATE original_buffer_state = YY_CURRENT_BUFFER;
-
- if (lex_state->buffer_state) {
- yy_switch_to_buffer(lex_state->buffer_state TSRMLS_CC);
- } else {
- YY_CURRENT_BUFFER = NULL;
- }
-
- yy_delete_buffer(original_buffer_state TSRMLS_CC);
- SCNG(yy_in) = lex_state->in;
- BEGIN(lex_state->state);
- CG(zend_lineno) = lex_state->lineno;
- zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
-}
-
-
-BEGIN_EXTERN_C()
-
-
-ZEND_API void zend_file_handle_dtor(zend_file_handle *fh)
-{
- switch (fh->type) {
- case ZEND_HANDLE_FP:
- fclose(fh->handle.fp);
- break;
- case ZEND_HANDLE_FILENAME:
- /* We're only supposed to get here when destructing the used_files hash,
- * which doesn't really contain open files, but references to their names/paths
- */
- break;
- }
- if (fh->opened_path) {
- efree(fh->opened_path);
- }
- if (fh->free_filename && fh->filename) {
- efree(fh->filename);
- }
-}
-
-
-int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2)
-{
- if (fh1->type != fh2->type) {
- return 0;
- }
- switch (fh1->type) {
- case ZEND_HANDLE_FP:
- return fh1->handle.fp==fh2->handle.fp;
- break;
- }
- return 0;
-}
-
-
-ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
-{
- zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
-}
-
-
-ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
-{
- char *file_path=NULL;
-
- switch (file_handle->type) {
- case ZEND_HANDLE_FILENAME:
- file_handle->handle.fp = zend_fopen(file_handle->filename, &file_handle->opened_path);
- break;
- case ZEND_HANDLE_FD:
- file_handle->handle.fp = fdopen(file_handle->handle.fd, "r");
- break;
- case ZEND_HANDLE_FP:
- file_handle->handle.fp = file_handle->handle.fp;
- break;
- }
- if (!file_handle->handle.fp) {
- return FAILURE;
- }
-
- file_handle->type = ZEND_HANDLE_FP;
- if (file_handle->handle.fp != stdin) {
- zend_llist_add_element(&CG(open_files), file_handle);
- }
- /* Reset the scanner for scanning the new file */
- SCNG(yy_in) = file_handle->handle.fp;
- yy_switch_to_buffer(yy_create_buffer(SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
- BEGIN(INITIAL);
-
- if (file_handle->opened_path) {
- file_path = file_handle->opened_path;
- } else {
- file_path = file_handle->filename;
- }
-
- zend_set_compiled_filename(file_path TSRMLS_CC);
- CG(zend_lineno) = 1;
- CG(increment_lineno) = 0;
- return SUCCESS;
-}
-END_EXTERN_C()
-
-
-ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
-{
- zend_lex_state original_lex_state;
- zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
- zend_op_array *original_active_op_array = CG(active_op_array);
- zend_op_array *retval=NULL;
- int compiler_result;
- zend_bool compilation_successful=0;
- znode retval_znode;
- zend_bool original_in_compilation = CG(in_compilation);
-
- retval_znode.op_type = IS_CONST;
- retval_znode.u.constant.type = IS_LONG;
- retval_znode.u.constant.value.lval = 1;
- retval_znode.u.constant.is_ref = 0;
- retval_znode.u.constant.refcount = 1;
-
- save_lexical_state(&original_lex_state TSRMLS_CC);
-
- retval = op_array; /* success oriented */
-
- if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) {
- if (type==ZEND_REQUIRE) {
- zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename);
- zend_bailout();
- } else {
- zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename);
- }
- compilation_successful=0;
- } else {
- init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
- CG(in_compilation) = 1;
- CG(active_op_array) = op_array;
- compiler_result = zendparse(TSRMLS_C);
- zend_do_return(&retval_znode, 0 TSRMLS_CC);
- CG(in_compilation) = original_in_compilation;
- if (compiler_result==1) { /* parser error */
- CG(unclean_shutdown) = 1;
- retval = NULL;
- }
- compilation_successful=1;
- }
-
- if (retval) {
- CG(active_op_array) = original_active_op_array;
- if (compilation_successful) {
- pass_two(op_array TSRMLS_CC);
- } else {
- efree(op_array);
- retval = NULL;
- }
- }
- if (compilation_successful) {
- restore_lexical_state(&original_lex_state TSRMLS_CC);
- }
- return retval;
-}
-
-
-zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
-{
- zend_file_handle file_handle;
- zval tmp;
- zend_op_array *retval;
-
- if (filename->type != IS_STRING) {
- tmp = *filename;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- filename = &tmp;
- }
- file_handle.filename = filename->value.str.val;
- file_handle.free_filename = 0;
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.opened_path = NULL;
-
-
- retval = zend_compile_file(&file_handle, type TSRMLS_CC);
- if (retval && file_handle.opened_path) {
- int dummy = 1;
- zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
- }
- zend_destroy_file_handle(&file_handle TSRMLS_CC);
-
- if (filename==&tmp) {
- zval_dtor(&tmp);
- }
- return retval;
-}
-
-static inline int prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)
-{
- /* enforce two trailing NULLs for flex... */
- STR_REALLOC(str->value.str.val, str->value.str.len+2);
-
- str->value.str.val[str->value.str.len+1]=0;
-
- SCNG(yy_in)=NULL;
- yy_scan_buffer(str->value.str.val, str->value.str.len+2 TSRMLS_CC);
-
- zend_set_compiled_filename(filename TSRMLS_CC);
- CG(zend_lineno) = 1;
- CG(increment_lineno) = 0;
- return SUCCESS;
-}
-
-
-zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
-{
- zend_lex_state original_lex_state;
- zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
- zend_op_array *original_active_op_array = CG(active_op_array);
- zend_op_array *retval;
- zval tmp;
- int compiler_result;
- zend_bool original_in_compilation = CG(in_compilation);
-
- if (source_string->value.str.len==0) {
- efree(op_array);
- return NULL;
- }
-
- CG(in_compilation) = 1;
-
- tmp = *source_string;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- source_string = &tmp;
-
- save_lexical_state(&original_lex_state TSRMLS_CC);
- if (prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {
- efree(op_array);
- retval = NULL;
- } else {
- init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
- CG(active_op_array) = op_array;
- BEGIN(ST_IN_SCRIPTING);
- compiler_result = zendparse(TSRMLS_C);
-
- if (compiler_result==1) {
- CG(active_op_array) = original_active_op_array;
- CG(unclean_shutdown)=1;
- retval = NULL;
- } else {
- zend_do_return(NULL, 0 TSRMLS_CC);
- CG(active_op_array) = original_active_op_array;
- pass_two(op_array TSRMLS_CC);
- retval = op_array;
- }
- restore_lexical_state(&original_lex_state TSRMLS_CC);
- }
- zval_dtor(&tmp);
- CG(in_compilation) = original_in_compilation;
- return retval;
-}
-
-
-BEGIN_EXTERN_C()
-int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
-{
- zend_lex_state original_lex_state;
- zend_file_handle file_handle;
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
- save_lexical_state(&original_lex_state TSRMLS_CC);
- if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
- zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename);
- return FAILURE;
- }
- zend_highlight(syntax_highlighter_ini TSRMLS_CC);
- zend_destroy_file_handle(&file_handle TSRMLS_CC);
- restore_lexical_state(&original_lex_state TSRMLS_CC);
- return SUCCESS;
-}
-
-int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)
-{
- zend_lex_state original_lex_state;
- zval tmp = *str;
-
- str = &tmp;
- zval_copy_ctor(str);
- save_lexical_state(&original_lex_state TSRMLS_CC);
- if (prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
- return FAILURE;
- }
- zend_highlight(syntax_highlighter_ini TSRMLS_CC);
- restore_lexical_state(&original_lex_state TSRMLS_CC);
- zval_dtor(str);
- return SUCCESS;
-}
-END_EXTERN_C()
-
-%}
-
-LNUM [0-9]+
-DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)
-EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM})
-HNUM "0x"[0-9a-fA-F]+
-LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
-WHITESPACE [ \n\r\t]+
-TABS_AND_SPACES [ \t]*
-TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@]
-ENCAPSED_TOKENS [\[\]{}$]
-ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
-ANY_CHAR (.|[\n])
-NEWLINE ("\r"|"\n"|"\r\n")
-
-%option noyylineno
-%option noyywrap
-%%
-
-<ST_IN_SCRIPTING>"exit" {
- return T_EXIT;
-}
-
-<ST_IN_SCRIPTING>"die" {
- return T_EXIT;
-}
-
-<ST_IN_SCRIPTING>"old_function" {
- return T_OLD_FUNCTION;
-}
-
-<ST_IN_SCRIPTING>"function"|"cfunction" {
- return T_FUNCTION;
-}
-
-<ST_IN_SCRIPTING>"const" {
- return T_CONST;
-}
-
-<ST_IN_SCRIPTING>"return" {
- return T_RETURN;
-}
-
-<ST_IN_SCRIPTING>"try" {
- return T_TRY;
-}
-
-<ST_IN_SCRIPTING>"catch" {
- return T_CATCH;
-}
-
-<ST_IN_SCRIPTING>"throw" {
- return T_THROW;
-}
-
-<ST_IN_SCRIPTING>"if" {
- return T_IF;
-}
-
-<ST_IN_SCRIPTING>"elseif" {
- return T_ELSEIF;
-}
-
-<ST_IN_SCRIPTING>"endif" {
- return T_ENDIF;
-}
-
-<ST_IN_SCRIPTING>"else" {
- return T_ELSE;
-}
-
-<ST_IN_SCRIPTING>"while" {
- return T_WHILE;
-}
-
-<ST_IN_SCRIPTING>"endwhile" {
- return T_ENDWHILE;
-}
-
-<ST_IN_SCRIPTING>"do" {
- return T_DO;
-}
-
-<ST_IN_SCRIPTING>"for" {
- return T_FOR;
-}
-
-<ST_IN_SCRIPTING>"endfor" {
- return T_ENDFOR;
-}
-
-<ST_IN_SCRIPTING>"foreach" {
- return T_FOREACH;
-}
-
-<ST_IN_SCRIPTING>"endforeach" {
- return T_ENDFOREACH;
-}
-
-<ST_IN_SCRIPTING>"declare" {
- return T_DECLARE;
-}
-
-<ST_IN_SCRIPTING>"enddeclare" {
- return T_ENDDECLARE;
-}
-
-<ST_IN_SCRIPTING>"as" {
- return T_AS;
-}
-
-<ST_IN_SCRIPTING>"switch" {
- return T_SWITCH;
-}
-
-<ST_IN_SCRIPTING>"endswitch" {
- return T_ENDSWITCH;
-}
-
-<ST_IN_SCRIPTING>"case" {
- return T_CASE;
-}
-
-<ST_IN_SCRIPTING>"default" {
- return T_DEFAULT;
-}
-
-<ST_IN_SCRIPTING>"break" {
- return T_BREAK;
-}
-
-<ST_IN_SCRIPTING>"continue" {
- return T_CONTINUE;
-}
-
-<ST_IN_SCRIPTING>"echo" {
- return T_ECHO;
-}
-
-<ST_IN_SCRIPTING>"print" {
- return T_PRINT;
-}
-
-<ST_IN_SCRIPTING>"namespace" {
- return T_NAMESPACE;
-}
-
-<ST_IN_SCRIPTING>"class" {
- return T_CLASS;
-}
-
-<ST_IN_SCRIPTING>"extends" {
- return T_EXTENDS;
-}
-
-<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"->" {
- yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
- return T_OBJECT_OPERATOR;
-}
-
-<ST_LOOKING_FOR_PROPERTY>{LABEL} {
- yy_pop_state(TSRMLS_C);
- zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_STRING;
-}
-
-<ST_LOOKING_FOR_PROPERTY>{ANY_CHAR} {
- yyless(0);
- yy_pop_state(TSRMLS_C);
-}
-
-<ST_IN_SCRIPTING>"::" {
- return T_PAAMAYIM_NEKUDOTAYIM;
-}
-
-<ST_IN_SCRIPTING>"new" {
- return T_NEW;
-}
-
-<ST_IN_SCRIPTING>"delete" {
- return T_DELETE;
-}
-
-<ST_IN_SCRIPTING>"var" {
- return T_VAR;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" {
- return T_INT_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" {
- return T_DOUBLE_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"string"{TABS_AND_SPACES}")" {
- return T_STRING_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" {
- return T_ARRAY_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" {
- return T_OBJECT_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" {
- return T_BOOL_CAST;
-}
-
-<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("unset"){TABS_AND_SPACES}")" {
- return T_UNSET_CAST;
-}
-
-<ST_IN_SCRIPTING>"eval" {
- return T_EVAL;
-}
-
-<ST_IN_SCRIPTING>"include" {
- return T_INCLUDE;
-}
-
-<ST_IN_SCRIPTING>"include_once" {
- return T_INCLUDE_ONCE;
-}
-
-<ST_IN_SCRIPTING>"require" {
- return T_REQUIRE;
-}
-
-<ST_IN_SCRIPTING>"require_once" {
- return T_REQUIRE_ONCE;
-}
-
-<ST_IN_SCRIPTING>"use" {
- return T_USE;
-}
-
-<ST_IN_SCRIPTING>"global" {
- return T_GLOBAL;
-}
-
-<ST_IN_SCRIPTING>"isset" {
- return T_ISSET;
-}
-
-<ST_IN_SCRIPTING>"empty" {
- return T_EMPTY;
-}
-
-<ST_IN_SCRIPTING>"static" {
- return T_STATIC;
-}
-
-<ST_IN_SCRIPTING>"unset" {
- return T_UNSET;
-}
-
-<ST_IN_SCRIPTING>"=>" {
- return T_DOUBLE_ARROW;
-}
-
-<ST_IN_SCRIPTING>"list" {
- return T_LIST;
-}
-
-<ST_IN_SCRIPTING>"array" {
- return T_ARRAY;
-}
-
-<ST_IN_SCRIPTING>"++" {
- return T_INC;
-}
-
-<ST_IN_SCRIPTING>"--" {
- return T_DEC;
-}
-
-<ST_IN_SCRIPTING>"===" {
- return T_IS_IDENTICAL;
-}
-
-<ST_IN_SCRIPTING>"!==" {
- return T_IS_NOT_IDENTICAL;
-}
-
-<ST_IN_SCRIPTING>"==" {
- return T_IS_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"!="|"<>" {
- return T_IS_NOT_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"<=" {
- return T_IS_SMALLER_OR_EQUAL;
-}
-
-<ST_IN_SCRIPTING>">=" {
- return T_IS_GREATER_OR_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"+=" {
- return T_PLUS_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"-=" {
- return T_MINUS_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"*=" {
- return T_MUL_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"/=" {
- return T_DIV_EQUAL;
-}
-
-<ST_IN_SCRIPTING>".=" {
- return T_CONCAT_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"%=" {
- return T_MOD_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"<<=" {
- return T_SL_EQUAL;
-}
-
-<ST_IN_SCRIPTING>">>=" {
- return T_SR_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"&=" {
- return T_AND_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"|=" {
- return T_OR_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"^=" {
- return T_XOR_EQUAL;
-}
-
-<ST_IN_SCRIPTING>"||" {
- return T_BOOLEAN_OR;
-}
-
-<ST_IN_SCRIPTING>"&&" {
- return T_BOOLEAN_AND;
-}
-
-<ST_IN_SCRIPTING>"OR" {
- return T_LOGICAL_OR;
-}
-
-<ST_IN_SCRIPTING>"AND" {
- return T_LOGICAL_AND;
-}
-
-<ST_IN_SCRIPTING>"XOR" {
- return T_LOGICAL_XOR;
-}
-
-<ST_IN_SCRIPTING>"<<" {
- return T_SL;
-}
-
-<ST_IN_SCRIPTING>">>" {
- return T_SR;
-}
-
-<ST_IN_SCRIPTING>{TOKENS} {
- return yytext[0];
-}
-
-
-<ST_IN_SCRIPTING>"{" {
- yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
- return '{';
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"${" {
- yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
- return T_DOLLAR_OPEN_CURLY_BRACES;
-}
-
-
-<ST_IN_SCRIPTING>"}" {
- /* This is a temporary fix which is dependant on flex and it's implementation */
- if (yy_start_stack_ptr) {
- yy_pop_state(TSRMLS_C);
- }
- return '}';
-}
-
-
-<ST_LOOKING_FOR_VARNAME>{LABEL} {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- yy_pop_state(TSRMLS_C);
- yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
- return T_STRING_VARNAME;
-}
-
-
-<ST_LOOKING_FOR_VARNAME>{ANY_CHAR} {
- yyless(0);
- yy_pop_state(TSRMLS_C);
- yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
-}
-
-
-<ST_IN_SCRIPTING>{LNUM} {
- errno = 0;
- zendlval->value.lval = strtol(yytext, NULL, 0);
- if (errno == ERANGE) { /* overflow */
- zendlval->value.dval = strtod(yytext, NULL);
- zendlval->type = IS_DOUBLE;
- return T_DNUMBER;
- } else {
- zendlval->type = IS_LONG;
- return T_LNUMBER;
- }
-}
-
-<ST_IN_SCRIPTING>{HNUM} {
- errno = 0;
- zendlval->value.lval = strtoul(yytext, NULL, 16);
- if (errno == ERANGE) { /* overflow */
- /* not trying strtod - it returns trash on 0x-es */
- zendlval->value.lval = LONG_MAX; /* maximal long */
- zend_error(E_NOTICE,"Hex number is too big: %s", yytext);
- } else {
- if (zendlval->value.lval < 0) {
- /* maintain consistency with the old way */
- zendlval->value.dval = (unsigned long) zendlval->value.lval;
- zendlval->type = IS_DOUBLE;
- return T_DNUMBER;
- }
- zendlval->type = IS_LONG;
- }
- zendlval->type = IS_LONG;
- return T_LNUMBER;
-}
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */
- zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_NUM_STRING;
-}
-
-<ST_IN_SCRIPTING>{DNUM}|{EXPONENT_DNUM} {
- zendlval->value.dval = strtod(yytext, NULL);
- zendlval->type = IS_DOUBLE;
- return T_DNUMBER;
-}
-
-<ST_IN_SCRIPTING>"__LINE__" {
- zendlval->value.lval = CG(zend_lineno);
- zendlval->type = IS_LONG;
- return T_LINE;
-}
-
-<ST_IN_SCRIPTING>"__FILE__" {
- char *filename = zend_get_compiled_filename(TSRMLS_C);
-
- if (!filename) {
- filename = "";
- }
- zendlval->value.str.len = strlen(filename);
- zendlval->value.str.val = estrndup(filename, zendlval->value.str.len);
- zendlval->type = IS_STRING;
- return T_FILE;
-}
-
-
-<INITIAL>(([^<]|"<"[^?%s<]){1,400})|"<s"|"<" {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- HANDLE_NEWLINES(yytext, yyleng);
- return T_INLINE_HTML;
-}
-
-<INITIAL>"<?"|"<script"{WHITESPACE}+"language"{WHITESPACE}*"="{WHITESPACE}*("php"|"\"php\""|"\'php\'"){WHITESPACE}*">" {
- HANDLE_NEWLINES(yytext, yyleng);
- if (CG(short_tags) || yyleng>2) { /* yyleng>2 means it's not <? but <script> */
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- BEGIN(ST_IN_SCRIPTING);
- return T_OPEN_TAG;
- } else {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_INLINE_HTML;
- }
-}
-
-
-<INITIAL>"<%="|"<?=" {
- if ((yytext[1]=='%' && CG(asp_tags)) || (yytext[1]=='?' && CG(short_tags))) {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- BEGIN(ST_IN_SCRIPTING);
- return T_OPEN_TAG_WITH_ECHO;
- } else {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_INLINE_HTML;
- }
-}
-
-
-<INITIAL>"<%" {
- if (CG(asp_tags)) {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- BEGIN(ST_IN_SCRIPTING);
- return T_OPEN_TAG;
- } else {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_INLINE_HTML;
- }
-}
-
-
-<INITIAL>"<?php"([ \t]|{NEWLINE}) {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- HANDLE_NEWLINE(yytext[yyleng-1]);
- BEGIN(ST_IN_SCRIPTING);
- return T_OPEN_TAG;
-}
-
-
-<INITIAL>"<?php_track_vars?>"{NEWLINE}? {
- zend_error(E_WARNING, "&lt;?php_track_vars?&gt; is no longer supported - please use the track_vars INI directive instead");
- HANDLE_NEWLINE(yytext[yyleng-1]);
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_INLINE_HTML;
-}
-
-<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL} {
- zendlval->value.str.val = (char *)estrndup(yytext+1, yyleng-1);
- zendlval->value.str.len = yyleng-1;
- zendlval->type = IS_STRING;
- return T_VARIABLE;
-}
-
-
-<ST_IN_SCRIPTING>{LABEL} {
- zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_STRING;
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LABEL} {
- zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_STRING;
-}
-
-
-<ST_IN_SCRIPTING>{WHITESPACE} {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- HANDLE_NEWLINES(yytext, yyleng);
- return T_WHITESPACE;
-}
-
-
-<ST_IN_SCRIPTING>"#"|"//" {
- BEGIN(ST_ONE_LINE_COMMENT);
- yymore();
-}
-
-<ST_ONE_LINE_COMMENT>"?"|"%"|">" {
- yymore();
-}
-
-<ST_ONE_LINE_COMMENT>[^\n\r?%>]+ {
- yymore();
-}
-
-<ST_ONE_LINE_COMMENT>{NEWLINE} {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- BEGIN(ST_IN_SCRIPTING);
- CG(zend_lineno)++;
- return T_COMMENT;
-}
-
-<ST_ONE_LINE_COMMENT>"?>"|"%>" {
- if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- yyless(yyleng-2);
- BEGIN(ST_IN_SCRIPTING);
- return T_COMMENT;
- } else {
- yymore();
- }
-}
-
-<ST_IN_SCRIPTING>"/*" {
- CG(comment_start_line) = CG(zend_lineno);
- BEGIN(ST_COMMENT);
- yymore();
-}
-
-
-<ST_COMMENT>[^*]+ {
- yymore();
-}
-
-<ST_COMMENT>"*/" {
- HANDLE_NEWLINES(yytext, yyleng);
- BEGIN(ST_IN_SCRIPTING);
- return T_COMMENT;
-}
-
-<ST_COMMENT>"*" {
- yymore();
-}
-
-<ST_IN_SCRIPTING>("?>"|"</script"{WHITESPACE}*">"){NEWLINE}? {
- zendlval->value.str.val = yytext; /* no copying - intentional */
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- BEGIN(INITIAL);
- return T_CLOSE_TAG; /* implicit ';' at php-end tag */
-}
-
-
-<ST_IN_SCRIPTING>"%>"{NEWLINE}? {
- if (CG(asp_tags)) {
- BEGIN(INITIAL);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- zendlval->value.str.val = yytext; /* no copying - intentional */
- return T_CLOSE_TAG; /* implicit ';' at php-end tag */
- } else {
- yyless(1);
- return yytext[0];
- }
-}
-
-
-<ST_IN_SCRIPTING>(["]([^$"\\]|("\\".))*["]) {
- register char *s, *t;
- char *end;
-
- zendlval->value.str.val = estrndup(yytext+1, yyleng-2);
- zendlval->value.str.len = yyleng-2;
- zendlval->type = IS_STRING;
- HANDLE_NEWLINES(yytext, yyleng);
-
- /* convert escape sequences */
- s = t = zendlval->value.str.val;
- end = s+zendlval->value.str.len;
- while (s<end) {
- if (*s=='\\') {
- s++;
- if (s>=end) {
- continue;
- }
- switch(*s) {
- case 'n':
- *t++ = '\n';
- zendlval->value.str.len--;
- break;
- case 'r':
- *t++ = '\r';
- zendlval->value.str.len--;
- break;
- case 't':
- *t++ = '\t';
- zendlval->value.str.len--;
- break;
- case '\\':
- case '$':
- case '"':
- *t++ = *s;
- zendlval->value.str.len--;
- break;
- default:
- /* check for an octal */
- if (ZEND_IS_OCT(*s)) {
- char octal_buf[4] = { 0, 0, 0, 0 };
-
- octal_buf[0] = *s;
- zendlval->value.str.len--;
- if ((s+1)<end && ZEND_IS_OCT(*(s+1))) {
- octal_buf[1] = *(++s);
- zendlval->value.str.len--;
- if ((s+1)<end && ZEND_IS_OCT(*(s+1))) {
- octal_buf[2] = *(++s);
- zendlval->value.str.len--;
- }
- }
- *t++ = (char) strtol(octal_buf, NULL, 8);
- } else if (*s=='x' && (s+1)<end && ZEND_IS_HEX(*(s+1))) {
- char hex_buf[3] = { 0, 0, 0};
-
- zendlval->value.str.len--; /* for the 'x' */
-
- hex_buf[0] = *(++s);
- zendlval->value.str.len--;
- if ((s+1)<end && ZEND_IS_HEX(*(s+1))) {
- hex_buf[1] = *(++s);
- zendlval->value.str.len--;
- }
- *t++ = (char) strtol(hex_buf, NULL, 16);
- } else {
- *t++ = '\\';
- *t++ = *s;
- }
- break;
- }
- s++;
- } else {
- *t++ = *s++;
- }
- }
- *t = 0;
-
- return T_CONSTANT_ENCAPSED_STRING;
-}
-
-
-<ST_IN_SCRIPTING>([']([^'\\]|("\\".))*[']) {
- register char *s, *t;
- char *end;
-
- zendlval->value.str.val = estrndup(yytext+1, yyleng-2);
- zendlval->value.str.len = yyleng-2;
- zendlval->type = IS_STRING;
- HANDLE_NEWLINES(yytext, yyleng);
-
- /* convert escape sequences */
- s = t = zendlval->value.str.val;
- end = s+zendlval->value.str.len;
- while (s<end) {
- if (*s=='\\') {
- s++;
- if (s>=end) {
- continue;
- }
- switch(*s) {
- case '\\':
- case '\'':
- *t++ = *s;
- zendlval->value.str.len--;
- break;
- default:
- *t++ = '\\';
- *t++ = *s;
- break;
- }
- s++;
- } else {
- *t++ = *s++;
- }
- }
- *t = 0;
-
- return T_CONSTANT_ENCAPSED_STRING;
-}
-
-
-<ST_IN_SCRIPTING>["] {
- BEGIN(ST_DOUBLE_QUOTES);
- return '\"';
-}
-
-
-<ST_IN_SCRIPTING>"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} {
- char *s;
- CG(zend_lineno)++;
- CG(heredoc_len) = yyleng-3-1-(yytext[yyleng-2]=='\r'?1:0);
- s = yytext+3;
- while ((*s == ' ') || (*s == '\t')) {
- s++;
- CG(heredoc_len)--;
- }
- CG(heredoc) = estrndup(s, CG(heredoc_len));
- BEGIN(ST_HEREDOC);
- return T_START_HEREDOC;
-}
-
-
-<ST_IN_SCRIPTING>[`] {
- BEGIN(ST_BACKQUOTE);
- return '`';
-}
-
-
-<ST_IN_SCRIPTING>['] {
- BEGIN(ST_SINGLE_QUOTE);
- return '\'';
-}
-
-
-<ST_HEREDOC>^{LABEL}(";")?{NEWLINE} {
- int label_len;
- unsigned char unput_semicolon;
-
- CG(zend_lineno)++;
- if (yytext[yyleng-2]=='\r') {
- label_len = yyleng-2;
- } else {
- label_len = yyleng-1;
- }
-
- if (yytext[label_len-1]==';') {
- label_len--;
- unput_semicolon=1;
- } else{
- unput_semicolon=0;
- }
-
- if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) {
- zendlval->value.str.val = estrndup(yytext, yyleng); /* unput destroys yytext */
- zendlval->value.str.len = yyleng;
- if (unput_semicolon) {
- unput(';');
- }
- efree(CG(heredoc));
- CG(heredoc)=NULL;
- CG(heredoc_len)=0;
- BEGIN(ST_IN_SCRIPTING);
- return T_END_HEREDOC;
- } else {
- zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_STRING;
- }
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{ESCAPED_AND_WHITESPACE} {
- HANDLE_NEWLINES(yytext, yyleng);
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_ENCAPSED_AND_WHITESPACE;
-}
-
-<ST_SINGLE_QUOTE>([^'\\]|\\[^'\\])+ {
- HANDLE_NEWLINES(yytext, yyleng);
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_ENCAPSED_AND_WHITESPACE;
-}
-
-
-<ST_DOUBLE_QUOTES>[`]+ {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_ENCAPSED_AND_WHITESPACE;
-}
-
-
-<ST_BACKQUOTE>["]+ {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_ENCAPSED_AND_WHITESPACE;
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"$"[^a-zA-Z_\x7f-\xff{] {
- zendlval->value.lval = (long) yytext[0];
- if (yyleng == 2) {
- yyless(1);
- }
- return T_CHARACTER;
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{ENCAPSED_TOKENS} {
- zendlval->value.lval = (long) yytext[0];
- return yytext[0];
-}
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"{$" {
- zendlval->value.lval = (long) yytext[0];
- yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
- yyless(1);
- return T_CURLY_OPEN;
-}
-
-
-<ST_SINGLE_QUOTE>"\\'" {
- zendlval->value.lval = (long) '\'';
- return T_CHARACTER;
-}
-
-<ST_SINGLE_QUOTE>"\\\\" {
- zendlval->value.lval = (long)'\\';
- return T_CHARACTER;
-}
-
-<ST_DOUBLE_QUOTES>"\\\"" {
- zendlval->value.lval = (long) '"';
- return T_CHARACTER;
-}
-
-<ST_BACKQUOTE>"\\`" {
- zendlval->value.lval = (long) '`';
- return T_CHARACTER;
-}
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\"[0-7]{1,3} {
- zendlval->value.lval = strtol(yytext+1, NULL, 8);
- return T_CHARACTER;
-}
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\x"[0-9A-Fa-f]{1,2} {
- zendlval->value.lval = strtol (yytext+2, NULL, 16);
- return T_CHARACTER;
-}
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\"{ANY_CHAR} {
- switch (yytext[1]) {
- case 'n':
- zendlval->value.lval = (long) '\n';
- break;
- case 't':
- zendlval->value.lval = (long) '\t';
- break;
- case 'r':
- zendlval->value.lval = (long) '\r';
- break;
- case '\\':
- zendlval->value.lval = (long) '\\';
- break;
- case '$':
- zendlval->value.lval = (long) yytext[1];
- break;
- case '{':
- zendlval->value.lval = (long) yytext[1];
- break;
- default:
- zendlval->value.str.val = estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_BAD_CHARACTER;
- break;
- }
- return T_CHARACTER;
-}
-
-
-<ST_HEREDOC>["'`]+ {
- zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
- zendlval->value.str.len = yyleng;
- zendlval->type = IS_STRING;
- return T_ENCAPSED_AND_WHITESPACE;
-}
-
-
-<ST_DOUBLE_QUOTES>["] {
- BEGIN(ST_IN_SCRIPTING);
- return '\"';
-}
-
-
-<ST_BACKQUOTE>[`] {
- BEGIN(ST_IN_SCRIPTING);
- return '`';
-}
-
-
-<ST_SINGLE_QUOTE>['] {
- BEGIN(ST_IN_SCRIPTING);
- return '\'';
-}
-
-
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,INITIAL,ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY><<EOF>> {
- return 0;
-}
-
-<ST_COMMENT><<EOF>> {
- zend_error(E_COMPILE_WARNING,"Unterminated comment starting line %d", CG(comment_start_line));
- return 0;
-}
-
-
-
-<ST_IN_SCRIPTING,INITIAL,ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_SINGLE_QUOTE,ST_HEREDOC>{ANY_CHAR} {
- zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
-}
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
deleted file mode 100644
index 5ca3c930d8..0000000000
--- a/Zend/zend_list.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* resource lists */
-
-#include "zend.h"
-#include "zend_list.h"
-#include "zend_API.h"
-#include "zend_globals.h"
-
-ZEND_API int le_index_ptr;
-
-/* true global */
-static HashTable list_destructors;
-
-
-ZEND_API int zend_list_insert(void *ptr, int type)
-{
- int index;
- zend_rsrc_list_entry le;
- TSRMLS_FETCH();
-
- le.ptr=ptr;
- le.type=type;
- le.refcount=1;
-
- index = zend_hash_next_free_element(&EG(regular_list));
- zend_hash_index_update(&EG(regular_list), index, (void *) &le, sizeof(zend_rsrc_list_entry), NULL);
- return index;
-}
-
-ZEND_API int _zend_list_delete(int id TSRMLS_DC)
-{
- zend_rsrc_list_entry *le;
-
- if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) {
-/* printf("del(%d): %d->%d\n", id, le->refcount, le->refcount-1); */
- if (--le->refcount<=0) {
- return zend_hash_index_del(&EG(regular_list), id);
- } else {
- return SUCCESS;
- }
- } else {
- return FAILURE;
- }
-}
-
-
-ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC)
-{
- zend_rsrc_list_entry *le;
-
- if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) {
- *type = le->type;
- return le->ptr;
- } else {
- *type = -1;
- return NULL;
- }
-}
-
-
-ZEND_API int _zend_list_addref(int id TSRMLS_DC)
-{
- zend_rsrc_list_entry *le;
-
- if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) {
-/* printf("add(%d): %d->%d\n", id, le->refcount, le->refcount+1); */
- le->refcount++;
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-
-ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type)
-{
- int rsrc_id;
-
- rsrc_id = zend_list_insert(rsrc_pointer, rsrc_type);
-
- if (rsrc_result) {
- rsrc_result->value.lval = rsrc_id;
- rsrc_result->type = IS_RESOURCE;
- }
-
- return rsrc_id;
-}
-
-
-ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...)
-{
- int id;
- int actual_resource_type;
- void *resource;
- va_list resource_types;
- int i;
-
- if (default_id==-1) { /* use id */
- if (!passed_id) {
- if (resource_type_name) {
- zend_error(E_WARNING, "No %s resource supplied", resource_type_name);
- }
- return NULL;
- } else if ((*passed_id)->type != IS_RESOURCE) {
- if (resource_type_name) {
- zend_error(E_WARNING, "Supplied argument is not a valid %s resource", resource_type_name);
- }
- return NULL;
- }
- id = (*passed_id)->value.lval;
- } else {
- id = default_id;
- }
-
- resource = zend_list_find(id, &actual_resource_type);
- if (!resource) {
- if (resource_type_name) {
- zend_error(E_WARNING, "%d is not a valid %s resource", id, resource_type_name);
- }
- return NULL;
- }
-
- va_start(resource_types, num_resource_types);
- for (i=0; i<num_resource_types; i++) {
- if (actual_resource_type == va_arg(resource_types, int)) {
- va_end(resource_types);
- if (found_resource_type) {
- *found_resource_type = actual_resource_type;
- }
- return resource;
- }
- }
- va_end(resource_types);
-
- if (resource_type_name) {
- zend_error(E_WARNING, "Supplied resource is not a valid %s resource", resource_type_name);
- }
-
- return NULL;
-}
-
-
-void list_entry_destructor(void *ptr)
-{
- zend_rsrc_list_entry *le = (zend_rsrc_list_entry *) ptr;
- zend_rsrc_list_dtors_entry *ld;
- TSRMLS_FETCH();
-
- if (zend_hash_index_find(&list_destructors, le->type, (void **) &ld)==SUCCESS) {
- switch (ld->type) {
- case ZEND_RESOURCE_LIST_TYPE_STD:
- if (ld->list_dtor) {
- (ld->list_dtor)(le->ptr);
- }
- break;
- case ZEND_RESOURCE_LIST_TYPE_EX:
- if (ld->list_dtor_ex) {
- ld->list_dtor_ex(le TSRMLS_CC);
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- } else {
- zend_error(E_WARNING,"Unknown list entry type in request shutdown (%d)", le->type);
- }
-}
-
-
-void plist_entry_destructor(void *ptr)
-{
- zend_rsrc_list_entry *le = (zend_rsrc_list_entry *) ptr;
- zend_rsrc_list_dtors_entry *ld;
- TSRMLS_FETCH();
-
- if (zend_hash_index_find(&list_destructors, le->type, (void **) &ld)==SUCCESS) {
- switch (ld->type) {
- case ZEND_RESOURCE_LIST_TYPE_STD:
- if (ld->plist_dtor) {
- (ld->plist_dtor)(le->ptr);
- }
- break;
- case ZEND_RESOURCE_LIST_TYPE_EX:
- if (ld->plist_dtor_ex) {
- ld->plist_dtor_ex(le TSRMLS_CC);
- }
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
- }
- } else {
- zend_error(E_WARNING,"Unknown persistent list entry type in module shutdown (%d)", le->type);
- }
-}
-
-
-int zend_init_rsrc_list(TSRMLS_D)
-{
- if (zend_hash_init(&EG(regular_list), 0, NULL, list_entry_destructor, 0)==SUCCESS) {
- EG(regular_list).nNextFreeElement=1; /* we don't want resource id 0 */
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-
-int zend_init_rsrc_plist(TSRMLS_D)
-{
- return zend_hash_init_ex(&EG(persistent_list), 0, NULL, plist_entry_destructor, 1, 0);
-}
-
-
-void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC)
-{
- Bucket *p, *q;
-
- while (1) {
- p = ht->pListTail;
- if (!p) {
- break;
- }
- q = p->pListLast;
- if (q) {
- q->pListNext = NULL;
- }
- ht->pListTail = q;
-
- if (ht->pDestructor) {
- zend_try {
- ht->pDestructor(p->pData);
- } zend_end_try();
- }
- if (!p->pDataPtr && p->pData) {
- pefree(p->pData, ht->persistent);
- }
- pefree(p, ht->persistent);
- }
- pefree(ht->arBuckets, ht->persistent);
-}
-
-
-static int clean_module_resource(zend_rsrc_list_entry *le, int *resource_id TSRMLS_DC)
-{
- if (le->type == *resource_id) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-static int zend_clean_module_rsrc_dtors_cb(zend_rsrc_list_dtors_entry *ld, int *module_number TSRMLS_DC)
-{
- if (ld->module_number == *module_number) {
- zend_hash_apply_with_argument(&EG(regular_list), (apply_func_arg_t) clean_module_resource, (void *) &(ld->resource_id) TSRMLS_CC);
- zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) clean_module_resource, (void *) &(ld->resource_id) TSRMLS_CC);
- return 1;
- } else {
- return 0;
- }
-}
-
-
-void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC)
-{
- zend_hash_apply_with_argument(&list_destructors, (apply_func_arg_t) zend_clean_module_rsrc_dtors_cb, (void *) &module_number TSRMLS_CC);
-}
-
-
-ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number)
-{
- zend_rsrc_list_dtors_entry lde;
-
-#if 0
- printf("Registering destructors %d for module %d\n", list_destructors.nNextFreeElement, module_number);
-#endif
-
- lde.list_dtor=(void (*)(void *)) ld;
- lde.plist_dtor=(void (*)(void *)) pld;
- lde.list_dtor_ex = lde.plist_dtor_ex = NULL;
- lde.module_number = module_number;
- lde.resource_id = list_destructors.nNextFreeElement;
- lde.type = ZEND_RESOURCE_LIST_TYPE_STD;
- lde.type_name = NULL;
-
- if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) {
- return FAILURE;
- }
- return list_destructors.nNextFreeElement-1;
-}
-
-
-ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number)
-{
- zend_rsrc_list_dtors_entry lde;
-
-#if 0
- printf("Registering destructors %d for module %d\n", list_destructors.nNextFreeElement, module_number);
-#endif
-
- lde.list_dtor = NULL;
- lde.plist_dtor = NULL;
- lde.list_dtor_ex = ld;
- lde.plist_dtor_ex = pld;
- lde.module_number = module_number;
- lde.resource_id = list_destructors.nNextFreeElement;
- lde.type = ZEND_RESOURCE_LIST_TYPE_EX;
- lde.type_name = type_name;
-
- if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) {
- return FAILURE;
- }
- return list_destructors.nNextFreeElement-1;
-}
-
-ZEND_API int zend_fetch_list_dtor_id(char *type_name)
-{
- zend_rsrc_list_dtors_entry *lde;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(&list_destructors, &pos);
- while(zend_hash_get_current_data_ex(&list_destructors, (void **)&lde, &pos) == SUCCESS) {
- if(strcmp(type_name, lde->type_name) == 0) {
-#if 0
- printf("Found resource id %d for resource type %s\n", (*lde).resource_id, type_name);
-#endif
- return lde->resource_id;
- }
- zend_hash_move_forward_ex(&list_destructors, &pos);
- }
-
- return 0;
-}
-
-int zend_init_rsrc_list_dtors(void)
-{
- int retval;
-
- retval = zend_hash_init(&list_destructors, 50, NULL, NULL, 1);
- list_destructors.nNextFreeElement=1; /* we don't want resource type 0 */
-
- return retval;
-}
-
-
-void zend_destroy_rsrc_list_dtors(void)
-{
- zend_hash_destroy(&list_destructors);
-}
-
-
-char *zend_rsrc_list_get_rsrc_type(int resource TSRMLS_DC)
-{
- zend_rsrc_list_dtors_entry *lde;
- int rsrc_type;
-
- if (!zend_list_find(resource, &rsrc_type))
- return NULL;
-
- if (zend_hash_index_find(&list_destructors, rsrc_type, (void **) &lde)==SUCCESS) {
- return lde->type_name;
- } else {
- return NULL;
- }
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_list.h b/Zend/zend_list.h
deleted file mode 100644
index 43268aa918..0000000000
--- a/Zend/zend_list.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_LIST_H
-#define ZEND_LIST_H
-
-#include "zend_hash.h"
-#include "zend_globals.h"
-
-
-#define ZEND_RESOURCE_LIST_TYPE_STD 1
-#define ZEND_RESOURCE_LIST_TYPE_EX 2
-
-typedef struct _zend_rsrc_list_entry {
- void *ptr;
- int type;
- int refcount;
-} zend_rsrc_list_entry;
-
-typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#define ZEND_RSRC_DTOR_FUNC(name) void name(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-
-typedef struct _zend_rsrc_list_dtors_entry {
- /* old style destructors */
- void (*list_dtor)(void *);
- void (*plist_dtor)(void *);
-
- /* new style destructors */
- rsrc_dtor_func_t list_dtor_ex;
- rsrc_dtor_func_t plist_dtor_ex;
-
- char *type_name;
-
- int module_number;
- int resource_id;
- unsigned char type;
-} zend_rsrc_list_dtors_entry;
-
-
-#define register_list_destructors(ld, pld) zend_register_list_destructors((void (*)(void *))ld, (void (*)(void *))pld, module_number);
-ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number);
-ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number);
-
-void list_entry_destructor(void *ptr);
-void plist_entry_destructor(void *ptr);
-
-void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC);
-int zend_init_rsrc_list(TSRMLS_D);
-int zend_init_rsrc_plist(TSRMLS_D);
-void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC);
-int zend_init_rsrc_list_dtors(void);
-void zend_destroy_rsrc_list_dtors(void);
-
-ZEND_API int zend_list_insert(void *ptr, int type);
-ZEND_API int _zend_list_addref(int id TSRMLS_DC);
-ZEND_API int _zend_list_delete(int id TSRMLS_DC);
-ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC);
-
-#define zend_list_addref(id) _zend_list_addref(id TSRMLS_CC)
-#define zend_list_delete(id) _zend_list_delete(id TSRMLS_CC)
-#define zend_list_find(id, type) _zend_list_find(id, type TSRMLS_CC)
-
-ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type);
-ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...);
-
-ZEND_API char *zend_rsrc_list_get_rsrc_type(int resource TSRMLS_DC);
-ZEND_API int zend_fetch_list_dtor_id(char *type_name);
-
-extern ZEND_API int le_index_ptr; /* list entry type for index pointers */
-
-#define ZEND_VERIFY_RESOURCE(rsrc) \
- if (!rsrc) { \
- RETURN_NULL(); \
- }
-
-#define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \
- rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 1, resource_type); \
- ZEND_VERIFY_RESOURCE(rsrc);
-
-#define ZEND_FETCH_RESOURCE2(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type1, resource_type2) \
- rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 2, resource_type1, resource_type2); \
- ZEND_VERIFY_RESOURCE(rsrc);
-
-#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) \
- zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type);
-
-#define ZEND_GET_RESOURCE_TYPE_ID(le_id, le_type_name) \
- if (le_id == 0) { \
- le_id = zend_fetch_list_dtor_id(le_type_name); \
- }
-
-#endif
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c
deleted file mode 100644
index ad7367658b..0000000000
--- a/Zend/zend_llist.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_llist.h"
-#include "zend_qsort.h"
-
-ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent)
-{
- l->head = NULL;
- l->tail = NULL;
- l->count = 0;
- l->size = size;
- l->dtor = dtor;
- l->persistent = persistent;
-}
-
-
-ZEND_API void zend_llist_add_element(zend_llist *l, void *element)
-{
- zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size-1, l->persistent);
-
- tmp->prev = l->tail;
- tmp->next = NULL;
- if (l->tail) {
- l->tail->next = tmp;
- } else {
- l->head = tmp;
- }
- l->tail = tmp;
- memcpy(tmp->data, element, l->size);
-
- ++l->count;
-}
-
-
-ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element)
-{
- zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size-1, l->persistent);
-
- tmp->next = l->head;
- tmp->prev = NULL;
- if (l->head) {
- l->head->prev = tmp;
- } else {
- l->tail = tmp;
- }
- l->head = tmp;
- memcpy(tmp->data, element, l->size);
-
- ++l->count;
-}
-
-
-#define DEL_LLIST_ELEMENT(current, l) \
- if ((current)->prev) {\
- (current)->prev->next = (current)->next;\
- } else {\
- (l)->head = (current)->next;\
- }\
- if ((current)->next) {\
- (current)->next->prev = (current)->prev;\
- } else {\
- (l)->tail = (current)->prev;\
- }\
- if ((l)->dtor) {\
- (l)->dtor((current)->data);\
- pefree((current), (l)->persistent);\
- }\
- --l->count;
-
-
-ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2))
-{
- zend_llist_element *current=l->head;
- zend_llist_element *next;
-
- while (current) {
- next = current->next;
- if (compare(current->data, element)) {
- DEL_LLIST_ELEMENT(current, l);
- break;
- }
- current = next;
- }
-}
-
-
-ZEND_API void zend_llist_destroy(zend_llist *l)
-{
- zend_llist_element *current=l->head, *next;
-
- while (current) {
- next = current->next;
- if (l->dtor) {
- l->dtor(current->data);
- }
- pefree(current, l->persistent);
- current = next;
- }
-
- l->count = 0;
-}
-
-
-ZEND_API void zend_llist_clean(zend_llist *l)
-{
- zend_llist_destroy(l);
- l->head = l->tail = NULL;
-}
-
-
-ZEND_API void *zend_llist_remove_tail(zend_llist *l)
-{
- zend_llist_element *old_tail;
- void *data;
-
- if ((old_tail = l->tail)) {
- if (l->tail->prev) {
- l->tail->prev->next = NULL;
- }
-
- data = old_tail->data;
-
- l->tail = l->tail->prev;
- pefree(old_tail, l->persistent);
-
- --l->count;
-
- return data;
- }
-
- return NULL;
-}
-
-
-ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src)
-{
- zend_llist_element *ptr;
-
- zend_llist_init(dst, src->size, src->dtor, src->persistent);
- ptr = src->head;
- while (ptr) {
- zend_llist_add_element(dst, ptr->data);
- ptr = ptr->next;
- }
-}
-
-
-ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data))
-{
- zend_llist_element *element, *next;
-
- element=l->head;
- while (element) {
- next = element->next;
- if (func(element->data)) {
- DEL_LLIST_ELEMENT(element, l);
- }
- element = next;
- }
-}
-
-
-ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC)
-{
- zend_llist_element *element;
-
- for (element=l->head; element; element=element->next) {
- func(element->data TSRMLS_CC);
- }
-}
-
-ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC)
-{
- size_t i;
-
- zend_llist_element **elements;
- zend_llist_element *element, **ptr;
-
- if (l->count <= 0) {
- return;
- }
-
- elements = (zend_llist_element **) emalloc(l->count * sizeof(zend_llist_element *));
-
- ptr = &elements[0];
-
- for (element=l->head; element; element=element->next) {
- *ptr++ = element;
- }
-
- zend_qsort(elements, l->count, sizeof(zend_llist_element *), (compare_func_t) comp_func TSRMLS_CC);
-
- l->head = elements[0];
- elements[0]->prev = NULL;
-
- for (i = 1; i < l->count; i++) {
- elements[i]->prev = elements[i-1];
- elements[i-1]->next = elements[i];
- }
- elements[i-1]->next = NULL;
- l->tail = elements[i-1];
- efree(elements);
-}
-
-
-ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC)
-{
- zend_llist_element *element;
-
- for (element=l->head; element; element=element->next) {
- func(element->data, arg TSRMLS_CC);
- }
-}
-
-
-ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...)
-{
- zend_llist_element *element;
- va_list args;
-
- va_start(args, num_args);
- for (element=l->head; element; element=element->next) {
- func(element->data, num_args, args TSRMLS_CC);
- }
- va_end(args);
-}
-
-
-ZEND_API int zend_llist_count(zend_llist *l)
-{
- return l->count;
-}
-
-
-ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos)
-{
- zend_llist_position *current = pos ? pos : &l->traverse_ptr;
-
- *current = l->head;
- if (*current) {
- return (*current)->data;
- } else {
- return NULL;
- }
-}
-
-
-ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos)
-{
- zend_llist_position *current = pos ? pos : &l->traverse_ptr;
-
- *current = l->tail;
- if (*current) {
- return (*current)->data;
- } else {
- return NULL;
- }
-}
-
-
-ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos)
-{
- zend_llist_position *current = pos ? pos : &l->traverse_ptr;
-
- if (*current) {
- *current = (*current)->next;
- if (*current) {
- return (*current)->data;
- }
- }
- return NULL;
-}
-
-
-ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos)
-{
- zend_llist_position *current = pos ? pos : &l->traverse_ptr;
-
- if (*current) {
- *current = (*current)->prev;
- if (*current) {
- return (*current)->data;
- }
- }
- return NULL;
-}
diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h
deleted file mode 100644
index 2f2c3263b3..0000000000
--- a/Zend/zend_llist.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_LLIST_H
-#define ZEND_LLIST_H
-
-#include <stdlib.h>
-
-typedef struct _zend_llist_element {
- struct _zend_llist_element *next;
- struct _zend_llist_element *prev;
- char data[1]; /* Needs to always be last in the struct */
-} zend_llist_element;
-
-typedef void (*llist_dtor_func_t)(void *);
-typedef int (*llist_compare_func_t)(const zend_llist_element *, const zend_llist_element * TSRMLS_DC);
-typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args TSRMLS_DC);
-typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg TSRMLS_DC);
-typedef void (*llist_apply_func_t)(void * TSRMLS_DC);
-
-typedef struct _zend_llist {
- zend_llist_element *head;
- zend_llist_element *tail;
- size_t count;
- size_t size;
- llist_dtor_func_t dtor;
- unsigned char persistent;
- zend_llist_element *traverse_ptr;
-} zend_llist;
-
-typedef zend_llist_element* zend_llist_position;
-
-BEGIN_EXTERN_C()
-ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent);
-ZEND_API void zend_llist_add_element(zend_llist *l, void *element);
-ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
-ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
-ZEND_API void zend_llist_destroy(zend_llist *l);
-ZEND_API void zend_llist_clean(zend_llist *l);
-ZEND_API void *zend_llist_remove_tail(zend_llist *l);
-ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
-ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC);
-ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data));
-ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC);
-ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...);
-ZEND_API int zend_llist_count(zend_llist *l);
-ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC);
-
-/* traversal */
-ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos);
-ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos);
-ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos);
-ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);
-
-#define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL)
-#define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL)
-#define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL)
-#define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL)
-
-END_EXTERN_C()
-
-#endif /* ZEND_LLIST_H */
diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h
deleted file mode 100644
index a1b26ead12..0000000000
--- a/Zend/zend_modules.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef MODULES_H
-#define MODULES_H
-
-#include "zend.h"
-
-#define INIT_FUNC_ARGS int type, int module_number TSRMLS_DC
-#define INIT_FUNC_ARGS_PASSTHRU type, module_number TSRMLS_CC
-#define SHUTDOWN_FUNC_ARGS int type, int module_number TSRMLS_DC
-#define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number TSRMLS_CC
-#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module TSRMLS_DC
-#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module TSRMLS_CC
-#define GINIT_FUNC_ARGS void
-#define GINIT_FUNC_ARGS_PASSTHRU
-
-ZEND_API extern unsigned char first_arg_force_ref[];
-ZEND_API extern unsigned char second_arg_force_ref[];
-ZEND_API extern unsigned char third_arg_force_ref[];
-
-#define ZEND_MODULE_API_NO 20010927
-#ifdef ZTS
-#define USING_ZTS 1
-#else
-#define USING_ZTS 0
-#endif
-
-#define STANDARD_MODULE_HEADER sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS
-
-#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0
-
-#define STANDARD_MODULE_PROPERTIES \
- NULL, NULL, STANDARD_MODULE_PROPERTIES_EX
-
-#define NO_VERSION_YET NULL
-
-#define MODULE_PERSISTENT 1
-#define MODULE_TEMPORARY 2
-
-typedef struct _zend_module_entry zend_module_entry;
-
-struct _zend_module_entry {
- unsigned short size;
- unsigned int zend_api;
- unsigned char zend_debug;
- unsigned char zts;
- char *name;
- zend_function_entry *functions;
- int (*module_startup_func)(INIT_FUNC_ARGS);
- int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- int (*request_startup_func)(INIT_FUNC_ARGS);
- int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
- char *version;
- int (*global_startup_func)(void);
- int (*global_shutdown_func)(void);
- int globals_id;
- int module_started;
- unsigned char type;
- void *handle;
- int module_number;
-};
-
-
-extern ZEND_API HashTable module_registry;
-
-void module_destructor(zend_module_entry *module);
-int module_registry_cleanup(zend_module_entry *module TSRMLS_DC);
-int module_registry_request_startup(zend_module_entry *module TSRMLS_DC);
-
-#define ZEND_MODULE_DTOR (void (*)(void *)) module_destructor
-#endif
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
deleted file mode 100644
index 581e150bf9..0000000000
--- a/Zend/zend_objects.c
+++ /dev/null
@@ -1,149 +0,0 @@
-#include "zend.h"
-#include "zend_globals.h"
-#include "zend_variables.h"
-
-#define ZEND_DEBUG_OBJECTS 0
-
-static zend_object_handlers zoh = {
- zend_objects_get_address,
- NULL,
- zend_objects_add_ref,
- zend_objects_del_ref,
- zend_objects_delete_obj,
- zend_objects_clone_obj
-};
-
-void zend_objects_init(zend_objects *objects, zend_uint init_size)
-{
- objects->object_buckets = (zend_object_bucket *) emalloc(init_size * sizeof(zend_object_bucket));
- objects->top = 1; /* Skip 0 so that handles are true */
- objects->size = init_size;
- objects->free_list_head = -1;
-}
-
-void zend_objects_destroy(zend_objects *objects)
-{
- efree(objects->object_buckets);
-}
-
-zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type)
-{
- zend_object_handle handle;
- zend_object_value retval;
-
- TSRMLS_FETCH();
-
- if (EG(objects).free_list_head != -1) {
- handle = EG(objects).free_list_head;
- EG(objects).free_list_head = EG(objects).object_buckets[handle].bucket.free_list.next;
- } else {
- if (EG(objects).top == EG(objects).size) {
- EG(objects).size <<= 1;
- EG(objects).object_buckets = (zend_object_bucket *) erealloc(EG(objects).object_buckets, EG(objects).size * sizeof(zend_object_bucket));
- }
- handle = EG(objects).top++;
- }
- EG(objects).object_buckets[handle].valid = 1;
- EG(objects).object_buckets[handle].bucket.obj.refcount = 1;
-
- *object = &EG(objects).object_buckets[handle].bucket.obj.object;
-
- (*object)->ce = class_type;
-
- retval.handle = handle;
- retval.handlers = &zoh;
-#if ZEND_DEBUG_OBJECTS
- fprintf(stderr, "Allocated object id #%d\n", handle);
-#endif
- return retval;
-}
-
-zend_object *zend_objects_get_address(zend_object_handle handle)
-{
- TSRMLS_FETCH();
-
- if (!EG(objects).object_buckets[handle].valid) {
- zend_error(E_ERROR, "Trying to access invalid object");
- }
- return &EG(objects).object_buckets[handle].bucket.obj.object;
-}
-
-void zend_objects_add_ref(zend_object_handle handle)
-{
- TSRMLS_FETCH();
-
- if (!EG(objects).object_buckets[handle].valid) {
- zend_error(E_ERROR, "Trying to add reference to invalid object");
- }
-
- EG(objects).object_buckets[handle].bucket.obj.refcount++;
-#if ZEND_DEBUG_OBJECTS
- fprintf(stderr, "Increased refcount of object id #%d\n", handle);
-#endif
-}
-
-void zend_objects_delete_obj(zend_object_handle handle)
-{
- zend_object *object;
- TSRMLS_FETCH();
-
- if (!EG(objects).object_buckets[handle].valid) {
- zend_error(E_ERROR, "Trying to delete invalid object");
- }
-
- object = &EG(objects).object_buckets[handle].bucket.obj.object;
- zend_hash_destroy(object->properties);
- efree(object->properties);
- EG(objects).object_buckets[handle].valid = 0;
-#if ZEND_DEBUG_OBJECTS
- fprintf(stderr, "Deleted object id #%d\n", handle);
-#endif
-
-}
-
-void zend_objects_del_ref(zend_object_handle handle)
-{
- TSRMLS_FETCH();
-
- if (--EG(objects).object_buckets[handle].bucket.obj.refcount == 0) {
- zend_object *object;
-
- if (EG(objects).object_buckets[handle].valid) {
- object = &EG(objects).object_buckets[handle].bucket.obj.object;
- zend_hash_destroy(object->properties);
- efree(object->properties);
- }
- EG(objects).object_buckets[handle].bucket.free_list.next = EG(objects).free_list_head;
- EG(objects).free_list_head = handle;
- EG(objects).object_buckets[handle].valid = 0;
-#if ZEND_DEBUG_OBJECTS
- fprintf(stderr, "Deallocated object id #%d\n", handle);
-#endif
- }
-#if ZEND_DEBUG_OBJECTS
- else {
- fprintf(stderr, "Decreased refcount of object id #%d\n", handle);
- }
-#endif
-}
-
-zend_object_value zend_objects_clone_obj(zend_object_handle handle)
-{
- zend_object_value retval;
- zend_object *old_object;
- zend_object *new_object;
-
- TSRMLS_FETCH();
-
- if (!EG(objects).object_buckets[handle].valid) {
- zend_error(E_ERROR, "Trying to clone invalid object");
- }
-
- old_object = &EG(objects).object_buckets[handle].bucket.obj.object;
- retval = zend_objects_new(&new_object, old_object->ce);
- ALLOC_HASHTABLE(new_object->properties);
- zend_hash_init(new_object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(new_object->properties, old_object->properties, (copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *));
-
- return retval;
-}
diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h
deleted file mode 100644
index 91e4d29276..0000000000
--- a/Zend/zend_objects.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef ZEND_OBJECTS_H
-#define ZEND_OBJECTS_H
-
-#include "zend.h"
-
-typedef struct _zend_object_bucket {
- zend_bool valid;
- union _bucket {
- struct {
- zend_object object;
- zend_uint refcount;
- } obj;
- struct {
- int next;
- } free_list;
- } bucket;
-} zend_object_bucket;
-
-typedef struct _zend_objects {
- zend_object_bucket *object_buckets;
- zend_uint top;
- zend_uint size;
- int free_list_head;
-} zend_objects;
-
-void zend_objects_init(zend_objects *objects, zend_uint init_size);
-void zend_objects_destroy(zend_objects *objects);
-zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type);
-zend_object *zend_objects_get_address(zend_object_handle handle);
-void zend_objects_add_ref(zend_object_handle handle);
-void zend_objects_del_ref(zend_object_handle handle);
-void zend_objects_delete_obj(zend_object_handle handle);
-zend_object_value zend_objects_clone_obj(zend_object_handle handle);
-
-#endif /* ZEND_OBJECTS_H */
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
deleted file mode 100644
index edefcafa02..0000000000
--- a/Zend/zend_opcode.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdio.h>
-
-#include "zend.h"
-#include "zend_alloc.h"
-#include "zend_compile.h"
-#include "zend_extensions.h"
-#include "zend_API.h"
-
-
-static void zend_extension_op_array_ctor_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->op_array_ctor) {
- extension->op_array_ctor(op_array);
- }
-}
-
-
-static void zend_extension_op_array_dtor_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->op_array_dtor) {
- extension->op_array_dtor(op_array);
- }
-}
-
-
-static void op_array_alloc_ops(zend_op_array *op_array)
-{
- op_array->opcodes = erealloc(op_array->opcodes, (op_array->size)*sizeof(zend_op));
-}
-
-
-
-void init_op_array(zend_op_array *op_array, int type, int initial_ops_size TSRMLS_DC)
-{
- op_array->type = type;
-
- op_array->backpatch_count = 0;
- if (CG(interactive)) {
- /* We must avoid a realloc() on the op_array in interactive mode, since pointers to constants
- * will become invalid
- */
- initial_ops_size = 8192;
- }
-
- op_array->refcount = (zend_uint *) emalloc(sizeof(zend_uint));
- *op_array->refcount = 1;
- op_array->size = initial_ops_size;
- op_array->last = 0;
- op_array->opcodes = NULL;
- op_array_alloc_ops(op_array);
-
- op_array->T = 0;
-
- op_array->function_name = NULL;
- op_array->filename = zend_get_compiled_filename(TSRMLS_C);
-
- op_array->arg_types = NULL;
-
- op_array->brk_cont_array = NULL;
- op_array->last_brk_cont = 0;
- op_array->current_brk_cont = -1;
-
- op_array->static_variables = NULL;
-
- op_array->uses_globals = 0;
-
- op_array->return_reference = 0;
- op_array->done_pass_two = 0;
-
- op_array->start_op = NULL;
-
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_ctor_handler, op_array TSRMLS_CC);
-}
-
-
-ZEND_API void destroy_zend_function(zend_function *function)
-{
- switch (function->type) {
- case ZEND_USER_FUNCTION:
- destroy_op_array((zend_op_array *) function);
- break;
- case ZEND_INTERNAL_FUNCTION:
- /* do nothing */
- break;
- }
-}
-
-
-ZEND_API void destroy_zend_class(zend_class_entry *ce)
-{
- if (--(*ce->refcount)>0) {
- return;
- }
- switch (ce->type) {
- case ZEND_USER_CLASS:
- efree(ce->name);
- efree(ce->refcount);
- zend_hash_destroy(&ce->function_table);
- zend_hash_destroy(&ce->default_properties);
- zend_hash_destroy(&ce->static_members);
- zend_hash_destroy(&ce->constants_table);
- zend_hash_destroy(&ce->class_table);
- break;
- case ZEND_INTERNAL_CLASS:
- free(ce->name);
- free(ce->refcount);
- zend_hash_destroy(&ce->function_table);
- zend_hash_destroy(&ce->default_properties);
- zend_hash_destroy(&ce->static_members);
- zend_hash_destroy(&ce->constants_table);
- zend_hash_destroy(&ce->class_table);
- break;
- }
-}
-
-
-void zend_class_add_ref(zend_class_entry *ce)
-{
- (*ce->refcount)++;
-}
-
-
-ZEND_API void destroy_op_array(zend_op_array *op_array)
-{
- zend_op *opline = op_array->opcodes;
- zend_op *end = op_array->opcodes+op_array->last;
- TSRMLS_FETCH();
-
- if (op_array->static_variables) {
- zend_hash_destroy(op_array->static_variables);
- FREE_HASHTABLE(op_array->static_variables);
- }
-
- if (--(*op_array->refcount)>0) {
- return;
- }
-
- efree(op_array->refcount);
-
- while (opline<end) {
- if (opline->op1.op_type==IS_CONST) {
-#if DEBUG_ZEND>2
- printf("Reducing refcount for %x 1=>0 (destroying)\n", &opline->op1.u.constant);
-#endif
- zval_dtor(&opline->op1.u.constant);
- }
- if (opline->op2.op_type==IS_CONST) {
-#if DEBUG_ZEND>2
- printf("Reducing refcount for %x 1=>0 (destroying)\n", &opline->op2.u.constant);
-#endif
- zval_dtor(&opline->op2.u.constant);
- }
- opline++;
- }
- efree(op_array->opcodes);
- if (op_array->function_name) {
- efree(op_array->function_name);
- }
- if (op_array->arg_types) {
- efree(op_array->arg_types);
- }
- if (op_array->brk_cont_array) {
- efree(op_array->brk_cont_array);
- }
- if (op_array->done_pass_two) {
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_dtor_handler, op_array TSRMLS_CC);
- }
-}
-
-
-void init_op(zend_op *op TSRMLS_DC)
-{
- memset(&op->result, 0, sizeof(znode));
- op->lineno = CG(zend_lineno);
- SET_UNUSED(op->result);
- op->extended_value = 0;
- memset(&op->op1, 0, sizeof(znode));
- memset(&op->op2, 0, sizeof(znode));
-}
-
-zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC)
-{
- zend_uint next_op_num = op_array->last++;
- zend_op *next_op;
-
- if (next_op_num >= op_array->size) {
- if (CG(interactive)) {
- /* we messed up */
- zend_printf("Ran out of opcode space!\n"
- "You should probably consider writing this huge script into a file!\n");
- zend_bailout();
- }
- op_array->size *= 4;
- op_array_alloc_ops(op_array);
- }
-
- next_op = &(op_array->opcodes[next_op_num]);
-
- init_op(next_op TSRMLS_CC);
-
- return next_op;
-}
-
-
-int get_next_op_number(zend_op_array *op_array)
-{
- return op_array->last;
-}
-
-
-
-
-zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array)
-{
- op_array->last_brk_cont++;
- op_array->brk_cont_array = erealloc(op_array->brk_cont_array, sizeof(zend_brk_cont_element)*op_array->last_brk_cont);
- return &op_array->brk_cont_array[op_array->last_brk_cont-1];
-}
-
-
-static void zend_update_extended_info(zend_op_array *op_array TSRMLS_DC)
-{
- zend_op *opline = op_array->opcodes, *end=opline+op_array->last;
-
- while (opline<end) {
- if (opline->opcode == ZEND_EXT_STMT) {
- if (opline+1<end) {
- if ((opline+1)->opcode == ZEND_EXT_STMT) {
- opline->opcode = ZEND_NOP;
- opline++;
- continue;
- }
- if (opline+1<end) {
- opline->lineno = (opline+1)->lineno;
- }
- } else {
- opline->opcode = ZEND_NOP;
- }
- }
- opline++;
- }
-}
-
-
-
-static void zend_extension_op_array_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)
-{
- if (extension->op_array_handler) {
- extension->op_array_handler(op_array);
- }
-}
-
-
-int pass_two(zend_op_array *op_array TSRMLS_DC)
-{
- zend_op *opline, *end;
-
- if (op_array->type!=ZEND_USER_FUNCTION && op_array->type!=ZEND_EVAL_CODE) {
- return 0;
- }
- if (CG(extended_info)) {
- zend_update_extended_info(op_array TSRMLS_CC);
- }
- if (CG(handle_op_arrays)) {
- zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_handler, op_array TSRMLS_CC);
- }
-
- opline = op_array->opcodes;
- end = opline + op_array->last;
- while (opline < end) {
- if (opline->op1.op_type == IS_CONST) {
- opline->op1.u.constant.is_ref = 1;
- opline->op1.u.constant.refcount = 2; /* Make sure is_ref won't be reset */
- }
- if (opline->op2.op_type == IS_CONST) {
- opline->op2.u.constant.is_ref = 1;
- opline->op2.u.constant.refcount = 2;
- }
- opline++;
- }
- op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, sizeof(zend_op)*op_array->last);
- op_array->size = op_array->last;
- op_array->done_pass_two = 1;
- return 0;
-}
-
-
-int print_class(zend_class_entry *class_entry TSRMLS_DC)
-{
- printf("Class %s:\n", class_entry->name);
- zend_hash_apply(&class_entry->function_table, (apply_func_t) pass_two TSRMLS_CC);
- printf("End of class %s.\n\n", class_entry->name);
- return 0;
-}
-
-ZEND_API unary_op_type get_unary_op(int opcode)
-{
- switch(opcode) {
- case ZEND_BW_NOT:
- return (unary_op_type) bitwise_not_function;
- break;
- case ZEND_BOOL_NOT:
- return (unary_op_type) boolean_not_function;
- break;
- default:
- return (unary_op_type) NULL;
- break;
- }
-}
-
-
-ZEND_API void *get_binary_op(int opcode)
-{
- switch (opcode) {
- case ZEND_ADD:
- case ZEND_ASSIGN_ADD:
- return (void *) add_function;
- break;
- case ZEND_SUB:
- case ZEND_ASSIGN_SUB:
- return (void *) sub_function;
- break;
- case ZEND_MUL:
- case ZEND_ASSIGN_MUL:
- return (void *) mul_function;
- break;
- case ZEND_DIV:
- case ZEND_ASSIGN_DIV:
- return (void *) div_function;
- break;
- case ZEND_MOD:
- case ZEND_ASSIGN_MOD:
- return (void *) mod_function;
- break;
- case ZEND_SL:
- case ZEND_ASSIGN_SL:
- return (void *) shift_left_function;
- break;
- case ZEND_SR:
- case ZEND_ASSIGN_SR:
- return (void *) shift_right_function;
- break;
- case ZEND_CONCAT:
- case ZEND_ASSIGN_CONCAT:
- return (void *) concat_function;
- break;
- case ZEND_IS_IDENTICAL:
- return (void *) is_identical_function;
- break;
- case ZEND_IS_NOT_IDENTICAL:
- return (void *) is_not_identical_function;
- break;
- case ZEND_IS_EQUAL:
- return (void *) is_equal_function;
- break;
- case ZEND_IS_NOT_EQUAL:
- return (void *) is_not_equal_function;
- break;
- case ZEND_IS_SMALLER:
- return (void *) is_smaller_function;
- break;
- case ZEND_IS_SMALLER_OR_EQUAL:
- return (void *) is_smaller_or_equal_function;
- break;
- case ZEND_BW_OR:
- case ZEND_ASSIGN_BW_OR:
- return (void *) bitwise_or_function;
- break;
- case ZEND_BW_AND:
- case ZEND_ASSIGN_BW_AND:
- return (void *) bitwise_and_function;
- break;
- case ZEND_BW_XOR:
- case ZEND_ASSIGN_BW_XOR:
- return (void *) bitwise_xor_function;
- break;
- default:
- return (void *) NULL;
- break;
- }
-}
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
deleted file mode 100644
index 1f9ab5eefc..0000000000
--- a/Zend/zend_operators.c
+++ /dev/null
@@ -1,1738 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "zend.h"
-#include "zend_operators.h"
-#include "zend_variables.h"
-#include "zend_globals.h"
-#include "zend_list.h"
-#include "zend_fast_cache.h"
-#include "zend_API.h"
-
-#if 0&&WITH_BCMATH
-#include "ext/bcmath/number.h"
-#endif
-
-ZEND_API int zend_atoi(const char *str, int str_len)
-{
- int retval;
-
- if (!str_len) {
- str_len = strlen(str);
- }
- retval = atoi(str);
- if (str_len>0) {
- switch (str[str_len-1]) {
- case 'k':
- case 'K':
- retval *= 1024;
- break;
- case 'm':
- case 'M':
- retval *= 1048576;
- break;
- }
- }
- return retval;
-}
-
-
-ZEND_API double zend_string_to_double(const char *number, zend_uint length)
-{
- double divisor = 10.0;
- double result = 0.0;
- double exponent;
- const char *end = number+length;
- const char *digit = number;
-
- if (!length) {
- return result;
- }
-
- while (digit < end) {
- if ((*digit <= '9' && *digit >= '0')) {
- result *= 10;
- result += *digit - '0';
- } else if (*digit == '.') {
- digit++;
- break;
- } else if (toupper(*digit) == 'E') {
- exponent = (double) atoi(digit+1);
- result *= pow(10.0, exponent);
- return result;
- } else {
- return result;
- }
- digit++;
- }
-
- while (digit < end) {
- if ((*digit <= '9' && *digit >= '0')) {
- result += (*digit - '0') / divisor;
- divisor *= 10;
- } else if (toupper(*digit) == 'E') {
- exponent = (double) atoi(digit+1);
- result *= pow(10.0, exponent);
- return result;
- } else {
- return result;
- }
- digit++;
- }
- return result;
-}
-
-
-ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
-{
- switch (op->type) {
- case IS_STRING:
- {
- char *strval;
-
- strval = op->value.str.val;
- switch ((op->type=is_numeric_string(strval, op->value.str.len, &op->value.lval, &op->value.dval, 1))) {
- case IS_DOUBLE:
- case IS_LONG:
- break;
-#if 0 && WITH_BCMATH
- case FLAG_IS_BC:
- op->type = IS_DOUBLE; /* may have lost significant digits */
- break;
-#endif
- default:
- op->value.lval = strtol(op->value.str.val, NULL, 10);
- op->type = IS_LONG;
- break;
- }
- STR_FREE(strval);
- break;
- }
- case IS_BOOL:
- op->type = IS_LONG;
- break;
- case IS_RESOURCE:
- zend_list_delete(op->value.lval);
- op->type = IS_LONG;
- break;
- case IS_NULL:
- op->type = IS_LONG;
- op->value.lval = 0;
- break;
- }
-}
-
-#define zendi_convert_scalar_to_number(op, holder, result) \
- if (op==result) { \
- convert_scalar_to_number(op TSRMLS_CC); \
- } else { \
- switch ((op)->type) { \
- case IS_STRING: \
- { \
- switch (((holder).type=is_numeric_string((op)->value.str.val, (op)->value.str.len, &(holder).value.lval, &(holder).value.dval, 1))) { \
- case IS_DOUBLE: \
- case IS_LONG: \
- break; \
- case FLAG_IS_BC: \
- (holder).type = IS_DOUBLE; /* may have lost significant digits */ \
- break; \
- default: \
- (holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
- (holder).type = IS_LONG; \
- break; \
- } \
- (op) = &(holder); \
- break; \
- } \
- case IS_BOOL: \
- case IS_RESOURCE: \
- (holder).value.lval = (op)->value.lval; \
- (holder).type = IS_LONG; \
- (op) = &(holder); \
- break; \
- case IS_NULL: \
- (holder).value.lval = 0; \
- (holder).type = IS_LONG; \
- (op) = &(holder); \
- break; \
- } \
- }
-
-
-#define DVAL_TO_LVAL(d, l) (l) = (d) > LONG_MAX ? (unsigned long) (d) : (long) (d)
-
-#define zendi_convert_to_long(op, holder, result) \
- if (op==result) { \
- convert_to_long(op); \
- } else if ((op)->type != IS_LONG) { \
- switch ((op)->type) { \
- case IS_NULL: \
- (holder).value.lval = 0; \
- break; \
- case IS_DOUBLE: \
- DVAL_TO_LVAL((op)->value.dval, (holder).value.lval); \
- break; \
- case IS_STRING: \
- (holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
- break; \
- case IS_ARRAY: \
- (holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
- break; \
- case IS_OBJECT: \
- (holder).value.lval = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0); \
- break; \
- case IS_BOOL: \
- case IS_RESOURCE: \
- (holder).value.lval = (op)->value.lval; \
- break; \
- default: \
- zend_error(E_WARNING, "Cannot convert to ordinal value"); \
- (holder).value.lval = 0; \
- break; \
- } \
- (holder).type = IS_LONG; \
- (op) = &(holder); \
- }
-
-
-#define zendi_convert_to_boolean(op, holder, result) \
- if (op==result) { \
- convert_to_boolean(op); \
- } else if ((op)->type != IS_BOOL) { \
- switch ((op)->type) { \
- case IS_NULL: \
- (holder).value.lval = 0; \
- break; \
- case IS_RESOURCE: \
- case IS_LONG: \
- (holder).value.lval = ((op)->value.lval ? 1 : 0); \
- break; \
- case IS_DOUBLE: \
- (holder).value.lval = ((op)->value.dval ? 1 : 0); \
- break; \
- case IS_STRING: \
- if ((op)->value.str.len == 0 \
- || ((op)->value.str.len==1 && (op)->value.str.val[0]=='0')) { \
- (holder).value.lval = 0; \
- } else { \
- (holder).value.lval = 1; \
- } \
- break; \
- case IS_ARRAY: \
- (holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
- break; \
- case IS_OBJECT: \
- (holder).value.lval = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0); \
- break; \
- default: \
- (holder).value.lval = 0; \
- break; \
- } \
- (holder).type = IS_BOOL; \
- (op) = &(holder); \
- }
-
-
-ZEND_API void convert_to_long(zval *op)
-{
- convert_to_long_base(op, 10);
-}
-
-
-ZEND_API void convert_to_long_base(zval *op, int base)
-{
- char *strval;
- long tmp;
-
- switch (op->type) {
- case IS_NULL:
- op->value.lval = 0;
- break;
- case IS_RESOURCE: {
- TSRMLS_FETCH();
-
- zend_list_delete(op->value.lval);
- }
- /* break missing intentionally */
- case IS_BOOL:
- case IS_LONG:
- break;
- case IS_DOUBLE:
- DVAL_TO_LVAL(op->value.dval, op->value.lval);
- break;
- case IS_STRING:
- strval = op->value.str.val;
- op->value.lval = strtol(strval, NULL, base);
- STR_FREE(strval);
- break;
- case IS_ARRAY:
- tmp = (zend_hash_num_elements(op->value.ht)?1:0);
- zval_dtor(op);
- op->value.lval = tmp;
- break;
- case IS_OBJECT:
- tmp = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0);
- zval_dtor(op);
- op->value.lval = tmp;
- break;
- default:
- zend_error(E_WARNING, "Cannot convert to ordinal value");
- zval_dtor(op);
- op->value.lval = 0;
- break;
- }
-
- op->type = IS_LONG;
-}
-
-
-ZEND_API void convert_to_double(zval *op)
-{
- char *strval;
- double tmp;
-
- switch (op->type) {
- case IS_NULL:
- op->value.dval = 0.0;
- break;
- case IS_RESOURCE: {
- TSRMLS_FETCH();
-
- zend_list_delete(op->value.lval);
- }
- /* break missing intentionally */
- case IS_BOOL:
- case IS_LONG:
- op->value.dval = (double) op->value.lval;
- break;
- case IS_DOUBLE:
- break;
- case IS_STRING:
- strval = op->value.str.val;
-
- op->value.dval = strtod(strval, NULL);
- STR_FREE(strval);
- break;
- case IS_ARRAY:
- tmp = (zend_hash_num_elements(op->value.ht)?1:0);
- zval_dtor(op);
- op->value.dval = tmp;
- break;
- case IS_OBJECT:
- tmp = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0);
- zval_dtor(op);
- op->value.dval = tmp;
- break;
- default:
- zend_error(E_WARNING, "Cannot convert to real value (type=%d)", op->type);
- zval_dtor(op);
- op->value.dval = 0;
- break;
- }
- op->type = IS_DOUBLE;
-}
-
-
-ZEND_API void convert_to_null(zval *op)
-{
- zval_dtor(op);
- op->type = IS_NULL;
-}
-
-
-ZEND_API void convert_to_boolean(zval *op)
-{
- char *strval;
- int tmp;
-
- switch (op->type) {
- case IS_BOOL:
- break;
- case IS_NULL:
- op->value.lval = 0;
- break;
- case IS_RESOURCE: {
- TSRMLS_FETCH();
-
- zend_list_delete(op->value.lval);
- }
- /* break missing intentionally */
- case IS_LONG:
- op->value.lval = (op->value.lval ? 1 : 0);
- break;
- case IS_DOUBLE:
- op->value.lval = (op->value.dval ? 1 : 0);
- break;
- case IS_STRING:
- strval = op->value.str.val;
-
- if (op->value.str.len == 0
- || (op->value.str.len==1 && op->value.str.val[0]=='0')) {
- op->value.lval = 0;
- } else {
- op->value.lval = 1;
- }
- STR_FREE(strval);
- break;
- case IS_ARRAY:
- tmp = (zend_hash_num_elements(op->value.ht)?1:0);
- zval_dtor(op);
- op->value.lval = tmp;
- break;
- case IS_OBJECT:
- tmp = (zend_hash_num_elements(Z_OBJPROP_P(op))?1:0);
- zval_dtor(op);
- op->value.lval = tmp;
- break;
- default:
- zval_dtor(op);
- op->value.lval = 0;
- break;
- }
- op->type = IS_BOOL;
-}
-
-
-ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC)
-{
- long lval;
- double dval;
- TSRMLS_FETCH();
-
- switch (op->type) {
- case IS_NULL:
- op->value.str.val = empty_string;
- op->value.str.len = 0;
- break;
- case IS_STRING:
- break;
- case IS_BOOL:
- if (op->value.lval) {
- op->value.str.val = estrndup_rel("1", 1);
- op->value.str.len = 1;
- } else {
- op->value.str.val = empty_string;
- op->value.str.len = 0;
- }
- break;
- case IS_RESOURCE: {
- long tmp = op->value.lval;
-
- zend_list_delete(op->value.lval);
- op->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG);
- op->value.str.len = sprintf(op->value.str.val, "Resource id #%ld", tmp);
- break;
- }
- case IS_LONG:
- lval = op->value.lval;
-
- op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_LONG + 1);
- op->value.str.len = zend_sprintf(op->value.str.val, "%ld", lval); /* SAFE */
- break;
- case IS_DOUBLE: {
- dval = op->value.dval;
- op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1);
- op->value.str.len = zend_sprintf(op->value.str.val, "%.*G", (int) EG(precision), dval); /* SAFE */
- /* %G already handles removing trailing zeros from the fractional part, yay */
- break;
- }
- case IS_ARRAY:
- zval_dtor(op);
- op->value.str.val = estrndup_rel("Array", sizeof("Array")-1);
- op->value.str.len = sizeof("Array")-1;
- zend_error(E_NOTICE, "Array to string conversion");
- break;
- case IS_OBJECT:
- zval_dtor(op);
- op->value.str.val = estrndup_rel("Object", sizeof("Object")-1);
- op->value.str.len = sizeof("Object")-1;
- zend_error(E_NOTICE, "Object to string conversion");
- break;
- default:
- zval_dtor(op);
- ZVAL_BOOL(op, 0);
- break;
- }
- op->type = IS_STRING;
-}
-
-
-static void convert_scalar_to_array(zval *op, int type)
-{
- zval *entry;
-
- ALLOC_ZVAL(entry);
- *entry = *op;
- INIT_PZVAL(entry);
-
- switch (type) {
- case IS_ARRAY:
- ALLOC_HASHTABLE(op->value.ht);
- zend_hash_init(op->value.ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_index_update(op->value.ht, 0, (void *) &entry, sizeof(zval *), NULL);
- op->type = IS_ARRAY;
- break;
- case IS_OBJECT:
- {
- /* OBJECTS_OPTIMIZE */
- TSRMLS_FETCH();
-
- object_init(op);
- zend_hash_update(Z_OBJPROP_P(op), "scalar", sizeof("scalar"), (void *) &entry, sizeof(zval *), NULL);
- }
- break;
- }
-}
-
-
-ZEND_API void convert_to_array(zval *op)
-{
- switch(op->type) {
- case IS_ARRAY:
- return;
- break;
-/* OBJECTS_OPTIMIZE */
- case IS_OBJECT:
- {
- zval *tmp;
- HashTable *ht;
-
- ALLOC_HASHTABLE(ht);
- zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(ht, Z_OBJPROP_P(op), (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- zval_dtor(op);
- op->type = IS_ARRAY;
- op->value.ht = ht;
- }
- return;
- case IS_NULL:
- ALLOC_HASHTABLE(op->value.ht);
- zend_hash_init(op->value.ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- op->type = IS_ARRAY;
- break;
- default:
- convert_scalar_to_array(op, IS_ARRAY);
- break;
- }
-}
-
-
-ZEND_API void convert_to_object(zval *op)
-{
- switch(op->type) {
- case IS_ARRAY:
- {
- /* OBJECTS_OPTIMIZE */
- TSRMLS_FETCH();
-
- object_and_properties_init(op, &zend_standard_class_def, op->value.ht);
- return;
- break;
- }
- case IS_OBJECT:
- return;
- case IS_NULL:
- {
- /* OBJECTS_OPTIMIZE */
- TSRMLS_FETCH();
-
- object_init(op);
- break;
- }
- default:
- convert_scalar_to_array(op, IS_OBJECT);
- break;
- }
-}
-
-ZEND_API void multi_convert_to_long_ex(int argc, ...)
-{
- zval **arg;
- va_list ap;
-
- va_start(ap, argc);
-
- while (argc--) {
- arg = va_arg(ap, zval **);
- convert_to_long_ex(arg);
- }
-
- va_end(ap);
-}
-
-ZEND_API void multi_convert_to_double_ex(int argc, ...)
-{
- zval **arg;
- va_list ap;
-
- va_start(ap, argc);
-
- while (argc--) {
- arg = va_arg(ap, zval **);
- convert_to_double_ex(arg);
- }
-
- va_end(ap);
-}
-
-ZEND_API void multi_convert_to_string_ex(int argc, ...)
-{
- zval **arg;
- va_list ap;
-
- va_start(ap, argc);
-
- while (argc--) {
- arg = va_arg(ap, zval **);
- convert_to_string_ex(arg);
- }
-
- va_end(ap);
-}
-
-ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- if (op1->type == IS_ARRAY && op2->type == IS_ARRAY) {
- zval *tmp;
-
- if ((result == op1) && (result == op2)) {
- /* $a += $a */
- return SUCCESS;
- }
- if (result != op1) {
- *result = *op1;
- zval_copy_ctor(result);
- }
- zend_hash_merge(result->value.ht, op2->value.ht, (void (*)(void *pData)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
- return SUCCESS;
- }
- zendi_convert_scalar_to_number(op1, op1_copy, result);
- zendi_convert_scalar_to_number(op2, op2_copy, result);
-
-
- if (op1->type == IS_LONG && op2->type == IS_LONG) {
- double dval = (double) op1->value.lval + (double) op2->value.lval;
-
- if ((dval > (double) LONG_MAX) || (dval < (double) LONG_MIN)) {
- result->value.dval = dval;
- result->type = IS_DOUBLE;
- } else {
- result->value.lval = op1->value.lval + op2->value.lval;
- result->type = IS_LONG;
- }
- return SUCCESS;
- }
- if ((op1->type == IS_DOUBLE && op2->type == IS_LONG)
- || (op1->type == IS_LONG && op2->type == IS_DOUBLE)) {
- result->value.dval = (op1->type == IS_LONG ?
- (((double) op1->value.lval) + op2->value.dval) :
- (op1->value.dval + ((double) op2->value.lval)));
- result->type = IS_DOUBLE;
- return SUCCESS;
- }
- if (op1->type == IS_DOUBLE && op2->type == IS_DOUBLE) {
- result->type = IS_DOUBLE;
- result->value.dval = op1->value.dval + op2->value.dval;
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE; /* unknown datatype */
-}
-
-
-ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_scalar_to_number(op1, op1_copy, result);
- zendi_convert_scalar_to_number(op2, op2_copy, result);
-
- if (op1->type == IS_LONG && op2->type == IS_LONG) {
- double dval = (double) op1->value.lval - (double) op2->value.lval;
-
- if ((dval < (double) LONG_MIN) || (dval > (double) LONG_MAX)) {
- result->value.dval = dval;
- result->type = IS_DOUBLE;
- } else {
- result->value.lval = op1->value.lval - op2->value.lval;
- result->type = IS_LONG;
- }
- return SUCCESS;
- }
- if ((op1->type == IS_DOUBLE && op2->type == IS_LONG)
- || (op1->type == IS_LONG && op2->type == IS_DOUBLE)) {
- result->value.dval = (op1->type == IS_LONG ?
- (((double) op1->value.lval) - op2->value.dval) :
- (op1->value.dval - ((double) op2->value.lval)));
- result->type = IS_DOUBLE;
- return SUCCESS;
- }
- if (op1->type == IS_DOUBLE && op2->type == IS_DOUBLE) {
- result->type = IS_DOUBLE;
- result->value.dval = op1->value.dval - op2->value.dval;
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE; /* unknown datatype */
-}
-
-
-ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_scalar_to_number(op1, op1_copy, result);
- zendi_convert_scalar_to_number(op2, op2_copy, result);
-
- if (op1->type == IS_LONG && op2->type == IS_LONG) {
- double dval = (double) op1->value.lval * (double) op2->value.lval;
-
- if ((dval > (double) LONG_MAX) || (dval < (double) LONG_MIN)) {
- result->value.dval = dval;
- result->type = IS_DOUBLE;
- } else {
- result->value.lval = op1->value.lval * op2->value.lval;
- result->type = IS_LONG;
- }
- return SUCCESS;
- }
- if ((op1->type == IS_DOUBLE && op2->type == IS_LONG)
- || (op1->type == IS_LONG && op2->type == IS_DOUBLE)) {
- result->value.dval = (op1->type == IS_LONG ?
- (((double) op1->value.lval) * op2->value.dval) :
- (op1->value.dval * ((double) op2->value.lval)));
- result->type = IS_DOUBLE;
- return SUCCESS;
- }
- if (op1->type == IS_DOUBLE && op2->type == IS_DOUBLE) {
- result->type = IS_DOUBLE;
- result->value.dval = op1->value.dval * op2->value.dval;
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE; /* unknown datatype */
-}
-
-ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_scalar_to_number(op1, op1_copy, result);
- zendi_convert_scalar_to_number(op2, op2_copy, result);
-
- if ((op2->type == IS_LONG && op2->value.lval == 0) || (op2->type == IS_DOUBLE && op2->value.dval == 0.0)) {
- zend_error(E_WARNING, "Division by zero");
- ZVAL_BOOL(result, 0);
- return FAILURE; /* division by zero */
- }
- if (op1->type == IS_LONG && op2->type == IS_LONG) {
- if (op1->value.lval % op2->value.lval == 0) { /* integer */
- result->type = IS_LONG;
- result->value.lval = op1->value.lval / op2->value.lval;
- } else {
- result->type = IS_DOUBLE;
- result->value.dval = ((double) op1->value.lval) / op2->value.lval;
- }
- return SUCCESS;
- }
- if ((op1->type == IS_DOUBLE && op2->type == IS_LONG)
- || (op1->type == IS_LONG && op2->type == IS_DOUBLE)) {
- result->value.dval = (op1->type == IS_LONG ?
- (((double) op1->value.lval) / op2->value.dval) :
- (op1->value.dval / ((double) op2->value.lval)));
- result->type = IS_DOUBLE;
- return SUCCESS;
- }
- if (op1->type == IS_DOUBLE && op2->type == IS_DOUBLE) {
- result->type = IS_DOUBLE;
- result->value.dval = op1->value.dval / op2->value.dval;
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE; /* unknown datatype */
-}
-
-
-ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
-
- if (op2->value.lval == 0) {
- ZVAL_BOOL(result, 0);
- return FAILURE; /* modulus by zero */
- }
-
- result->type = IS_LONG;
- result->value.lval = op1->value.lval % op2->value.lval;
- return SUCCESS;
-}
-
-
-
-ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- result->type = IS_BOOL;
-
- zendi_convert_to_boolean(op1, op1_copy, result);
- zendi_convert_to_boolean(op2, op2_copy, result);
- result->value.lval = op1->value.lval ^ op2->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int boolean_not_function(zval *result, zval *op1 TSRMLS_DC)
-{
- zval op1_copy;
-
- zendi_convert_to_boolean(op1, op1_copy, result);
-
- result->type = IS_BOOL;
- result->value.lval = !op1->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int bitwise_not_function(zval *result, zval *op1 TSRMLS_DC)
-{
- zval op1_copy = *op1;
-
- op1 = &op1_copy;
-
- if (op1->type == IS_DOUBLE) {
- op1->value.lval = (long) op1->value.dval;
- op1->type = IS_LONG;
- }
- if (op1->type == IS_LONG) {
- result->value.lval = ~op1->value.lval;
- result->type = IS_LONG;
- return SUCCESS;
- }
- if (op1->type == IS_STRING) {
- int i;
-
- result->type = IS_STRING;
- result->value.str.val = estrndup(op1->value.str.val, op1->value.str.len);
- result->value.str.len = op1->value.str.len;
- for (i = 0; i < op1->value.str.len; i++) {
- result->value.str.val[i] = ~op1->value.str.val[i];
- }
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE; /* unknown datatype */
-}
-
-
-ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- if (op1->type == IS_STRING && op2->type == IS_STRING) {
- zval *longer, *shorter;
- char *result_str;
- int i, result_len;
-
- if (op1->value.str.len >= op2->value.str.len) {
- longer = op1;
- shorter = op2;
- } else {
- longer = op2;
- shorter = op1;
- }
-
- result->type = IS_STRING;
- result_len = longer->value.str.len;
- result_str = estrndup(longer->value.str.val, longer->value.str.len);
- for (i = 0; i < shorter->value.str.len; i++) {
- result_str[i] |= shorter->value.str.val[i];
- }
- if (result==op1) {
- efree(result->value.str.val);
- }
- result->value.str.val = result_str;
- result->value.str.len = result_len;
- return SUCCESS;
- }
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
-
- result->type = IS_LONG;
- result->value.lval = op1->value.lval | op2->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- if (op1->type == IS_STRING && op2->type == IS_STRING) {
- zval *longer, *shorter;
- char *result_str;
- int i, result_len;
-
- if (op1->value.str.len >= op2->value.str.len) {
- longer = op1;
- shorter = op2;
- } else {
- longer = op2;
- shorter = op1;
- }
-
- result->type = IS_STRING;
- result_len = shorter->value.str.len;
- result_str = estrndup(shorter->value.str.val, shorter->value.str.len);
- for (i = 0; i < shorter->value.str.len; i++) {
- result_str[i] &= longer->value.str.val[i];
- }
- if (result==op1) {
- efree(result->value.str.val);
- }
- result->value.str.val = result_str;
- result->value.str.len = result_len;
- return SUCCESS;
- }
-
-
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
-
- result->type = IS_LONG;
- result->value.lval = op1->value.lval & op2->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- if (op1->type == IS_STRING && op2->type == IS_STRING) {
- zval *longer, *shorter;
- char *result_str;
- int i, result_len;
-
- if (op1->value.str.len >= op2->value.str.len) {
- longer = op1;
- shorter = op2;
- } else {
- longer = op2;
- shorter = op1;
- }
-
- result->type = IS_STRING;
- result_len = shorter->value.str.len;
- result_str = estrndup(shorter->value.str.val, shorter->value.str.len);
- for (i = 0; i < shorter->value.str.len; i++) {
- result_str[i] ^= longer->value.str.val[i];
- }
- if (result==op1) {
- efree(result->value.str.val);
- }
- result->value.str.val = result_str;
- result->value.str.len = result_len;
- return SUCCESS;
- }
-
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
-
- result->type = IS_LONG;
- result->value.lval = op1->value.lval ^ op2->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
- result->value.lval = op1->value.lval << op2->value.lval;
- result->type = IS_LONG;
- return SUCCESS;
-}
-
-
-ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- zendi_convert_to_long(op1, op1_copy, result);
- zendi_convert_to_long(op2, op2_copy, result);
- result->value.lval = op1->value.lval >> op2->value.lval;
- result->type = IS_LONG;
- return SUCCESS;
-}
-
-
-
-/* must support result==op1 */
-ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2)
-{
- result->value.str.len = op1->value.str.len + 1;
- result->value.str.val = (char *) erealloc(op1->value.str.val, result->value.str.len+1);
- result->value.str.val[result->value.str.len - 1] = (char) op2->value.lval;
- result->value.str.val[result->value.str.len] = 0;
- result->type = IS_STRING;
- return SUCCESS;
-}
-
-
-/* must support result==op1 */
-ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2)
-{
- int length = op1->value.str.len + op2->value.str.len;
- if (op1->value.str.val == empty_string) {
- result->value.str.val = (char *) emalloc(length+1);
- } else {
- result->value.str.val = (char *) erealloc(op1->value.str.val, length+1);
- }
- memcpy(result->value.str.val+op1->value.str.len, op2->value.str.val, op2->value.str.len);
- result->value.str.val[length] = 0;
- result->value.str.len = length;
- result->type = IS_STRING;
- return SUCCESS;
-}
-
-
-ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
- int use_copy1, use_copy2;
-
-
- zend_make_printable_zval(op1, &op1_copy, &use_copy1);
- zend_make_printable_zval(op2, &op2_copy, &use_copy2);
-
- if (use_copy1) {
- op1 = &op1_copy;
- }
- if (use_copy2) {
- op2 = &op2_copy;
- }
- if (result==op1) { /* special case, perform operations on result */
- uint res_len = op1->value.str.len + op2->value.str.len;
-
- if (result->value.str.len == 0) { /* handle empty_string */
- STR_FREE(result->value.str.val);
- result->value.str.val = emalloc(res_len+1);
- } else {
- result->value.str.val = erealloc(result->value.str.val, res_len+1);
- }
- memcpy(result->value.str.val+result->value.str.len, op2->value.str.val, op2->value.str.len);
- result->value.str.val[res_len]=0;
- result->value.str.len = res_len;
- } else {
- result->value.str.len = op1->value.str.len + op2->value.str.len;
- result->value.str.val = (char *) emalloc(result->value.str.len + 1);
- memcpy(result->value.str.val, op1->value.str.val, op1->value.str.len);
- memcpy(result->value.str.val+op1->value.str.len, op2->value.str.val, op2->value.str.len);
- result->value.str.val[result->value.str.len] = 0;
- result->type = IS_STRING;
- }
- if (use_copy1) {
- zval_dtor(op1);
- }
- if (use_copy2) {
- zval_dtor(op2);
- }
- return SUCCESS;
-}
-
-
-ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
- int use_copy1, use_copy2;
-
- zend_make_printable_zval(op1, &op1_copy, &use_copy1);
- zend_make_printable_zval(op2, &op2_copy, &use_copy2);
-
- if (use_copy1) {
- op1 = &op1_copy;
- }
- if (use_copy2) {
- op2 = &op2_copy;
- }
-
- result->value.lval = zend_binary_zval_strcmp(op1, op2);
- result->type = IS_LONG;
-
- if (use_copy1) {
- zval_dtor(op1);
- }
- if (use_copy2) {
- zval_dtor(op2);
- }
- return SUCCESS;
-}
-
-ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- op1_copy = *op1;
- zval_copy_ctor(&op1_copy);
-
- op2_copy = *op2;
- zval_copy_ctor(&op2_copy);
-
- convert_to_double(&op1_copy);
- convert_to_double(&op2_copy);
-
- result->value.lval = ZEND_NORMALIZE_BOOL(op1_copy.value.dval-op2_copy.value.dval);
- result->type = IS_LONG;
-
- return SUCCESS;
-}
-
-
-ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- zval op1_copy, op2_copy;
-
- if ((op1->type == IS_NULL && op2->type == IS_STRING)
- || (op2->type == IS_NULL && op1->type == IS_STRING)) {
- if (op1->type == IS_NULL) {
- result->type = IS_LONG;
- result->value.lval = zend_binary_strcmp("", 0, op2->value.str.val, op2->value.str.len);
- return SUCCESS;
- } else {
- result->type = IS_LONG;
- result->value.lval = zend_binary_strcmp(op1->value.str.val, op1->value.str.len, "", 0);
- return SUCCESS;
- }
- }
-
- if (op1->type == IS_STRING && op2->type == IS_STRING) {
- zendi_smart_strcmp(result, op1, op2);
- return SUCCESS;
- }
-
- if (op1->type == IS_BOOL || op2->type == IS_BOOL
- || op1->type == IS_NULL || op2->type == IS_NULL) {
- zendi_convert_to_boolean(op1, op1_copy, result);
- zendi_convert_to_boolean(op2, op2_copy, result);
- result->type = IS_LONG;
- result->value.lval = ZEND_NORMALIZE_BOOL(op1->value.lval-op2->value.lval);
- return SUCCESS;
- }
-
- zendi_convert_scalar_to_number(op1, op1_copy, result);
- zendi_convert_scalar_to_number(op2, op2_copy, result);
-
- if (op1->type == IS_LONG && op2->type == IS_LONG) {
- result->type = IS_LONG;
- result->value.lval = op1->value.lval>op2->value.lval?1:(op1->value.lval<op2->value.lval?-1:0);
- return SUCCESS;
- }
- if ((op1->type == IS_DOUBLE || op1->type == IS_LONG)
- && (op2->type == IS_DOUBLE || op2->type == IS_LONG)) {
- result->value.dval = (op1->type == IS_LONG ? (double) op1->value.lval : op1->value.dval) - (op2->type == IS_LONG ? (double) op2->value.lval : op2->value.dval);
- result->value.lval = ZEND_NORMALIZE_BOOL(result->value.dval);
- result->type = IS_LONG;
- return SUCCESS;
- }
- if (op1->type==IS_ARRAY && op2->type==IS_ARRAY) {
- zend_compare_arrays(result, op1, op2 TSRMLS_CC);
- return SUCCESS;
- }
-
- if (op1->type==IS_OBJECT && op2->type==IS_OBJECT) {
- zend_compare_objects(result, op1, op2 TSRMLS_CC);
- return SUCCESS;
- }
-
- if (op1->type==IS_ARRAY) {
- result->value.lval = 1;
- result->type = IS_LONG;
- return SUCCESS;
- }
- if (op2->type==IS_ARRAY) {
- result->value.lval = -1;
- result->type = IS_LONG;
- return SUCCESS;
- }
- if (op1->type==IS_OBJECT) {
- result->value.lval = 1;
- result->type = IS_LONG;
- return SUCCESS;
- }
- if (op2->type==IS_OBJECT) {
- result->value.lval = -1;
- result->type = IS_LONG;
- return SUCCESS;
- }
-
- ZVAL_BOOL(result, 0);
- return FAILURE;
-}
-
-
-static int hash_zval_identical_function(const zval **z1, const zval **z2)
-{
- zval result;
- TSRMLS_FETCH();
-
- /* is_identical_function() returns 1 in case of identity and 0 in case
- * of a difference;
- * whereas this comparison function is expected to return 0 on identity,
- * and non zero otherwise.
- */
- if (is_identical_function(&result, (zval *) *z1, (zval *) *z2 TSRMLS_CC)==FAILURE) {
- return 1;
- }
- return !result.value.lval;
-}
-
-
-ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- result->type = IS_BOOL;
- if (op1->type != op2->type) {
- result->value.lval = 0;
- return SUCCESS;
- }
- switch (op1->type) {
- case IS_NULL:
- result->value.lval = (op2->type==IS_NULL);
- break;
- case IS_BOOL:
- case IS_LONG:
- case IS_RESOURCE:
- result->value.lval = (op1->value.lval == op2->value.lval);
- break;
- case IS_DOUBLE:
- result->value.lval = (op1->value.dval == op2->value.dval);
- break;
- case IS_STRING:
- if ((op1->value.str.len == op2->value.str.len)
- && (!memcmp(op1->value.str.val, op2->value.str.val, op1->value.str.len))) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- break;
- case IS_ARRAY:
- if (zend_hash_compare(op1->value.ht, op2->value.ht, (compare_func_t) hash_zval_identical_function, 1 TSRMLS_CC)==0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- break;
- case IS_OBJECT:
- if (Z_OBJCE_P(op1) != Z_OBJCE_P(op2)) {
- result->value.lval = 0;
- } else {
- if (zend_hash_compare(Z_OBJPROP_P(op1), Z_OBJPROP_P(op2), (compare_func_t) hash_zval_identical_function, 1 TSRMLS_CC)==0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- }
- break;
- default:
- ZVAL_BOOL(result, 0);
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int is_not_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- result->type = IS_BOOL;
- if (is_identical_function(result, op1, op2 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- result->value.lval = !result->value.lval;
- return SUCCESS;
-}
-
-
-ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- if (compare_function(result, op1, op2 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- convert_to_boolean(result);
- if (result->value.lval == 0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- if (compare_function(result, op1, op2 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- convert_to_boolean(result);
- if (result->value.lval) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- if (compare_function(result, op1, op2 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- if (result->type == IS_LONG) {
- result->type = IS_BOOL;
- if (result->value.lval < 0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
- }
- if (result->type == IS_DOUBLE) {
- result->type = IS_BOOL;
- if (result->value.dval < 0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE;
-}
-
-
-ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
-{
- if (compare_function(result, op1, op2 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- if (result->type == IS_LONG) {
- result->type = IS_BOOL;
- if (result->value.lval <= 0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
- }
- if (result->type == IS_DOUBLE) {
- result->type = IS_BOOL;
- if (result->value.dval <= 0) {
- result->value.lval = 1;
- } else {
- result->value.lval = 0;
- }
- return SUCCESS;
- }
- zend_error(E_ERROR, "Unsupported operand types");
- return FAILURE;
-}
-
-
-#define LOWER_CASE 1
-#define UPPER_CASE 2
-#define NUMERIC 3
-
-
-static void increment_string(zval *str)
-{
- int carry=0;
- int pos=str->value.str.len-1;
- char *s=str->value.str.val;
- char *t;
- int last=0; /* Shut up the compiler warning */
- int ch;
-
- if (str->value.str.len == 0) {
- STR_FREE(str->value.str.val);
- str->value.str.val = estrndup("1", sizeof("1")-1);
- str->value.str.len = 1;
- return;
- }
-
- while (pos >= 0) {
- ch = s[pos];
- if (ch >= 'a' && ch <= 'z') {
- if (ch == 'z') {
- s[pos] = 'a';
- carry=1;
- } else {
- s[pos]++;
- carry=0;
- }
- last=LOWER_CASE;
- } else if (ch >= 'A' && ch <= 'Z') {
- if (ch == 'Z') {
- s[pos] = 'A';
- carry=1;
- } else {
- s[pos]++;
- carry=0;
- }
- last=UPPER_CASE;
- } else if (ch >= '0' && ch <= '9') {
- if (ch == '9') {
- s[pos] = '0';
- carry=1;
- } else {
- s[pos]++;
- carry=0;
- }
- last = NUMERIC;
- } else {
- carry=0;
- break;
- }
- if (carry == 0) {
- break;
- }
- pos--;
- }
-
- if (carry) {
- t = (char *) emalloc(str->value.str.len+1+1);
- memcpy(t+1, str->value.str.val, str->value.str.len);
- str->value.str.len++;
- t[str->value.str.len] = '\0';
- switch (last) {
- case NUMERIC:
- t[0] = '1';
- break;
- case UPPER_CASE:
- t[0] = 'A';
- break;
- case LOWER_CASE:
- t[0] = 'a';
- break;
- }
- STR_FREE(str->value.str.val);
- str->value.str.val = t;
- }
-}
-
-
-ZEND_API int increment_function(zval *op1)
-{
- switch (op1->type) {
- case IS_LONG:
- if(op1->value.lval == LONG_MAX) {
- /* switch to double */
- double d = (double)op1->value.lval;
- ZVAL_DOUBLE(op1, d+1);
- } else {
- op1->value.lval++;
- }
- break;
- case IS_DOUBLE:
- op1->value.dval = op1->value.dval + 1;
- break;
- case IS_NULL:
- op1->value.lval = 1;
- op1->type = IS_LONG;
- break;
- case IS_STRING: {
- long lval;
- double dval;
- char *strval = op1->value.str.val;
-
- switch (is_numeric_string(strval, op1->value.str.len, &lval, &dval, 0)) {
- case IS_LONG:
- if(lval == LONG_MAX) {
- /* switch to double */
- double d = (double)lval;
- ZVAL_DOUBLE(op1, d+1);
- } else {
- op1->value.lval = lval+1;
- op1->type = IS_LONG;
- }
- efree(strval);
- break;
- case IS_DOUBLE:
- op1->value.dval = dval+1;
- op1->type = IS_DOUBLE;
- efree(strval);
- break;
-#if 0
- case FLAG_IS_BC:
- /* Not implemented */
-#endif
- default:
- /* Perl style string increment */
- increment_string(op1);
- break;
- }
- }
- break;
- default:
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int decrement_function(zval *op1)
-{
- long lval;
-
- switch (op1->type) {
- case IS_LONG:
- if(op1->value.lval == LONG_MIN) {
- double d = (double)op1->value.lval;
- ZVAL_DOUBLE(op1, d-1);
- } else {
- op1->value.lval--;
- }
- break;
- case IS_DOUBLE:
- op1->value.dval = op1->value.dval - 1;
- break;
- case IS_STRING: /* Like perl we only support string increment */
- if (op1->value.str.len == 0) { /* consider as 0 */
- STR_FREE(op1->value.str.val);
- op1->value.lval = -1;
- op1->type = IS_LONG;
- break;
- } else if (is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, NULL, 0)==IS_LONG) { /* long */
- STR_FREE(op1->value.str.val);
- if(lval == LONG_MIN) {
- double d = (double)lval;
- ZVAL_DOUBLE(op1, d-1);
- } else {
- op1->value.lval = lval-1;
- op1->type = IS_LONG;
- }
- break;
- }
- break;
- default:
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-
-ZEND_API int zval_is_true(zval *op)
-{
- convert_to_boolean(op);
- return (op->value.lval ? 1 : 0);
-}
-
-
-ZEND_API void zend_str_tolower(char *str, unsigned int length)
-{
- register char *p=str, *end=p+length;
-
- while (p<end) {
- *p = tolower(*p);
- p++;
- }
-}
-
-
-ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2)
-{
- int retval;
-
- retval = memcmp(s1, s2, MIN(len1, len2));
- if (!retval) {
- return (len1 - len2);
- } else {
- return retval;
- }
-}
-
-ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length)
-{
- int retval;
-
- retval = memcmp(s1, s2, MIN(length, MIN(len1, len2)));
- if (!retval) {
- return (MIN(length, len1) - MIN(length, len2));
- } else {
- return retval;
- }
-}
-
-
-ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2)
-{
- int len;
- int c1, c2;
-
- len = MIN(len1, len2);
-
- while (len--) {
- c1 = tolower(*s1++);
- c2 = tolower(*s2++);
- if (c1 != c2) {
- return c1 - c2;
- }
- }
-
- return len1 - len2;
-}
-
-
-ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length)
-{
- int len;
- int c1, c2;
-
- len = MIN(length, MIN(len1, len2));
-
- while (len--) {
- c1 = tolower(*s1++);
- c2 = tolower(*s2++);
- if (c1 != c2) {
- return c1 - c2;
- }
- }
-
- return MIN(length, len1) - MIN(length, len2);
-}
-
-
-ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2)
-{
- return zend_binary_strcmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len);
-}
-
-ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3)
-{
- return zend_binary_strncmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len, s3->value.lval);
-}
-
-
-ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2)
-{
- return zend_binary_strcasecmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len);
-}
-
-
-ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3)
-{
- return zend_binary_strncasecmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len, s3->value.lval);
-}
-
-
-ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
-{
- int ret1, ret2;
- long lval1, lval2;
- double dval1, dval2;
-
- if ((ret1=is_numeric_string(s1->value.str.val, s1->value.str.len, &lval1, &dval1, 0)) &&
- (ret2=is_numeric_string(s2->value.str.val, s2->value.str.len, &lval2, &dval2, 0))) {
-#if 0&&WITH_BCMATH
- if ((ret1==FLAG_IS_BC) || (ret2==FLAG_IS_BC)) {
- bc_num first, second;
-
- /* use the BC math library to compare the numbers */
- init_num(&first);
- init_num(&second);
- str2num(&first, s1->value.str.val, 100); /* this scale should do */
- str2num(&second, s2->value.str.val, 100); /* ditto */
- result->value.lval = bc_compare(first, second);
- result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
- result->type = IS_LONG;
- free_num(&first);
- free_num(&second);
- } else
-#endif
- if ((ret1==IS_DOUBLE) || (ret2==IS_DOUBLE)) {
- if (ret1!=IS_DOUBLE) {
- dval1 = strtod(s1->value.str.val, NULL);
- } else if (ret2!=IS_DOUBLE) {
- dval2 = strtod(s2->value.str.val, NULL);
- }
- result->value.dval = dval1 - dval2;
- result->value.lval = ZEND_NORMALIZE_BOOL(result->value.dval);
- result->type = IS_LONG;
- } else { /* they both have to be long's */
- result->value.lval = lval1 - lval2;
- result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
- result->type = IS_LONG;
- }
- } else {
- result->value.lval = zend_binary_zval_strcmp(s1, s2);
- result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
- result->type = IS_LONG;
- }
- return;
-}
-
-
-static int hash_zval_compare_function(const zval **z1, const zval **z2 TSRMLS_DC)
-{
- zval result;
-
- if (compare_function(&result, (zval *) *z1, (zval *) *z2 TSRMLS_CC)==FAILURE) {
- return 1;
- }
- return result.value.lval;
-}
-
-
-
-ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC)
-{
- result->type = IS_LONG;
- result->value.lval = zend_hash_compare(ht1, ht2, (compare_func_t) hash_zval_compare_function, 0 TSRMLS_CC);
-}
-
-
-ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC)
-{
- zend_compare_symbol_tables(result, a1->value.ht, a2->value.ht TSRMLS_CC);
-}
-
-
-ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC)
-{
- if (Z_OBJCE_P(o1) != Z_OBJCE_P(o2)) {
- result->value.lval = 1; /* Comparing objects of different types is pretty much meaningless */
- result->type = IS_LONG;
- return;
- }
- zend_compare_symbol_tables(result, Z_OBJPROP_P(o1), Z_OBJPROP_P(o2) TSRMLS_CC);
-}
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
deleted file mode 100644
index 9566c60995..0000000000
--- a/Zend/zend_operators.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_OPERATORS_H
-#define ZEND_OPERATORS_H
-
-#include <errno.h>
-#include <math.h>
-
-#ifdef HAVE_IEEEFP_H
-#include <ieeefp.h>
-#endif
-
-
-#if 0&&WITH_BCMATH
-#include "ext/bcmath/libbcmath/src/bcmath.h"
-#endif
-
-#define MAX_LENGTH_OF_LONG 18
-#define MAX_LENGTH_OF_DOUBLE 32
-
-ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int boolean_not_function(zval *result, zval *op1 TSRMLS_DC);
-ZEND_API int bitwise_not_function(zval *result, zval *op1 TSRMLS_DC);
-ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-
-ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int is_not_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-
-static inline int is_numeric_string(char *str, int length, long *lval, double *dval, zend_bool allow_errors)
-{
- long local_lval;
- double local_dval;
- char *end_ptr_long, *end_ptr_double;
- int conv_base=10;
-
- if (!length) {
- return 0;
- }
-
- /* handle hex numbers */
- if (length>=2 && str[0]=='0' && (str[1]=='x' || str[1]=='X')) {
- conv_base=16;
- }
- errno=0;
- local_lval = strtol(str, &end_ptr_long, conv_base);
- if (errno!=ERANGE) {
- if (end_ptr_long == str+length) { /* integer string */
- if (lval) {
- *lval = local_lval;
- }
- return IS_LONG;
- }
- } else {
- end_ptr_long=NULL;
- }
-
- if (conv_base==16) { /* hex string, under UNIX strtod() messes it up */
- return 0;
- }
-
- errno=0;
- local_dval = strtod(str, &end_ptr_double);
- if (errno!=ERANGE) {
- if (end_ptr_double == str+length) { /* floating point string */
- if (! zend_finite(local_dval)) {
- /* "inf","nan" and maybe other weird ones */
- return 0;
- }
-
- if (dval) {
- *dval = local_dval;
- }
-#if 0&&WITH_BCMATH
- if (length>16) {
- register char *ptr=str, *end=str+length;
-
- while (ptr<end) {
- switch(*ptr++) {
- case 'e':
- case 'E':
- /* scientific notation, not handled by the BC library */
- return IS_DOUBLE;
- break;
- default:
- break;
- }
- }
- return FLAG_IS_BC;
- } else {
- return IS_DOUBLE;
- }
-#else
- return IS_DOUBLE;
-#endif
- }
- } else {
- end_ptr_double=NULL;
- }
- if (allow_errors) {
- if (end_ptr_double>end_ptr_long && dval) {
- *dval = local_dval;
- return IS_DOUBLE;
- } else if (end_ptr_long && lval) {
- *lval = local_lval;
- return IS_LONG;
- }
- }
- return 0;
-}
-
-ZEND_API int increment_function(zval *op1);
-ZEND_API int decrement_function(zval *op2);
-
-BEGIN_EXTERN_C()
-ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC);
-ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC);
-ZEND_API void convert_to_long(zval *op);
-ZEND_API void convert_to_double(zval *op);
-ZEND_API void convert_to_long_base(zval *op, int base);
-ZEND_API void convert_to_null(zval *op);
-ZEND_API void convert_to_boolean(zval *op);
-ZEND_API void convert_to_array(zval *op);
-ZEND_API void convert_to_object(zval *op);
-ZEND_API void multi_convert_to_long_ex(int argc, ...);
-ZEND_API void multi_convert_to_double_ex(int argc, ...);
-ZEND_API void multi_convert_to_string_ex(int argc, ...);
-ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2);
-ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2);
-#define convert_to_string(op) _convert_to_string((op) ZEND_FILE_LINE_CC)
-
-ZEND_API double zend_string_to_double(const char *number, zend_uint length);
-END_EXTERN_C()
-
-ZEND_API int zval_is_true(zval *op);
-ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-
-ZEND_API void zend_str_tolower(char *str, unsigned int length);
-ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);
-ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
-ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2);
-ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3);
-ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2);
-ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length);
-ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2);
-ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length);
-
-ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2);
-ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC);
-ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC);
-ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC);
-
-ZEND_API int zend_atoi(const char *str, int str_len);
-
-#define convert_to_ex_master(ppzv, lower_type, upper_type) \
- if ((*ppzv)->type!=IS_##upper_type) { \
- if (!(*ppzv)->is_ref) { \
- SEPARATE_ZVAL(ppzv); \
- } \
- convert_to_##lower_type(*ppzv); \
- }
-
-#define convert_to_writable_ex_master(ppzv, lower_type, upper_type) \
- if ((*ppzv)->type!=IS_##upper_type) { \
- SEPARATE_ZVAL(ppzv); \
- convert_to_##lower_type(*ppzv); \
- }
-
-
-#define convert_to_boolean_ex(ppzv) convert_to_ex_master(ppzv, boolean, BOOL)
-#define convert_to_long_ex(ppzv) convert_to_ex_master(ppzv, long, LONG)
-#define convert_to_double_ex(ppzv) convert_to_ex_master(ppzv, double, DOUBLE)
-#define convert_to_string_ex(ppzv) convert_to_ex_master(ppzv, string, STRING)
-#define convert_to_array_ex(ppzv) convert_to_ex_master(ppzv, array, ARRAY)
-#define convert_to_object_ex(ppzv) convert_to_ex_master(ppzv, object, OBJECT)
-#define convert_to_null_ex(ppzv) convert_to_ex_master(ppzv, null, NULL)
-
-#define convert_to_writable_boolean_ex(ppzv) convert_to_writable_ex_master(ppzv, boolean, BOOL)
-#define convert_to_writable_long_ex(ppzv) convert_to_writable_ex_master(ppzv, long, LONG)
-#define convert_to_writable_double_ex(ppzv) convert_to_writable_ex_master(ppzv, double, DOUBLE)
-#define convert_to_writable_string_ex(ppzv) convert_to_writable_ex_master(ppzv, string, STRING)
-#define convert_to_writable_array_ex(ppzv) convert_to_writable_ex_master(ppzv, array, ARRAY)
-#define convert_to_writable_object_ex(ppzv) convert_to_writable_ex_master(ppzv, object, OBJECT)
-#define convert_to_writable_null_ex(ppzv) convert_to_writable_ex_master(ppzv, null, NULL)
-
-
-#define convert_scalar_to_number_ex(ppzv) \
- if ((*ppzv)->type!=IS_LONG && (*ppzv)->type!=IS_DOUBLE) { \
- if (!(*ppzv)->is_ref) { \
- SEPARATE_ZVAL(ppzv); \
- } \
- convert_scalar_to_number(*ppzv TSRMLS_CC); \
- }
-
-
-#define Z_LVAL(zval) (zval).value.lval
-#define Z_BVAL(zval) ((zend_bool)(zval).value.lval)
-#define Z_DVAL(zval) (zval).value.dval
-#define Z_STRVAL(zval) (zval).value.str.val
-#define Z_STRLEN(zval) (zval).value.str.len
-#define Z_ARRVAL(zval) (zval).value.ht
-#define Z_OBJ(zval) (zval).value.obj.handlers->get_address((zval).value.obj.handle)
-#define Z_OBJPROP(zval) Z_OBJ(zval)->properties
-#define Z_OBJCE(zval) Z_OBJ(zval)->ce
-#define Z_RESVAL(zval) (zval).value.lval
-
-#define Z_LVAL_P(zval_p) Z_LVAL(*zval_p)
-#define Z_BVAL_P(zval_p) Z_BVAL(*zval_p)
-#define Z_DVAL_P(zval_p) Z_DVAL(*zval_p)
-#define Z_STRVAL_P(zval_p) Z_STRVAL(*zval_p)
-#define Z_STRLEN_P(zval_p) Z_STRLEN(*zval_p)
-#define Z_ARRVAL_P(zval_p) Z_ARRVAL(*zval_p)
-#define Z_OBJ_P(zval_p) Z_OBJ(*zval_p)
-#define Z_OBJPROP_P(zval_p) Z_OBJPROP(*zval_p)
-#define Z_OBJCE_P(zval_p) Z_OBJCE(*zval_p)
-#define Z_RESVAL_P(zval_p) Z_RESVAL(*zval_p)
-
-#define Z_LVAL_PP(zval_pp) Z_LVAL(**zval_pp)
-#define Z_BVAL_PP(zval_pp) Z_BVAL(**zval_pp)
-#define Z_DVAL_PP(zval_pp) Z_DVAL(**zval_pp)
-#define Z_STRVAL_PP(zval_pp) Z_STRVAL(**zval_pp)
-#define Z_STRLEN_PP(zval_pp) Z_STRLEN(**zval_pp)
-#define Z_ARRVAL_PP(zval_pp) Z_ARRVAL(**zval_pp)
-#define Z_OBJ_PP(zval_pp) Z_OBJ(**zval_pp)
-#define Z_OBJPROP_PP(zval_pp) Z_OBJPROP(**zval_pp)
-#define Z_OBJCE_PP(zval_pp) Z_OBJCE(**zval_pp)
-#define Z_RESVAL_PP(zval_pp) Z_RESVAL(**zval_pp)
-
-#define Z_TYPE(zval) (zval).type
-#define Z_TYPE_P(zval_p) Z_TYPE(*zval_p)
-#define Z_TYPE_PP(zval_pp) Z_TYPE(**zval_pp)
-
-#endif
diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c
deleted file mode 100644
index 2b4d27ef8e..0000000000
--- a/Zend/zend_ptr_stack.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_ptr_stack.h"
-#ifdef HAVE_STDARG_H
-# include <stdarg.h>
-#endif
-
-ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack)
-{
- stack->top_element = stack->elements = (void **) emalloc(sizeof(void *)*PTR_STACK_BLOCK_SIZE);
- stack->max = PTR_STACK_BLOCK_SIZE;
- stack->top = 0;
-}
-
-
-ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...)
-{
- va_list ptr;
- void *elem;
-
- if (stack->top+count > stack->max) { /* we need to allocate more memory */
- stack->max *= 2;
- stack->max += count;
- stack->elements = (void **) erealloc(stack->elements, (sizeof(void *) * (stack->max)));
- stack->top_element = stack->elements+stack->top;
- }
- va_start(ptr, count);
- while (count>0) {
- elem = va_arg(ptr, void *);
- stack->top++;
- *(stack->top_element++) = elem;
- count--;
- }
- va_end(ptr);
-}
-
-
-ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...)
-{
- va_list ptr;
- void **elem;
-
- va_start(ptr, count);
- while (count>0) {
- elem = va_arg(ptr, void **);
- *elem = *(--stack->top_element);
- stack->top--;
- count--;
- }
- va_end(ptr);
-}
-
-
-
-ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack)
-{
- if (stack->elements) {
- efree(stack->elements);
- }
-}
-
-
-ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *))
-{
- int i = stack->top;
-
- while (--i >= 0) {
- func(stack->elements[i]);
- }
-}
-
-
-ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements)
-{
- zend_ptr_stack_apply(stack, func);
- if (free_elements) {
- int i = stack->top;
-
- while (--i >= 0) {
- efree(stack->elements[i]);
- }
- }
- stack->top = 0;
- stack->top_element = stack->elements;
-}
-
-
-ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack)
-{
- return stack->top;
-}
diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h
deleted file mode 100644
index 39f59a88f3..0000000000
--- a/Zend/zend_ptr_stack.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_PTR_STACK_H
-#define ZEND_PTR_STACK_H
-
-typedef struct _zend_ptr_stack {
- int top, max;
- void **elements;
- void **top_element;
-} zend_ptr_stack;
-
-
-#define PTR_STACK_BLOCK_SIZE 64
-
-ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack);
-ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...);
-ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...);
-ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack);
-ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *));
-ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements);
-ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack);
-
-static inline void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr)
-{
- if (stack->top >= stack->max) { /* we need to allocate more memory */
- stack->elements = (void **) erealloc(stack->elements, (sizeof(void *) * (stack->max *= 2 )));
- stack->top_element = stack->elements+stack->top;
- }
- stack->top++;
- *(stack->top_element++) = ptr;
-}
-
-static inline void *zend_ptr_stack_pop(zend_ptr_stack *stack)
-{
- stack->top--;
- return *(--stack->top_element);
-}
-
-
-#endif /* ZEND_PTR_STACK_H */
diff --git a/Zend/zend_qsort.c b/Zend/zend_qsort.c
deleted file mode 100644
index b148b64939..0000000000
--- a/Zend/zend_qsort.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#include "zend.h"
-
-#include <limits.h>
-
-#define QSORT_STACK_SIZE (sizeof(size_t) * CHAR_BIT)
-
-static void _zend_qsort_swap(void *a, void *b, size_t siz)
-{
- register size_t i;
- register int t_i;
- register char t_c;
-
- for (i = sizeof(int); i <= siz; i += sizeof(int)) {
- t_i = *(int *) a;
- *((int *) a)++ = *(int *) b;
- *((int *) b)++ = t_i;
- }
-
- for (i = i - sizeof(int) + 1; i <= siz; ++i) {
- t_c = *(char *) a;
- *((char *) a)++ = *(char *) b;
- *((char *) b)++ = t_c;
- }
-}
-
-ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC)
-{
- void *begin_stack[QSORT_STACK_SIZE];
- void *end_stack[QSORT_STACK_SIZE];
- register char *begin;
- register char *end;
- register char *seg1;
- register char *seg2;
- register char *seg2p;
- register int loop;
- uint offset;
-
- begin_stack[0] = (char *) base;
- end_stack[0] = (char *) base + ((nmemb - 1) * siz);
-
- for (loop = 0; loop >= 0; --loop) {
- begin = begin_stack[loop];
- end = end_stack[loop];
-
- while (begin < end) {
- offset = (end - begin) >> 1;
- _zend_qsort_swap(begin, begin + (offset - (offset % siz)), siz);
-
- seg1 = begin + siz;
- seg2 = end;
-
- while (1) {
- for (; seg1 < seg2 && compare(begin, seg1 TSRMLS_CC) > 0;
- seg1 += siz);
-
- for (; seg2 >= seg1 && compare(seg2, begin TSRMLS_CC) > 0;
- seg2 -= siz);
-
- if (seg1 >= seg2)
- break;
-
- _zend_qsort_swap(seg1, seg2, siz);
-
- seg1 += siz;
- seg2 -= siz;
- }
-
- _zend_qsort_swap(begin, seg2, siz);
-
- seg2p = seg2;
-
- if ((seg2p - begin) <= (end - seg2p)) {
- if ((seg2p + siz) < end) {
- begin_stack[loop] = seg2p + siz;
- end_stack[loop++] = end;
- }
- end = seg2p - siz;
- }
- else {
- if ((seg2p - siz) > begin) {
- begin_stack[loop] = begin;
- end_stack[loop++] = seg2p - siz;
- }
- begin = seg2p + siz;
- }
- }
- }
-}
diff --git a/Zend/zend_qsort.h b/Zend/zend_qsort.h
deleted file mode 100644
index 8049988ec0..0000000000
--- a/Zend/zend_qsort.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef ZEND_QSORT_H
-#define ZEND_QSORT_H
-
-BEGIN_EXTERN_C()
-ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC);
-END_EXTERN_C()
-
-#endif /* ZEND_QSORT_H */
diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c
deleted file mode 100644
index 359f2fcf52..0000000000
--- a/Zend/zend_sprintf.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdio.h>
-
-#include "zend.h"
-
-#ifdef HAVE_STDARG_H
-# include <stdarg.h>
-#endif
-
-#if ZEND_BROKEN_SPRINTF
-int zend_sprintf(char *buffer, const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
- vsprintf(buffer, format, args);
- va_end(args);
-
- return strlen(buffer);
-}
-#endif
diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c
deleted file mode 100644
index 2180fef7c2..0000000000
--- a/Zend/zend_stack.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "zend.h"
-#include "zend_stack.h"
-
-ZEND_API int zend_stack_init(zend_stack *stack)
-{
- stack->top = 0;
- stack->elements = (void **) emalloc(sizeof(void **) * STACK_BLOCK_SIZE);
- if (!stack->elements) {
- return FAILURE;
- } else {
- stack->max = STACK_BLOCK_SIZE;
- return SUCCESS;
- }
-}
-
-ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size)
-{
- if (stack->top >= stack->max) { /* we need to allocate more memory */
- stack->elements = (void **) erealloc(stack->elements,
- (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)));
- if (!stack->elements) {
- return FAILURE;
- }
- }
- stack->elements[stack->top] = (void *) emalloc(size);
- memcpy(stack->elements[stack->top], element, size);
- return stack->top++;
-}
-
-
-ZEND_API int zend_stack_top(zend_stack *stack, void **element)
-{
- if (stack->top > 0) {
- *element = stack->elements[stack->top - 1];
- return SUCCESS;
- } else {
- *element = NULL;
- return FAILURE;
- }
-}
-
-
-ZEND_API int zend_stack_del_top(zend_stack *stack)
-{
- if (stack->top > 0) {
- efree(stack->elements[--stack->top]);
- }
- return SUCCESS;
-}
-
-
-ZEND_API int zend_stack_int_top(zend_stack *stack)
-{
- int *e;
-
- if (zend_stack_top(stack, (void **) &e) == FAILURE) {
- return FAILURE; /* this must be a negative number, since negative numbers can't be address numbers */
- } else {
- return *e;
- }
-}
-
-
-ZEND_API int zend_stack_is_empty(zend_stack *stack)
-{
- if (stack->top == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-ZEND_API int zend_stack_destroy(zend_stack *stack)
-{
- register int i;
-
- for (i = 0; i < stack->top; i++) {
- efree(stack->elements[i]);
- }
-
- if (stack->elements) {
- efree(stack->elements);
- }
- return SUCCESS;
-}
-
-
-ZEND_API void **zend_stack_base(zend_stack *stack)
-{
- return stack->elements;
-}
-
-
-ZEND_API int zend_stack_count(zend_stack *stack)
-{
- return stack->top;
-}
-
-
-ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element))
-{
- int i;
-
- switch (type) {
- case ZEND_STACK_APPLY_TOPDOWN:
- for (i=stack->top-1; i>=0; i--) {
- if (apply_function(stack->elements[i])) {
- break;
- }
- }
- break;
- case ZEND_STACK_APPLY_BOTTOMUP:
- for (i=0; i<stack->top; i++) {
- if (apply_function(stack->elements[i])) {
- break;
- }
- }
- break;
- }
-}
-
-
-ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg)
-{
- int i;
-
- switch (type) {
- case ZEND_STACK_APPLY_TOPDOWN:
- for (i=stack->top-1; i>=0; i--) {
- if (apply_function(stack->elements[i], arg)) {
- break;
- }
- }
- break;
- case ZEND_STACK_APPLY_BOTTOMUP:
- for (i=0; i<stack->top; i++) {
- if (apply_function(stack->elements[i], arg)) {
- break;
- }
- }
- break;
- }
-}
diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h
deleted file mode 100644
index 24ae956565..0000000000
--- a/Zend/zend_stack.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_STACK_H
-#define ZEND_STACK_H
-
-typedef struct _zend_stack {
- int top, max;
- void **elements;
-} zend_stack;
-
-
-#define STACK_BLOCK_SIZE 64
-
-ZEND_API int zend_stack_init(zend_stack *stack);
-ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size);
-ZEND_API int zend_stack_top(zend_stack *stack, void **element);
-ZEND_API int zend_stack_del_top(zend_stack *stack);
-ZEND_API int zend_stack_int_top(zend_stack *stack);
-ZEND_API int zend_stack_is_empty(zend_stack *stack);
-ZEND_API int zend_stack_destroy(zend_stack *stack);
-ZEND_API void **zend_stack_base(zend_stack *stack);
-ZEND_API int zend_stack_count(zend_stack *stack);
-ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element));
-ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg);
-
-#define ZEND_STACK_APPLY_TOPDOWN 1
-#define ZEND_STACK_APPLY_BOTTOMUP 2
-
-#endif /* ZEND_STACK_H */
diff --git a/Zend/zend_static_allocator.c b/Zend/zend_static_allocator.c
deleted file mode 100644
index 2188281311..0000000000
--- a/Zend/zend_static_allocator.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#include <stdlib.h>
-
-#include "zend_static_allocator.h"
-
-/* Not checking emalloc() and erealloc() return values as they are supposed to bailout */
-
-inline static void block_init(Block *block, zend_uint block_size)
-{
- block->pos = block->bp = (char *) emalloc(block_size);
- block->end = block->bp + block_size;
-}
-
-inline static char *block_allocate(Block *block, zend_uint size)
-{
- char *retval = block->pos;
- if ((block->pos += size) >= block->end) {
- return (char *)NULL;
- }
- return retval;
-}
-
-inline static void block_destroy(Block *block)
-{
- efree(block->bp);
-}
-
-void static_allocator_init(StaticAllocator *sa)
-{
- sa->Blocks = (Block *) emalloc(sizeof(Block));
- block_init(sa->Blocks, ALLOCATOR_BLOCK_SIZE);
- sa->num_blocks = 1;
- sa->current_block = 0;
-}
-
-char *static_allocator_allocate(StaticAllocator *sa, zend_uint size)
-{
- char *retval;
-
- retval = block_allocate(&sa->Blocks[sa->current_block], size);
- if (retval) {
- return retval;
- }
- sa->Blocks = (Block *) erealloc(sa->Blocks, ++sa->num_blocks);
- sa->current_block++;
- block_init(&sa->Blocks[sa->current_block], (size > ALLOCATOR_BLOCK_SIZE) ? size : ALLOCATOR_BLOCK_SIZE);
- retval = block_allocate(&sa->Blocks[sa->current_block], size);
- return retval;
-}
-
-void static_allocator_destroy(StaticAllocator *sa)
-{
- zend_uint i;
-
- for (i=0; i<sa->num_blocks; i++) {
- block_free(&sa->Blocks[i]);
- }
- efree(sa->Blocks);
-}
diff --git a/Zend/zend_static_allocator.h b/Zend/zend_static_allocator.h
deleted file mode 100644
index 177f0d245d..0000000000
--- a/Zend/zend_static_allocator.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef ZEND_STATIC_ALLOCATOR_H
-#define ZEND_STATIC_ALLOCATOR_H
-
-#define ALLOCATOR_BLOCK_SIZE 400000
-
-/* Temporary */
-typedef unsigned int zend_uint;
-#define emalloc(s) malloc(s)
-#define efree(p) free(p)
-
-typedef struct _Block {
- char *bp;
- char *pos;
- char *end;
-} Block;
-
-typedef struct _StaticAllocator {
- Block *Blocks;
- zend_uint num_blocks;
- zend_uint current_block;
-} StaticAllocator;
-
-void static_allocator_init(StaticAllocator *sa);
-char *static_allocator_allocate(StaticAllocator *sa, zend_uint size);
-void static_allocator_destroy(StaticAllocator *sa);
-
-#endif /* ZEND_STATIC_ALLOCATOR_H */
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
deleted file mode 100644
index 2b28f41e7a..0000000000
--- a/Zend/zend_variables.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include <stdio.h>
-#include "zend.h"
-#include "zend_API.h"
-#include "zend_globals.h"
-#include "zend_constants.h"
-#include "zend_list.h"
-
-ZEND_API char *empty_string = ""; /* in order to save emalloc() and efree() time for
- * empty strings (usually used to denote empty
- * return values in failed functions).
- * The macro STR_FREE() will not efree() it.
- */
-
-
-ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
-{
- if (zvalue->type==IS_LONG) {
- return;
- }
- switch(zvalue->type) {
- case IS_STRING:
- case IS_CONSTANT:
- CHECK_ZVAL_STRING_REL(zvalue);
- STR_FREE_REL(zvalue->value.str.val);
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY: {
- TSRMLS_FETCH();
-
- if (zvalue->value.ht && (zvalue->value.ht != &EG(symbol_table))) {
- zend_hash_destroy(zvalue->value.ht);
- FREE_HASHTABLE(zvalue->value.ht);
- }
- }
- break;
- case IS_OBJECT:
- zvalue->value.obj.handlers->del_ref(zvalue->value.obj.handle);
- break;
- case IS_RESOURCE: {
- TSRMLS_FETCH();
-
- /* destroy resource */
- zend_list_delete(zvalue->value.lval);
- }
- break;
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_NULL:
- default:
- return;
- break;
- }
-}
-
-
-ZEND_API void zval_add_ref(zval **p)
-{
- (*p)->refcount++;
-}
-
-
-ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
-{
- switch (zvalue->type) {
- case IS_RESOURCE: {
- TSRMLS_FETCH();
-
- zend_list_addref(zvalue->value.lval);
- }
- break;
- case IS_BOOL:
- case IS_LONG:
- case IS_NULL:
- break;
- case IS_CONSTANT:
- case IS_STRING:
- if (zvalue->value.str.val) {
- if (zvalue->value.str.len==0) {
- zvalue->value.str.val = empty_string;
- return SUCCESS;
- }
- }
- CHECK_ZVAL_STRING_REL(zvalue);
- zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len);
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY: {
- zval *tmp;
- HashTable *original_ht = zvalue->value.ht;
- TSRMLS_FETCH();
-
- if (zvalue->value.ht == &EG(symbol_table)) {
- return SUCCESS; /* do nothing */
- }
- ALLOC_HASHTABLE_REL(zvalue->value.ht);
- zend_hash_init(zvalue->value.ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(zvalue->value.ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- }
- break;
- case IS_OBJECT:
-#if 0
- zvalue->value.obj = zvalue->value.obj.handlers->clone_obj(zvalue->value.obj.handle);
-#else
- zvalue->value.obj.handlers->add_ref(zvalue->value.obj.handle);
-#endif
- break;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int zval_persist(zval *zvalue TSRMLS_DC)
-{
- switch (zvalue->type) {
- case IS_OBJECT:
- case IS_RESOURCE:
- return FAILURE; /* resources and objects cannot be persisted */
- break;
- case IS_BOOL:
- case IS_LONG:
- case IS_NULL:
- break;
- case IS_CONSTANT:
- case IS_STRING:
- if (zvalue->value.str.val) {
- if (zvalue->value.str.len==0) {
- zvalue->value.str.val = empty_string;
- return SUCCESS;
- }
- }
- persist_alloc(zvalue->value.str.val);
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY:
- persist_alloc(zvalue->value.ht);
- zend_hash_apply(zvalue->value.ht, (apply_func_t) zval_persist TSRMLS_CC);
- break;
- }
- return SUCCESS;
-}
-
-
-ZEND_API int zend_print_variable(zval *var)
-{
- return zend_print_zval(var, 0);
-}
-
-
-#if ZEND_DEBUG
-ZEND_API int _zval_copy_ctor_wrapper(zval *zvalue)
-{
- return zval_copy_ctor(zvalue);
-}
-
-
-ZEND_API void _zval_dtor_wrapper(zval *zvalue)
-{
- zval_dtor(zvalue);
-}
-
-
-
-ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr)
-{
- zval_ptr_dtor(zval_ptr);
-}
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h
deleted file mode 100644
index fa4c192c13..0000000000
--- a/Zend/zend_variables.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Zend Engine |
- +----------------------------------------------------------------------+
- | Copyright (c) 1998-2001 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 |
- | license@zend.com so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef ZEND_VARIABLES_H
-#define ZEND_VARIABLES_H
-
-
-ZEND_API int zend_print_variable(zval *var);
-
-BEGIN_EXTERN_C()
-ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC);
-ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC);
-ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC);
-#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
-#define zval_dtor(zvalue) _zval_dtor((zvalue) ZEND_FILE_LINE_CC)
-#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC)
-
-ZEND_API int zval_persist(zval *zvalue TSRMLS_DC);
-
-#if ZEND_DEBUG
-ZEND_API int _zval_copy_ctor_wrapper(zval *zvalue);
-ZEND_API void _zval_dtor_wrapper(zval *zvalue);
-ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr);
-#define zval_copy_ctor_wrapper _zval_copy_ctor_wrapper
-#define zval_dtor_wrapper _zval_dtor_wrapper
-#define zval_ptr_dtor_wrapper _zval_ptr_dtor_wrapper
-#else
-#define zval_copy_ctor_wrapper _zval_copy_ctor
-#define zval_dtor_wrapper _zval_dtor
-#define zval_ptr_dtor_wrapper _zval_ptr_dtor
-#endif
-
-END_EXTERN_C()
-
-
-ZEND_API void zval_add_ref(zval **p);
-
-#define ZVAL_DESTRUCTOR (void (*)(void *)) zval_dtor_wrapper
-#define ZVAL_PTR_DTOR (void (*)(void *)) zval_ptr_dtor_wrapper
-#define ZVAL_COPY_CTOR (void (*)(void *)) zval_copy_ctor_wrapper
-
-#endif
diff --git a/ext/imap/imap.h b/ext/imap/imap.h
deleted file mode 100644
index 914d128316..0000000000
--- a/ext/imap/imap.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _INCLUDED_IMAP_H
-#define _INCLUDED_IMAP_H
-
-#if COMPILE_DL
-#undef HAVE_IMAP
-#define HAVE_IMAP 1
-#endif
-
-#if HAVE_IMAP
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-/* Functions accessable to PHP */
-extern zend_module_entry imap_module_entry;
-#define imap_module_ptr &imap_module_entry
-
-extern PHP_MINIT_FUNCTION(imap);
-extern PHP_RINIT_FUNCTION(imap);
-extern PHP_RSHUTDOWN_FUNCTION(imap);
-PHP_MINFO_FUNCTION(imap);
-PHP_FUNCTION(imap_open);
-PHP_FUNCTION(imap_popen);
-PHP_FUNCTION(imap_reopen);
-PHP_FUNCTION(imap_num_msg);
-PHP_FUNCTION(imap_num_recent);
-PHP_FUNCTION(imap_headers);
-PHP_FUNCTION(imap_headerinfo);
-PHP_FUNCTION(imap_rfc822_parse_headers);
-PHP_FUNCTION(imap_body);
-PHP_FUNCTION(imap_fetchstructure);
-PHP_FUNCTION(imap_fetchbody);
-PHP_FUNCTION(imap_expunge);
-PHP_FUNCTION(imap_delete);
-PHP_FUNCTION(imap_undelete);
-PHP_FUNCTION(imap_check);
-PHP_FUNCTION(imap_close);
-PHP_FUNCTION(imap_mail_copy);
-PHP_FUNCTION(imap_mail_move);
-PHP_FUNCTION(imap_createmailbox);
-PHP_FUNCTION(imap_renamemailbox);
-PHP_FUNCTION(imap_deletemailbox);
-PHP_FUNCTION(imap_listmailbox);
-PHP_FUNCTION(imap_scanmailbox);
-PHP_FUNCTION(imap_subscribe);
-PHP_FUNCTION(imap_unsubscribe);
-PHP_FUNCTION(imap_append);
-PHP_FUNCTION(imap_ping);
-PHP_FUNCTION(imap_base64);
-PHP_FUNCTION(imap_qprint);
-PHP_FUNCTION(imap_8bit);
-PHP_FUNCTION(imap_binary);
-PHP_FUNCTION(imap_mailboxmsginfo);
-PHP_FUNCTION(imap_rfc822_write_address);
-PHP_FUNCTION(imap_rfc822_parse_adrlist);
-PHP_FUNCTION(imap_setflag_full);
-PHP_FUNCTION(imap_clearflag_full);
-PHP_FUNCTION(imap_sort);
-PHP_FUNCTION(imap_fetchheader);
-PHP_FUNCTION(imap_fetchtext);
-PHP_FUNCTION(imap_uid);
-PHP_FUNCTION(imap_msgno);
-PHP_FUNCTION(imap_list);
-PHP_FUNCTION(imap_list_full);
-PHP_FUNCTION(imap_listscan);
-PHP_FUNCTION(imap_lsub);
-PHP_FUNCTION(imap_lsub_full);
-PHP_FUNCTION(imap_create);
-PHP_FUNCTION(imap_rename);
-PHP_FUNCTION(imap_status);
-PHP_FUNCTION(imap_bodystruct);
-PHP_FUNCTION(imap_fetch_overview);
-PHP_FUNCTION(imap_mail_compose);
-PHP_FUNCTION(imap_alerts);
-PHP_FUNCTION(imap_errors);
-PHP_FUNCTION(imap_last_error);
-PHP_FUNCTION(imap_mail);
-PHP_FUNCTION(imap_search);
-PHP_FUNCTION(imap_utf8);
-PHP_FUNCTION(imap_utf7_decode);
-PHP_FUNCTION(imap_utf7_encode);
-PHP_FUNCTION(imap_mime_header_decode);
-#else
-#define imap_module_ptr NULL
-#endif /* HAVE_IMAP */
-
-#endif
-
-
-
-
-
-
-#define phpext_imap_ptr imap_module_ptr
-
-
-
-
-
-
-
-
diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4
deleted file mode 100644
index cf973fe052..0000000000
--- a/ext/pcre/config0.m4
+++ /dev/null
@@ -1,61 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl By default we'll compile and link against the bundled PCRE library
-dnl if DIR is supplied, we'll use that for linking
-
-PHP_ARG_WITH(pcre-regex,for PCRE support,
-[ --without-pcre-regex Do not include Perl Compatible Regular Expressions
- support. Use --with-pcre-regex=DIR to specify DIR
- where PCRE's include and library files are located,
- if not using bundled library.],yes)
-
-if test "$PHP_PCRE_REGEX" != "no"; then
- PHP_EXTENSION(pcre, $ext_shared)
- if test "$PHP_PCRE_REGEX" = "yes"; then
- PCRE_LIBADD=pcrelib/libpcre.la
- PCRE_SHARED_LIBADD=pcrelib/libpcre.la
- PCRE_SUBDIRS=pcrelib
- PHP_SUBST(PCRE_LIBADD)
- PHP_SUBST(PCRE_SUBDIRS)
- AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
- PHP_FAST_OUTPUT($ext_builddir/pcrelib/Makefile)
- LIB_BUILD($ext_builddir/pcrelib,$ext_shared,yes)
- else
- test -f $PHP_PCRE_REGEX/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/include/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX/include
-
- if test -z "$PCRE_INCDIR"; then
- AC_MSG_RESULT(Could not find pcre.h in $PHP_PCRE_REGEX)
- fi
-
- changequote({,})
- pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- changequote([,])
- pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/[^0-9]//g'`
- if test "$pcre_minor_length" -eq 2 ; then
- pcre_minor="$pcre_minor"0
- fi
- pcre_version=$pcre_major$pcre_minor
- if test "$pcre_version" -lt 208; then
- AC_MSG_ERROR(The PCRE extension requires PCRE library version >= 2.08)
- fi
-
- test -f $PHP_PCRE_REGEX/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/lib/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX/lib
-
- if test -z "$PCRE_LIBDIR" ; then
- AC_MSG_ERROR(Could not find libpcre.a in $PHP_PCRE_REGEX)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(pcre, $PCRE_LIBDIR, PCRE_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($PCRE_INCDIR)
- AC_DEFINE(HAVE_PCRE, 1, [ ])
- fi
-fi
-PHP_SUBST(PCRE_SHARED_LIBADD)
-
-AC_CHECK_FUNC(memmove, [], [AC_DEFINE(USE_BCOPY, 1, [ ])])
diff --git a/main/php_realpath.c b/main/php_realpath.c
deleted file mode 100644
index 8c7cef5f86..0000000000
--- a/main/php_realpath.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sander Steffann (sander@steffann.nl) |
- +----------------------------------------------------------------------+
- */
-
-#include "php.h"
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-
-#ifndef MAXSYMLINKS
-#define MAXSYMLINKS 32
-#endif
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
-#endif
-
-char *php_realpath(char *path, char resolved_path[]);
-
-#ifdef PHP_WIN32
-#define IS_SLASH(p) ((p) == '/' || (p) == '\\')
-#else
-#define IS_SLASH(p) ((p) == '/')
-#endif
-
-char *php_realpath(char *path, char resolved_path []) {
- char path_construction[MAXPATHLEN]; /* We build the result in here */
- char *writepos; /* Position to write next char */
-
- char path_copy[MAXPATHLEN]; /* A work-copy of the path */
- char *workpos; /* working position in *path */
-
-#if !defined(PHP_WIN32)
- char buf[MAXPATHLEN]; /* Buffer for readlink */
- int linklength; /* The result from readlink */
-#endif
- int linkcount = 0; /* Count symlinks to avoid loops */
-
- struct stat filestat; /* result from stat */
-
-#ifdef PHP_WIN32
- char *temppos; /* position while counting '.' */
- int dotcount; /* number of '.' */
- int t; /* counter */
-#endif
-
- /* Set the work-position to the beginning of the given path */
- strcpy(path_copy, path);
- workpos = path_copy;
-
-#ifdef PHP_WIN32
- /* Find out where we start - Windows version */
- if (IS_SLASH(*workpos)) {
- /* We start at the root of the current drive */
- /* Get the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- /* We only need the first three chars (for example "C:\") */
- path_construction[3] = 0;
- workpos++;
- } else if (workpos[1] == ':') {
- /* A drive-letter is specified, copy it */
- strncpy(path_construction, path, 2);
- strcat(path_construction, "\\");
- workpos++;
- workpos++;
- } else {
- /* Use the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- strcat(path_construction, "\\");
- }
-#else
- /* Find out where we start - Unix version */
- if (*workpos == '/') {
- /* We start at the root */
- strcpy(path_construction, "/");
- workpos++;
- } else {
- /* Use the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- strcat(path_construction, "/");
- }
-#endif
-
- /* Set the next-char-position */
- writepos = &path_construction[strlen(path_construction)];
-
- /* Go to the end, then stop */
- while(*workpos != 0) {
- /* Strip (back)slashes */
- while(IS_SLASH(*workpos)) workpos++;
-
-#ifdef PHP_WIN32
- /* reset dotcount */
- dotcount = 0;
-
- /* Look for .. */
- if ((workpos[0] == '.') && (workpos[1] != 0)) {
- /* Windows accepts \...\ as \..\..\, \....\ as \..\..\..\, etc */
- /* At least Win98 does */
-
- temppos = workpos;
- while(*temppos++ == '.') {
- dotcount++;
- if (!IS_SLASH(*temppos) && (*temppos != 0) && (*temppos != '.')) {
- /* This is not a /../ component, but a filename that starts with '.' */
- dotcount = 0;
- }
- }
-
- /* Go back dotcount-1 times */
- for (t=0 ; t<(dotcount-1) ; t++) {
- workpos++; /* move to next '.' */
-
- /* Can we still go back? */
- if ((writepos-3) <= path_construction) return NULL;
-
- /* Go back */
- writepos--; /* move to '\' */
- writepos--;
- while(!IS_SLASH(*writepos)) writepos--; /* skip until previous '\\' */
- }
- workpos++;
- }
-
- /* No special case */
- if (dotcount == 0) {
- /* Append */
- while(!IS_SLASH(*workpos) && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
-
- /* Just one '.', go to next element */
- if (dotcount == 1) {
- while(!IS_SLASH(*workpos) && (*workpos != 0)) {
- *workpos++;
- }
-
- /* Avoid double \ in the result */
- writepos--;
- }
-
- /* If it was a directory, append a slash */
- if (IS_SLASH(*workpos)) {
- *writepos++ = *workpos++;
- }
- *writepos = 0;
-#else /* defined(PHP_WIN32) */
- /* Look for .. */
- if ((workpos[0] == '.') && (workpos[1] != 0)) {
- if ((workpos[1] == '.') && ((workpos[2] == '/') || (workpos[2] == 0))) {
- /* One directory back */
- /* Set pointers to right position */
- workpos++; /* move to second '.' */
- workpos++; /* move to '/' */
-
- /* Only apply .. if not in root */
- if ((writepos-1) > path_construction) {
- writepos--; /* move to '/' */
- while(*--writepos != '/') ; /* skip until previous '/' */
- }
- } else {
- if (workpos[1] == '/') {
- /* Found a /./ skip it */
- workpos++; /* move to '/' */
-
- /* Avoid double / in the result */
- writepos--;
- } else {
- /* No special case, the name just started with a . */
- /* Append */
- while((*workpos != '/') && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
- }
- } else {
- /* No special case */
- /* Append */
- while((*workpos != '/') && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
-
-#if HAVE_SYMLINK
- /* We are going to use path_construction, so close it */
- *writepos = 0;
-
- /* Check the current location to see if it is a symlink */
- if((linklength = readlink(path_construction, buf, MAXPATHLEN)) != -1) {
- /* Check linkcount */
- if (linkcount > MAXSYMLINKS) return NULL;
-
- /* Count this symlink */
- linkcount++;
-
- /* Set end of buf */
- buf[linklength] = 0;
-
- /* Check for overflow */
- if ((strlen(workpos) + strlen(buf) + 1) >= MAXPATHLEN) return NULL;
-
- /* Remove the symlink-component wrom path_construction */
- writepos--; /* move to '/' */
- while(*--writepos != '/') ; /* skip until previous '/' */
- *++writepos = 0; /* end of string after '/' */
-
- /* If the symlink starts with a '/', empty path_construction */
- if (*buf == '/') {
- *path_construction = 0;
- writepos = path_construction;
- }
-
- /* Insert symlink into path_copy */
- strcat(buf, workpos);
- strcpy(path_copy, buf);
- workpos = path_copy;
- }
-#endif /* HAVE_SYMLINK */
-
- /* If it was a directory, append a slash */
- if (*workpos == '/') {
- *writepos++ = *workpos++;
- }
- *writepos = 0;
-#endif /* defined(PHP_WIN32) */
- }
-
- /* Check if the resolved path is a directory */
- if (V_STAT(path_construction, &filestat) != 0) {
- if (errno != ENOENT) return NULL;
- } else {
- if (S_ISDIR(filestat.st_mode)) {
- /* It's a directory, append a / if needed */
- if (*(writepos-1) != '/') {
- /* Check for overflow */
- if ((strlen(workpos) + 2) >= MAXPATHLEN) {
- return NULL;
- }
- *writepos++ = '/';
- *writepos = 0;
- }
- }
- }
-
- strcpy(resolved_path, path_construction);
- return resolved_path;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/strtok_r.c b/strtok_r.c
deleted file mode 100644
index fea43bdead..0000000000
--- a/strtok_r.c
+++ /dev/null
@@ -1,113 +0,0 @@
-#include "php.h"
-
-#ifndef HAVE_STRTOK_R
-
-/*
- * Copyright (c) 1998 Softweyr LLC. All rights reserved.
- *
- * strtok_r, from Berkeley strtok
- * Oct 13, 1998 by Wes Peters <wes@softweyr.com>
- *
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notices, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notices, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Softweyr LLC, the
- * University of California, Berkeley, and its contributors.
- *
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTWEYR LLC, THE
- * REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stddef.h>
-#include <string.h>
-
-char *
-strtok_r(char *s, const char *delim, char **last)
-{
- char *spanp;
- int c, sc;
- char *tok;
-
- if (s == NULL && (s = *last) == NULL)
- {
- return NULL;
- }
-
- /*
- * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
- */
-cont:
- c = *s++;
- for (spanp = (char *)delim; (sc = *spanp++) != 0; )
- {
- if (c == sc)
- {
- goto cont;
- }
- }
-
- if (c == 0) /* no non-delimiter characters */
- {
- *last = NULL;
- return NULL;
- }
- tok = s - 1;
-
- /*
- * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
- * Note that delim must have one NUL; we stop if we see that, too.
- */
- for (;;)
- {
- c = *s++;
- spanp = (char *)delim;
- do
- {
- if ((sc = *spanp++) == c)
- {
- if (c == 0)
- {
- s = NULL;
- }
- else
- {
- char *w = s - 1;
- *w = '\0';
- }
- *last = s;
- return tok;
- }
- }
- while (sc != 0);
- }
- /* NOTREACHED */
-}
-
-#endif