diff options
| author | foobar <sniper@php.net> | 2004-01-17 13:00:38 +0000 | 
|---|---|---|
| committer | foobar <sniper@php.net> | 2004-01-17 13:00:38 +0000 | 
| commit | f4983c0d3f56c2074458e4840db36643b2fec59b (patch) | |
| tree | 2dcf521f07114e3bb2952439fe28cdfa40d30677 /sapi/activescript/php5as_scriptengine.h | |
| parent | b851f3712388de9f6c4addf2063dbc3c663a0b3b (diff) | |
| download | php-git-f4983c0d3f56c2074458e4840db36643b2fec59b.tar.gz | |
- Renamed all *php4* files to *php5*, changed all php4/PHP4 to php5/PHP5
Diffstat (limited to 'sapi/activescript/php5as_scriptengine.h')
| -rw-r--r-- | sapi/activescript/php5as_scriptengine.h | 235 | 
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(); + +}; + | 
