summaryrefslogtreecommitdiff
path: root/sapi/activescript/php5as_scriptengine.h
diff options
context:
space:
mode:
Diffstat (limited to 'sapi/activescript/php5as_scriptengine.h')
-rw-r--r--sapi/activescript/php5as_scriptengine.h235
1 files changed, 235 insertions, 0 deletions
diff --git a/sapi/activescript/php5as_scriptengine.h b/sapi/activescript/php5as_scriptengine.h
new file mode 100644
index 0000000000..fd5fd522a8
--- /dev/null
+++ b/sapi/activescript/php5as_scriptengine.h
@@ -0,0 +1,235 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2004 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_0.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: Wez Furlong <wez@thebrainroom.com> |
+ +----------------------------------------------------------------------+
+ */
+/* $Id$ */
+
+#include <activscp.h>
+#include "zend.h"
+#include <setjmp.h>
+
+/* Definitions for thread messages */
+enum {
+ PHPSE_STATE_CHANGE = WM_USER + 20,
+ PHPSE_INIT_NEW,
+ PHPSE_PARSE_SCRIPT,
+ PHPSE_ADD_SCRIPTLET,
+ PHPSE_CLOSE,
+ PHPSE_CLONE,
+ PHPSE_ENTER,
+ PHPSE_LEAVE,
+ PHPSE_TERMINATE,
+ PHPSE_PARSE_PROC,
+ PHPSE_EXEC_PROC,
+ PHPSE_ADD_NAMED_ITEM,
+ PHPSE_SET_SITE,
+ PHPSE_ADD_TYPELIB,
+ PHPSE_TRIGGER_ERROR,
+ PHPSE_GET_DISPATCH,
+ PHPSE_DUMMY_TICK,
+};
+
+struct php_active_script_get_dispatch_info {
+ LPCOLESTR pstrItemName;
+ DWORD dispatch;
+};
+
+struct php_active_script_add_named_item_info {
+ LPCOLESTR pstrName;
+ DWORD dwFlags;
+ IUnknown *punk;
+ ITypeInfo *ptyp;
+ IDispatch *pdisp;
+ DWORD marshal;
+};
+
+struct php_active_script_add_scriptlet_info {
+ /* [in] */ LPCOLESTR pstrDefaultName;
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ LPCOLESTR pstrSubItemName;
+ /* [in] */ LPCOLESTR pstrEventName;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ /* [out] */ BSTR *pbstrName;
+ /* [out] */ EXCEPINFO *pexcepinfo;
+};
+
+struct php_active_script_parse_info {
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ IUnknown *punkContext;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ /* [out] */ VARIANT *pvarResult;
+ /* [out] */ EXCEPINFO *pexcepinfo;
+};
+
+struct php_active_script_parse_proc_info {
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrFormalParams;
+ /* [in] */ LPCOLESTR pstrProcedureName;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ IUnknown *punkContext;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ DWORD dispcookie;
+};
+
+struct php_active_script_add_tlb_info {
+ /* [in] */ const GUID * rguidTypeLib;
+ /* [in] */ DWORD dwMajor;
+ /* [in] */ DWORD dwMinor;
+ /* [in] */ DWORD dwFlags;
+};
+
+class TPHPScriptingEngine:
+ public IActiveScript,
+ public IActiveScriptParse,
+ public IActiveScriptParseProcedure
+{
+public:
+ volatile LONG m_refcount;
+ IActiveScriptSite *m_pass;
+ SCRIPTSTATE m_scriptstate;
+ MUTEX_T m_mutex;
+ HashTable m_script_dispatchers;
+ HANDLE m_engine_thread_handle;
+
+ HANDLE m_sync_thread_msg;
+ HRESULT m_sync_thread_ret;
+
+ /* This is hacky, but only used when the host queries us for a script dispatch */
+ void *** m_tsrm_hack;
+
+ void add_to_global_namespace(IDispatch *disp, DWORD flags, char *name TSRMLS_DC);
+
+ THREAD_T m_enginethread, m_basethread;
+ HashTable m_frags;
+ ULONG m_lambda_count;
+ IActiveScriptSite *m_pass_eng;
+
+ jmp_buf *m_err_trap;
+ int m_in_main, m_stop_main;
+
+ HRESULT SendThreadMessage(LONG msg, WPARAM wparam, LPARAM lparam);
+
+ void engine_thread_func(void);
+ HRESULT engine_thread_handler(LONG msg, WPARAM wParam, LPARAM lParam, int *handled TSRMLS_DC);
+
+public: /* IUnknown */
+ STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject);
+ STDMETHODIMP_(DWORD) AddRef(void);
+ STDMETHODIMP_(DWORD) Release(void);
+public: /* IActiveScript */
+ STDMETHODIMP SetScriptSite(
+ /* [in] */ IActiveScriptSite *pass);
+
+ STDMETHODIMP GetScriptSite(
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ STDMETHODIMP SetScriptState(
+ /* [in] */ SCRIPTSTATE ss);
+
+ STDMETHODIMP GetScriptState(
+ /* [out] */ SCRIPTSTATE *pssState);
+
+ STDMETHODIMP Close( void);
+
+ STDMETHODIMP AddNamedItem(
+ /* [in] */ LPCOLESTR pstrName,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP AddTypeLib(
+ /* [in] */ REFGUID rguidTypeLib,
+ /* [in] */ DWORD dwMajor,
+ /* [in] */ DWORD dwMinor,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP GetScriptDispatch(
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [out] */ IDispatch **ppdisp);
+
+ STDMETHODIMP GetCurrentScriptThreadID(
+ /* [out] */ SCRIPTTHREADID *pstidThread);
+
+ STDMETHODIMP GetScriptThreadID(
+ /* [in] */ DWORD dwWin32ThreadId,
+ /* [out] */ SCRIPTTHREADID *pstidThread);
+
+ STDMETHODIMP GetScriptThreadState(
+ /* [in] */ SCRIPTTHREADID stidThread,
+ /* [out] */ SCRIPTTHREADSTATE *pstsState);
+
+ STDMETHODIMP InterruptScriptThread(
+ /* [in] */ SCRIPTTHREADID stidThread,
+ /* [in] */ const EXCEPINFO *pexcepinfo,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP Clone(
+ /* [out] */ IActiveScript **ppscript);
+
+public: /* IActiveScriptParse */
+ STDMETHODIMP InitNew( void);
+
+ STDMETHODIMP AddScriptlet(
+ /* [in] */ LPCOLESTR pstrDefaultName,
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ LPCOLESTR pstrSubItemName,
+ /* [in] */ LPCOLESTR pstrEventName,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ BSTR *pbstrName,
+ /* [out] */ EXCEPINFO *pexcepinfo);
+
+ STDMETHODIMP ParseScriptText(
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ IUnknown *punkContext,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ VARIANT *pvarResult,
+ /* [out] */ EXCEPINFO *pexcepinfo);
+public: /* IActiveScriptParseProcedure */
+ STDMETHODIMP ParseProcedureText(
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrFormalParams,
+ /* [in] */ LPCOLESTR pstrProcedureName,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ IUnknown *punkContext,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ IDispatch **ppdisp);
+public:
+ TPHPScriptingEngine();
+ ~TPHPScriptingEngine();
+
+};
+