diff options
author | Wez Furlong <wez@php.net> | 2004-07-27 03:57:31 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2004-07-27 03:57:31 +0000 |
commit | ac878007602a8fb06d17de5daa559a31fabf85cb (patch) | |
tree | acdab5fc7b344e371d385039ae67da71f95e9324 /sapi/activescript/php5as_scriptengine.h | |
parent | 3e327b6e21b2fa10ab08935f4eb10f18b0c8d960 (diff) | |
download | php-git-ac878007602a8fb06d17de5daa559a31fabf85cb.tar.gz |
Major re-jig.
With thanks to Rob Richards for tracking down a couple of big bugs caused by
teeny bits of code.
Diffstat (limited to 'sapi/activescript/php5as_scriptengine.h')
-rw-r--r-- | sapi/activescript/php5as_scriptengine.h | 158 |
1 files changed, 59 insertions, 99 deletions
diff --git a/sapi/activescript/php5as_scriptengine.h b/sapi/activescript/php5as_scriptengine.h index bd720a584c..83ab582cc2 100644 --- a/sapi/activescript/php5as_scriptengine.h +++ b/sapi/activescript/php5as_scriptengine.h @@ -18,129 +18,68 @@ /* $Id$ */ #include <activscp.h> -#if ACTIVEPHP_OBJECT_SAFETY -# include <objsafe.h> -#endif +#include <objsafe.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; -}; +#if 0 +#define ACTIVEPHP_THREADING_MODE COINIT_MULTITHREADED +#else +#define ACTIVEPHP_THREADING_MODE COINIT_APARTMENTTHREADED +#endif -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; -}; +#define ACTIVEPHP_HAS_OWN_THREAD 1 -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; -}; +#define WM_ACTIVEPHP_SERIALIZE WM_USER + 200 -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; +enum activephp_engine_func { /* if you change the order, change marshal.cpp too */ + APHP_ParseScriptText, + APHP_InitNew, + APHP_AddNamedItem, + APHP_SetScriptState, + APHP_GetScriptDispatch, + APHP_Close, + APHP_AddTypeLib, + APHP_AddScriptlet, + APHP__Max }; -struct php_active_script_add_tlb_info { - /* [in] */ const GUID * rguidTypeLib; - /* [in] */ DWORD dwMajor; - /* [in] */ DWORD dwMinor; - /* [in] */ DWORD dwFlags; -}; +HRESULT marshal_call(class TPHPScriptingEngine *engine, enum activephp_engine_func func, int nargs, ...); +HRESULT marshal_stub(LPARAM lparam); class TPHPScriptingEngine: public IActiveScript, public IActiveScriptParse, - public IActiveScriptParseProcedure -#if ACTIVEPHP_OBJECT_SAFETY - , public IObjectSafety + public IActiveScriptParseProcedure, + public IObjectSafety, + public IDispatch +#if 0 + , public IMarshal #endif { 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; + DWORD m_gitcookie, m_asscookie; + HWND m_queue; + + int m_done_init; - 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); + void do_clone(TPHPScriptingEngine *src); +void setup_engine_state(void); + int create_id(OLECHAR *name, DISPID *dispid TSRMLS_DC); + + char *m_names[1024]; + int m_lens[1024]; + int m_ids; public: /* IUnknown */ STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject); @@ -234,7 +173,6 @@ public: /* IActiveScriptParseProcedure */ /* [in] */ DWORD dwFlags, /* [out] */ IDispatch **ppdisp); -#if ACTIVEPHP_OBJECT_SAFETY public: /* IObjectSafety */ STDMETHODIMP GetInterfaceSafetyOptions( /* [in] */ REFIID riid, // Interface that we want options for @@ -245,11 +183,33 @@ public: /* IObjectSafety */ /* [in] */ REFIID riid, // Interface to set options for /* [in] */ DWORD dwOptionSetMask, // Options to change /* [in] */ DWORD dwEnabledOptions); // New option values +#if 0 +public: /* IMarshal */ + STDMETHODIMP GetUnmarshalClass( + REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid); + STDMETHODIMP GetMarshalSizeMax( + REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, ULONG *pSize); + STDMETHODIMP MarshalInterface( + IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshflags); + STDMETHODIMP UnmarshalInterface( + IStream *pStm, REFIID riid, void **ppv); + STDMETHODIMP ReleaseMarshalData(IStream *pStm); + STDMETHODIMP DisconnectObject(DWORD dwReserved); #endif + +public: /* IDispatch */ + STDMETHODIMP GetIDsOfNames( REFIID riid, OLECHAR **rgszNames, unsigned int cNames, LCID lcid, DISPID *rgDispId); + STDMETHODIMP Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, + DISPPARAMS FAR* pdp, VARIANT FAR* pvarRes, EXCEPINFO FAR* pei, + unsigned int FAR* puArgErr); + STDMETHODIMP GetTypeInfoCount(unsigned int * pctinfo); + STDMETHODIMP GetTypeInfo( unsigned int iTInfo, LCID lcid, ITypeInfo **ppTInfo); public: TPHPScriptingEngine(); ~TPHPScriptingEngine(); - + }; +IUnknown *create_scripting_engine(TPHPScriptingEngine *tobecloned); + |