ReactOS 0.4.17-dev-357-ga8f14ff
jscript.c File Reference
#include <assert.h>
#include "jscript.h"
#include "engine.h"
#include "objsafe.h"
#include "wine/debug.h"
Include dependency graph for jscript.c:

Go to the source code of this file.

Classes

class  JScript
 
struct  JScriptError
 
struct  AXSite
 

Macros

#define CTXARG_T   DWORD
 
#define IActiveScriptParseVtbl   IActiveScriptParse32Vtbl
 
#define IActiveScriptParseProcedure2Vtbl   IActiveScriptParseProcedure2_32Vtbl
 
#define SUPPORTED_OPTIONS   (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
void script_release (script_ctx_t *ctx)
 
static void script_globals_release (script_ctx_t *ctx)
 
static void change_state (JScript *This, SCRIPTSTATE state)
 
static BOOL is_started (script_ctx_t *ctx)
 
HRESULT create_named_item_script_obj (script_ctx_t *ctx, named_item_t *item)
 
static void release_named_item_script_obj (named_item_t *item)
 
static HRESULT retrieve_named_item_disp (IActiveScriptSite *site, named_item_t *item)
 
named_item_tlookup_named_item (script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
 
void release_named_item (named_item_t *item)
 
static JScriptErrorimpl_from_IActiveScriptError (IActiveScriptError *iface)
 
static HRESULT WINAPI JScriptError_QueryInterface (IActiveScriptError *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScriptError_AddRef (IActiveScriptError *iface)
 
static ULONG WINAPI JScriptError_Release (IActiveScriptError *iface)
 
static HRESULT WINAPI JScriptError_GetExceptionInfo (IActiveScriptError *iface, EXCEPINFO *excepinfo)
 
static HRESULT WINAPI JScriptError_GetSourcePosition (IActiveScriptError *iface, DWORD *source_context, ULONG *line, LONG *character)
 
static HRESULT WINAPI JScriptError_GetSourceLineText (IActiveScriptError *iface, BSTR *source)
 
void reset_ei (jsexcept_t *ei)
 
void enter_script (script_ctx_t *ctx, jsexcept_t *ei)
 
HRESULT leave_script (script_ctx_t *ctx, HRESULT result)
 
static void clear_script_queue (JScript *This)
 
static void clear_persistent_code_list (JScript *This)
 
static void release_persistent_script_objs (JScript *This)
 
static void release_named_item_list (JScript *This)
 
static HRESULT exec_global_code (script_ctx_t *ctx, bytecode_t *code, jsval_t *r)
 
static void exec_queued_code (JScript *This)
 
static void decrease_state (JScript *This, SCRIPTSTATE state)
 
static AXSiteimpl_from_IServiceProvider (IServiceProvider *iface)
 
static HRESULT WINAPI AXSite_QueryInterface (IServiceProvider *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AXSite_AddRef (IServiceProvider *iface)
 
static ULONG WINAPI AXSite_Release (IServiceProvider *iface)
 
static HRESULT WINAPI AXSite_QueryService (IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
 
IUnknowncreate_ax_site (script_ctx_t *ctx)
 
static JScriptimpl_from_IActiveScript (IActiveScript *iface)
 
static HRESULT WINAPI JScript_QueryInterface (IActiveScript *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScript_AddRef (IActiveScript *iface)
 
static ULONG WINAPI JScript_Release (IActiveScript *iface)
 
static HRESULT WINAPI JScript_SetScriptSite (IActiveScript *iface, IActiveScriptSite *pass)
 
static HRESULT WINAPI JScript_GetScriptSite (IActiveScript *iface, REFIID riid, void **ppvObject)
 
static HRESULT WINAPI JScript_SetScriptState (IActiveScript *iface, SCRIPTSTATE ss)
 
static HRESULT WINAPI JScript_GetScriptState (IActiveScript *iface, SCRIPTSTATE *pssState)
 
static HRESULT WINAPI JScript_Close (IActiveScript *iface)
 
static HRESULT WINAPI JScript_AddNamedItem (IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
 
static HRESULT WINAPI JScript_AddTypeLib (IActiveScript *iface, REFGUID rguidTypeLib, DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
 
static HRESULT WINAPI JScript_GetScriptDispatch (IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
 
static HRESULT WINAPI JScript_GetCurrentScriptThreadID (IActiveScript *iface, SCRIPTTHREADID *pstridThread)
 
static HRESULT WINAPI JScript_GetScriptThreadID (IActiveScript *iface, DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
 
static HRESULT WINAPI JScript_GetScriptThreadState (IActiveScript *iface, SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
 
static HRESULT WINAPI JScript_InterruptScriptThread (IActiveScript *iface, SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
 
static HRESULT WINAPI JScript_Clone (IActiveScript *iface, IActiveScript **ppscript)
 
static JScriptimpl_from_IActiveScriptParse (IActiveScriptParse *iface)
 
static HRESULT WINAPI JScriptParse_QueryInterface (IActiveScriptParse *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScriptParse_AddRef (IActiveScriptParse *iface)
 
static ULONG WINAPI JScriptParse_Release (IActiveScriptParse *iface)
 
static HRESULT WINAPI JScriptParse_InitNew (IActiveScriptParse *iface)
 
static HRESULT WINAPI JScriptParse_AddScriptlet (IActiveScriptParse *iface, LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, BSTR *pbstrName, EXCEPINFO *pexcepinfo)
 
static HRESULT WINAPI JScriptParse_ParseScriptText (IActiveScriptParse *iface, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine, DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
 
static JScriptimpl_from_IActiveScriptParseProcedure2 (IActiveScriptParseProcedure2 *iface)
 
static HRESULT WINAPI JScriptParseProcedure_QueryInterface (IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScriptParseProcedure_AddRef (IActiveScriptParseProcedure2 *iface)
 
static ULONG WINAPI JScriptParseProcedure_Release (IActiveScriptParseProcedure2 *iface)
 
static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText (IActiveScriptParseProcedure2 *iface, LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
 
static JScriptimpl_from_IActiveScriptProperty (IActiveScriptProperty *iface)
 
static HRESULT WINAPI JScriptProperty_QueryInterface (IActiveScriptProperty *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScriptProperty_AddRef (IActiveScriptProperty *iface)
 
static ULONG WINAPI JScriptProperty_Release (IActiveScriptProperty *iface)
 
static HRESULT WINAPI JScriptProperty_GetProperty (IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
 
static HRESULT WINAPI JScriptProperty_SetProperty (IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
 
static JScriptimpl_from_IObjectSafety (IObjectSafety *iface)
 
static HRESULT WINAPI JScriptSafety_QueryInterface (IObjectSafety *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI JScriptSafety_AddRef (IObjectSafety *iface)
 
static ULONG WINAPI JScriptSafety_Release (IObjectSafety *iface)
 
static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions (IObjectSafety *iface, REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
 
static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions (IObjectSafety *iface, REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
 
static JScriptimpl_from_IVariantChangeType (IVariantChangeType *iface)
 
static HRESULT WINAPI VariantChangeType_QueryInterface (IVariantChangeType *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI VariantChangeType_AddRef (IVariantChangeType *iface)
 
static ULONG WINAPI VariantChangeType_Release (IVariantChangeType *iface)
 
static HRESULT WINAPI VariantChangeType_ChangeType (IVariantChangeType *iface, VARIANT *dst, VARIANT *src, LCID lcid, VARTYPE vt)
 
static JScriptimpl_from_IWineJScript (IWineJScript *iface)
 
static HRESULT WINAPI WineJScript_QueryInterface (IWineJScript *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI WineJScript_AddRef (IWineJScript *iface)
 
static ULONG WINAPI WineJScript_Release (IWineJScript *iface)
 
static HRESULT WINAPI WineJScript_InitHostObject (IWineJScript *iface, IWineJSDispatchHost *host_obj, IWineJSDispatch *prototype, UINT32 flags, IWineJSDispatch **ret)
 
static HRESULT WINAPI WineJScript_InitHostConstructor (IWineJScript *iface, IWineJSDispatchHost *constr, IWineJSDispatch *prototype, IWineJSDispatch **ret)
 
HRESULT create_jscript_object (BOOL is_encode, REFIID riid, void **ppv)
 

Variables

static const IActiveScriptErrorVtbl JScriptErrorVtbl
 
static IServiceProviderVtbl AXSiteVtbl
 
static const IActiveScriptVtbl JScriptVtbl
 
static const IActiveScriptParseVtbl JScriptParseVtbl
 
static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
 
static const IActiveScriptPropertyVtbl JScriptPropertyVtbl
 
static const IObjectSafetyVtbl JScriptSafetyVtbl
 
static const IVariantChangeTypeVtbl VariantChangeTypeVtbl
 
static const IWineJScriptVtbl WineJScriptVtbl
 

Macro Definition Documentation

◆ CTXARG_T

#define CTXARG_T   DWORD

Definition at line 37 of file jscript.c.

◆ IActiveScriptParseProcedure2Vtbl

#define IActiveScriptParseProcedure2Vtbl   IActiveScriptParseProcedure2_32Vtbl

Definition at line 39 of file jscript.c.

◆ IActiveScriptParseVtbl

#define IActiveScriptParseVtbl   IActiveScriptParse32Vtbl

Definition at line 38 of file jscript.c.

◆ SUPPORTED_OPTIONS

#define SUPPORTED_OPTIONS   (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER)

Definition at line 1331 of file jscript.c.

Function Documentation

◆ AXSite_AddRef()

static ULONG WINAPI AXSite_AddRef ( IServiceProvider iface)
static

Definition at line 566 of file jscript.c.

567{
570
571 TRACE("(%p) ref=%ld\n", This, ref);
572
573 return ref;
574}
#define InterlockedIncrement
Definition: armddk.h:53
static AXSite * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: jscript.c:541
long LONG
Definition: pedump.c:60
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48

◆ AXSite_QueryInterface()

static HRESULT WINAPI AXSite_QueryInterface ( IServiceProvider iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 546 of file jscript.c.

547{
549
551 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
552 *ppv = &This->IServiceProvider_iface;
553 }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
554 TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv);
555 *ppv = &This->IServiceProvider_iface;
556 }else {
557 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
558 *ppv = NULL;
559 return E_NOINTERFACE;
560 }
561
562 IUnknown_AddRef((IUnknown*)*ppv);
563 return S_OK;
564}
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ AXSite_QueryService()

static HRESULT WINAPI AXSite_QueryService ( IServiceProvider iface,
REFGUID  guidService,
REFIID  riid,
void **  ppv 
)
static

Definition at line 594 of file jscript.c.

596{
598
599 TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
600
601 if(!This->sp)
602 return E_NOINTERFACE;
603
604 return IServiceProvider_QueryService(This->sp, guidService, riid, ppv);
605}

◆ AXSite_Release()

static ULONG WINAPI AXSite_Release ( IServiceProvider iface)
static

Definition at line 576 of file jscript.c.

577{
580
581 TRACE("(%p) ref=%ld\n", This, ref);
582
583 if(!ref)
584 {
585 if(This->sp)
586 IServiceProvider_Release(This->sp);
587
588 free(This);
589 }
590
591 return ref;
592}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5

◆ change_state()

static void change_state ( JScript This,
SCRIPTSTATE  state 
)
static

Definition at line 107 of file jscript.c.

108{
109 if(This->ctx->state == state)
110 return;
111
112 This->ctx->state = state;
113 if(This->site)
114 IActiveScriptSite_OnStateChange(This->site, state);
115}
static int state
Definition: maze.c:121

Referenced by decrease_state(), JScript_SetScriptSite(), JScript_SetScriptState(), and JScriptParse_InitNew().

◆ clear_persistent_code_list()

static void clear_persistent_code_list ( JScript This)
static

Definition at line 398 of file jscript.c.

399{
400 while(!list_empty(&This->persistent_code))
401 {
402 bytecode_t *iter = LIST_ENTRY(list_head(&This->persistent_code), bytecode_t, entry);
403 list_remove(&iter->entry);
404 release_bytecode(iter);
405 }
406}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
uint32_t entry
Definition: isohybrid.c:63
void release_bytecode(bytecode_t *code)
Definition: compile.c:2459
struct list entry
Definition: engine.h:213
Definition: list.h:15
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by JScript_Close().

◆ clear_script_queue()

static void clear_script_queue ( JScript This)
static

Definition at line 385 of file jscript.c.

386{
387 while(!list_empty(&This->queued_code))
388 {
389 bytecode_t *iter = LIST_ENTRY(list_head(&This->queued_code), bytecode_t, entry);
390 list_remove(&iter->entry);
391 if (iter->is_persistent)
392 list_add_tail(&This->persistent_code, &iter->entry);
393 else
394 release_bytecode(iter);
395 }
396}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
BOOL is_persistent
Definition: engine.h:193

Referenced by decrease_state(), and exec_queued_code().

◆ create_ax_site()

IUnknown * create_ax_site ( script_ctx_t ctx)

Definition at line 614 of file jscript.c.

615{
617 AXSite *ret;
619
620 hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp);
621 if(FAILED(hres)) {
622 TRACE("Could not get IServiceProvider iface: %08lx\n", hres);
623 }
624
625 ret = malloc(sizeof(AXSite));
626 if(!ret) {
627 IServiceProvider_Release(sp);
628 return NULL;
629 }
630
631 ret->IServiceProvider_iface.lpVtbl = &AXSiteVtbl;
632 ret->ref = 1;
633 ret->sp = sp;
634
635 return (IUnknown*)&ret->IServiceProvider_iface;
636}
#define malloc
Definition: debug_ros.c:4
static IServiceProviderVtbl AXSiteVtbl
Definition: jscript.c:607
return ret
Definition: mutex.c:146
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hres
Definition: protocol.c:465
static const WCHAR sp[]
Definition: suminfo.c:287

Referenced by create_activex_object(), and set_object_site().

◆ create_jscript_object()

HRESULT create_jscript_object ( BOOL  is_encode,
REFIID  riid,
void **  ppv 
)

Definition at line 1476 of file jscript.c.

1477{
1478 JScript *ret;
1479 HRESULT hres;
1480
1481 ret = calloc(1, sizeof(*ret));
1482 if(!ret)
1483 return E_OUTOFMEMORY;
1484
1485 lock_module();
1486
1487 ret->IActiveScript_iface.lpVtbl = &JScriptVtbl;
1488 ret->IActiveScriptParse_iface.lpVtbl = &JScriptParseVtbl;
1489 ret->IActiveScriptParseProcedure2_iface.lpVtbl = &JScriptParseProcedureVtbl;
1490 ret->IActiveScriptProperty_iface.lpVtbl = &JScriptPropertyVtbl;
1491 ret->IObjectSafety_iface.lpVtbl = &JScriptSafetyVtbl;
1492 ret->IVariantChangeType_iface.lpVtbl = &VariantChangeTypeVtbl;
1493 ret->IWineJScript_iface.lpVtbl = &WineJScriptVtbl;
1494 ret->ref = 1;
1495 ret->safeopt = INTERFACE_USES_DISPEX;
1496 ret->is_encode = is_encode;
1497 list_init(&ret->persistent_code);
1498 list_init(&ret->queued_code);
1499
1500 hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
1501 IActiveScript_Release(&ret->IActiveScript_iface);
1502 return hres;
1503}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
Definition: jscript.c:1233
static const IActiveScriptParseVtbl JScriptParseVtbl
Definition: jscript.c:1156
static const IVariantChangeTypeVtbl VariantChangeTypeVtbl
Definition: jscript.c:1424
static const IActiveScriptVtbl JScriptVtbl
Definition: jscript.c:1015
static const IWineJScriptVtbl WineJScriptVtbl
Definition: jscript.c:1468
static const IObjectSafetyVtbl JScriptSafetyVtbl
Definition: jscript.c:1363
static const IActiveScriptPropertyVtbl JScriptPropertyVtbl
Definition: jscript.c:1300
static void lock_module(void)
Definition: ieframe.h:335
#define calloc
Definition: rosglue.h:14

Referenced by JScriptEncodeFactory_CreateInstance(), and JScriptFactory_CreateInstance().

◆ create_named_item_script_obj()

HRESULT create_named_item_script_obj ( script_ctx_t ctx,
named_item_t item 
)

Definition at line 124 of file jscript.c.

125{
126 static const builtin_info_t disp_info = { .class = JSCLASS_GLOBAL };
127 return create_dispex(ctx, &disp_info, NULL, &item->script_obj);
128}
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:2493
@ JSCLASS_GLOBAL
Definition: jscript.h:110
jsclass_t class
Definition: jscript.h:183

Referenced by exec_source(), and lookup_named_item().

◆ decrease_state()

static void decrease_state ( JScript This,
SCRIPTSTATE  state 
)
static

Definition at line 454 of file jscript.c.

455{
456 named_item_t *item, *item_next;
457
458 if(This->ctx) {
459 switch(This->ctx->state) {
463 return;
464 /* FALLTHROUGH */
468
469 if(This->ctx->state == SCRIPTSTATE_DISCONNECTED)
472 return;
473 /* FALLTHROUGH */
477
478 LIST_FOR_EACH_ENTRY_SAFE(item, item_next, &This->ctx->named_items, named_item_t, entry)
479 {
480 if(item->disp)
481 {
482 IDispatch_Release(item->disp);
483 item->disp = NULL;
484 }
486 if(!(item->flags & SCRIPTITEM_ISPERSISTENT))
487 {
488 list_remove(&item->entry);
490 }
491 }
492
493 if(This->ctx->secmgr) {
494 IInternetHostSecurityManager_Release(This->ctx->secmgr);
495 This->ctx->secmgr = NULL;
496 }
497
498 if(This->ctx->site) {
499 IActiveScriptSite_Release(This->ctx->site);
500 This->ctx->site = NULL;
501 }
502
504 gc_run(This->ctx);
505
506 /* FALLTHROUGH */
509 break;
510 default:
511 assert(0);
512 }
513
515 }else if(state == SCRIPTSTATE_UNINITIALIZED) {
516 if(This->site)
517 IActiveScriptSite_OnStateChange(This->site, state);
518 }else {
519 FIXME("NULL ctx\n");
520 }
521
522 if((state == SCRIPTSTATE_UNINITIALIZED || state == SCRIPTSTATE_CLOSED) && This->thread_data) {
523 release_thread_data(This->thread_data);
524 This->thread_data = NULL;
525 }
526
527 if(This->site) {
528 IActiveScriptSite_Release(This->site);
529 This->site = NULL;
530 }
531}
@ SCRIPTSTATE_INITIALIZED
Definition: activscp.idl:62
@ SCRIPTSTATE_DISCONNECTED
Definition: activscp.idl:60
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
@ SCRIPTSTATE_UNINITIALIZED
Definition: activscp.idl:57
@ SCRIPTSTATE_CLOSED
Definition: activscp.idl:61
@ SCRIPTSTATE_CONNECTED
Definition: activscp.idl:59
#define FIXME(fmt,...)
Definition: precomp.h:53
static void release_named_item_script_obj(named_item_t *item)
Definition: jscript.c:130
static void clear_script_queue(JScript *This)
Definition: jscript.c:385
static void change_state(JScript *This, SCRIPTSTATE state)
Definition: jscript.c:107
static void script_globals_release(script_ctx_t *ctx)
Definition: jscript.c:96
void release_named_item(named_item_t *item)
Definition: jscript.c:186
static void release_persistent_script_objs(JScript *This)
Definition: jscript.c:408
#define assert(_expr)
Definition: assert.h:32
HRESULT gc_run(script_ctx_t *ctx)
Definition: dispex.c:928
void release_thread_data(struct thread_data *)
Definition: jscript_main.c:69
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204

Referenced by JScript_Close(), and JScript_SetScriptState().

◆ enter_script()

void enter_script ( script_ctx_t ctx,
jsexcept_t ei 
)

Definition at line 340 of file jscript.c.

341{
342 memset(ei, 0, sizeof(*ei));
343 ei->prev = ctx->ei;
344 ctx->ei = ei;
345 TRACE("ctx %p ei %p prev %p\n", ctx, ei, ei->prev);
346}
#define memset(x, y, z)
Definition: compat.h:39
jsexcept_t * prev
Definition: engine.h:267

Referenced by DispatchEx_InvokeEx(), exec_queued_code(), JScriptParse_ParseScriptText(), JScriptParseProcedure_ParseProcedureText(), variant_change_type(), and VariantChangeType_ChangeType().

◆ exec_global_code()

static HRESULT exec_global_code ( script_ctx_t ctx,
bytecode_t code,
jsval_t r 
)
static

Definition at line 426 of file jscript.c.

427{
428 IServiceProvider *prev_caller = ctx->jscaller->caller;
430
431 ctx->jscaller->caller = SP_CALLER_UNINITIALIZED;
432 hres = exec_source(ctx, EXEC_GLOBAL, code, &code->global_code, NULL, NULL, NULL, 0, NULL, r);
433 ctx->jscaller->caller = prev_caller;
434 return hres;
435}
HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, function_code_t *function, scope_chain_t *scope, IDispatch *this_obj, jsdisp_t *function_instance, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: engine.c:3425
#define EXEC_GLOBAL
Definition: engine.h:305
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define SP_CALLER_UNINITIALIZED
Definition: jscript.h:349
Definition: inflate.c:139

Referenced by exec_queued_code(), and JScriptParse_ParseScriptText().

◆ exec_queued_code()

static void exec_queued_code ( JScript This)
static

Definition at line 437 of file jscript.c.

438{
439 bytecode_t *iter;
440 jsexcept_t ei;
441 HRESULT hres = S_OK;
442
443 LIST_FOR_EACH_ENTRY(iter, &This->queued_code, bytecode_t, entry) {
444 enter_script(This->ctx, &ei);
445 hres = exec_global_code(This->ctx, iter, NULL);
446 leave_script(This->ctx, hres);
447 if(FAILED(hres))
448 break;
449 }
450
452}
void enter_script(script_ctx_t *ctx, jsexcept_t *ei)
Definition: jscript.c:340
static HRESULT exec_global_code(script_ctx_t *ctx, bytecode_t *code, jsval_t *r)
Definition: jscript.c:426
HRESULT leave_script(script_ctx_t *ctx, HRESULT result)
Definition: jscript.c:348
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198

Referenced by JScript_SetScriptState().

◆ impl_from_IActiveScript()

◆ impl_from_IActiveScriptError()

static JScriptError * impl_from_IActiveScriptError ( IActiveScriptError iface)
inlinestatic

◆ impl_from_IActiveScriptParse()

static JScript * impl_from_IActiveScriptParse ( IActiveScriptParse *  iface)
inlinestatic

◆ impl_from_IActiveScriptParseProcedure2()

static JScript * impl_from_IActiveScriptParseProcedure2 ( IActiveScriptParseProcedure2 *  iface)
inlinestatic

Definition at line 1165 of file jscript.c.

1166{
1167 return CONTAINING_RECORD(iface, JScript, IActiveScriptParseProcedure2_iface);
1168}

Referenced by JScriptParseProcedure_AddRef(), JScriptParseProcedure_ParseProcedureText(), JScriptParseProcedure_QueryInterface(), and JScriptParseProcedure_Release().

◆ impl_from_IActiveScriptProperty()

static JScript * impl_from_IActiveScriptProperty ( IActiveScriptProperty iface)
inlinestatic

Definition at line 1240 of file jscript.c.

1241{
1242 return CONTAINING_RECORD(iface, JScript, IActiveScriptProperty_iface);
1243}

Referenced by JScriptProperty_AddRef(), JScriptProperty_GetProperty(), JScriptProperty_QueryInterface(), JScriptProperty_Release(), and JScriptProperty_SetProperty().

◆ impl_from_IObjectSafety()

static JScript * impl_from_IObjectSafety ( IObjectSafety iface)
inlinestatic

◆ impl_from_IServiceProvider()

static AXSite * impl_from_IServiceProvider ( IServiceProvider iface)
inlinestatic

Definition at line 541 of file jscript.c.

542{
543 return CONTAINING_RECORD(iface, AXSite, IServiceProvider_iface);
544}

Referenced by AXSite_AddRef(), AXSite_QueryInterface(), AXSite_QueryService(), and AXSite_Release().

◆ impl_from_IVariantChangeType()

static JScript * impl_from_IVariantChangeType ( IVariantChangeType iface)
inlinestatic

Definition at line 1371 of file jscript.c.

1372{
1373 return CONTAINING_RECORD(iface, JScript, IVariantChangeType_iface);
1374}

Referenced by VariantChangeType_AddRef(), VariantChangeType_ChangeType(), VariantChangeType_QueryInterface(), and VariantChangeType_Release().

◆ impl_from_IWineJScript()

static JScript * impl_from_IWineJScript ( IWineJScript iface)
inlinestatic

Definition at line 1431 of file jscript.c.

1432{
1433 return CONTAINING_RECORD(iface, JScript, IWineJScript_iface);
1434}

Referenced by WineJScript_AddRef(), WineJScript_InitHostConstructor(), WineJScript_InitHostObject(), WineJScript_QueryInterface(), and WineJScript_Release().

◆ is_started()

static BOOL is_started ( script_ctx_t ctx)
inlinestatic

Definition at line 117 of file jscript.c.

118{
119 return ctx->state == SCRIPTSTATE_STARTED
120 || ctx->state == SCRIPTSTATE_CONNECTED
121 || ctx->state == SCRIPTSTATE_DISCONNECTED;
122}

Referenced by JScriptParse_ParseScriptText().

◆ JScript_AddNamedItem()

static HRESULT WINAPI JScript_AddNamedItem ( IActiveScript iface,
LPCOLESTR  pstrName,
DWORD  dwFlags 
)
static

Definition at line 887 of file jscript.c.

889{
892 IDispatch *disp = NULL;
894
895 TRACE("(%p)->(%s %lx)\n", This, debugstr_w(pstrName), dwFlags);
896
897 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || !This->ctx || This->ctx->state == SCRIPTSTATE_CLOSED)
898 return E_UNEXPECTED;
899
900 if(dwFlags & SCRIPTITEM_GLOBALMEMBERS) {
901 IUnknown *unk;
902
903 hres = IActiveScriptSite_GetItemInfo(This->site, pstrName, SCRIPTINFO_IUNKNOWN, &unk, NULL);
904 if(FAILED(hres)) {
905 WARN("GetItemInfo failed: %08lx\n", hres);
906 return hres;
907 }
908
909 hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp);
910 IUnknown_Release(unk);
911 if(FAILED(hres)) {
912 WARN("object does not implement IDispatch\n");
913 return hres;
914 }
915 }
916
917 item = malloc(sizeof(*item));
918 if(!item) {
919 if(disp)
920 IDispatch_Release(disp);
921 return E_OUTOFMEMORY;
922 }
923
924 item->ref = 1;
925 item->disp = disp;
926 item->flags = dwFlags;
927 item->script_obj = NULL;
928 item->name = wcsdup(pstrName);
929 if(!item->name) {
930 if(disp)
931 IDispatch_Release(disp);
932 free(item);
933 return E_OUTOFMEMORY;
934 }
935
936 list_add_tail(&This->ctx->named_items, &item->entry);
937 return S_OK;
938}
#define WARN(fmt,...)
Definition: precomp.h:61
static JScript * impl_from_IActiveScript(IActiveScript *iface)
Definition: jscript.c:638
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
#define debugstr_w
Definition: kernel32.h:32
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
const GUID IID_IDispatch
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define E_UNEXPECTED
Definition: winerror.h:3528

◆ JScript_AddRef()

static ULONG WINAPI JScript_AddRef ( IActiveScript iface)
static

Definition at line 687 of file jscript.c.

688{
691
692 TRACE("(%p) ref=%ld\n", This, ref);
693
694 return ref;
695}

◆ JScript_AddTypeLib()

static HRESULT WINAPI JScript_AddTypeLib ( IActiveScript iface,
REFGUID  rguidTypeLib,
DWORD  dwMajor,
DWORD  dwMinor,
DWORD  dwFlags 
)
static

Definition at line 940 of file jscript.c.

942{
944 FIXME("(%p)->()\n", This);
945 return E_NOTIMPL;
946}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ JScript_Clone()

static HRESULT WINAPI JScript_Clone ( IActiveScript iface,
IActiveScript **  ppscript 
)
static

Definition at line 1008 of file jscript.c.

1009{
1011 FIXME("(%p)->()\n", This);
1012 return E_NOTIMPL;
1013}

◆ JScript_Close()

static HRESULT WINAPI JScript_Close ( IActiveScript iface)
static

Definition at line 872 of file jscript.c.

873{
875
876 TRACE("(%p)->()\n", This);
877
878 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
879 return E_UNEXPECTED;
880
884 return S_OK;
885}
static void decrease_state(JScript *This, SCRIPTSTATE state)
Definition: jscript.c:454
static void clear_persistent_code_list(JScript *This)
Definition: jscript.c:398
static void release_named_item_list(JScript *This)
Definition: jscript.c:417

◆ JScript_GetCurrentScriptThreadID()

static HRESULT WINAPI JScript_GetCurrentScriptThreadID ( IActiveScript iface,
SCRIPTTHREADID pstridThread 
)
static

Definition at line 976 of file jscript.c.

978{
980 FIXME("(%p)->()\n", This);
981 return E_NOTIMPL;
982}

◆ JScript_GetScriptDispatch()

static HRESULT WINAPI JScript_GetScriptDispatch ( IActiveScript iface,
LPCOLESTR  pstrItemName,
IDispatch **  ppdisp 
)
static

Definition at line 948 of file jscript.c.

950{
952 jsdisp_t *script_obj;
953
954 TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp);
955
956 if(!ppdisp)
957 return E_POINTER;
958
959 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || !This->ctx->global) {
960 *ppdisp = NULL;
961 return E_UNEXPECTED;
962 }
963
964 script_obj = This->ctx->global;
965 if(pstrItemName) {
966 named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0);
967 if(!item) return E_INVALIDARG;
968 if(item->script_obj) script_obj = item->script_obj;
969 }
970
971 *ppdisp = to_disp(script_obj);
972 IDispatch_AddRef(*ppdisp);
973 return S_OK;
974}
#define E_INVALIDARG
Definition: ddrawi.h:101
named_item_t * lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
Definition: jscript.c:162
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:222
#define E_POINTER
Definition: winerror.h:3480

◆ JScript_GetScriptSite()

static HRESULT WINAPI JScript_GetScriptSite ( IActiveScript iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 807 of file jscript.c.

809{
811 FIXME("(%p)->()\n", This);
812 return E_NOTIMPL;
813}

◆ JScript_GetScriptState()

static HRESULT WINAPI JScript_GetScriptState ( IActiveScript iface,
SCRIPTSTATE pssState 
)
static

Definition at line 856 of file jscript.c.

857{
859
860 TRACE("(%p)->(%p)\n", This, pssState);
861
862 if(!pssState)
863 return E_POINTER;
864
865 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
866 return E_UNEXPECTED;
867
868 *pssState = This->ctx ? This->ctx->state : SCRIPTSTATE_UNINITIALIZED;
869 return S_OK;
870}

◆ JScript_GetScriptThreadID()

static HRESULT WINAPI JScript_GetScriptThreadID ( IActiveScript iface,
DWORD  dwWin32ThreadId,
SCRIPTTHREADID pstidThread 
)
static

Definition at line 984 of file jscript.c.

986{
988 FIXME("(%p)->()\n", This);
989 return E_NOTIMPL;
990}

◆ JScript_GetScriptThreadState()

static HRESULT WINAPI JScript_GetScriptThreadState ( IActiveScript iface,
SCRIPTTHREADID  stidThread,
SCRIPTTHREADSTATE pstsState 
)
static

Definition at line 992 of file jscript.c.

994{
996 FIXME("(%p)->()\n", This);
997 return E_NOTIMPL;
998}

◆ JScript_InterruptScriptThread()

static HRESULT WINAPI JScript_InterruptScriptThread ( IActiveScript iface,
SCRIPTTHREADID  stidThread,
const EXCEPINFO *  pexcepinfo,
DWORD  dwFlags 
)
static

Definition at line 1000 of file jscript.c.

1002{
1004 FIXME("(%p)->()\n", This);
1005 return E_NOTIMPL;
1006}

◆ JScript_QueryInterface()

static HRESULT WINAPI JScript_QueryInterface ( IActiveScript iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 643 of file jscript.c.

644{
646
647 *ppv = NULL;
648
650 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
651 *ppv = &This->IActiveScript_iface;
652 }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
653 TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
654 *ppv = &This->IActiveScript_iface;
655 }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
656 TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
657 *ppv = &This->IActiveScriptParse_iface;
658 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure)) {
659 TRACE("(%p)->(IID_IActiveScriptParseProcedure %p)\n", This, ppv);
660 *ppv = &This->IActiveScriptParseProcedure2_iface;
661 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure2)) {
662 TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This, ppv);
663 *ppv = &This->IActiveScriptParseProcedure2_iface;
664 }else if(IsEqualGUID(riid, &IID_IActiveScriptProperty)) {
665 TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This, ppv);
666 *ppv = &This->IActiveScriptProperty_iface;
667 }else if(IsEqualGUID(riid, &IID_IObjectSafety)) {
668 TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
669 *ppv = &This->IObjectSafety_iface;
670 }else if(IsEqualGUID(riid, &IID_IVariantChangeType)) {
671 TRACE("(%p)->(IID_IVariantChangeType %p)\n", This, ppv);
672 *ppv = &This->IVariantChangeType_iface;
673 }else if(IsEqualGUID(riid, &IID_IWineJScript)) {
674 TRACE("(%p)->(IID_IWineJScript %p)\n", This, ppv);
675 *ppv = &This->IWineJScript_iface;
676 }
677
678 if(*ppv) {
679 IUnknown_AddRef((IUnknown*)*ppv);
680 return S_OK;
681 }
682
683 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
684 return E_NOINTERFACE;
685}

◆ JScript_Release()

static ULONG WINAPI JScript_Release ( IActiveScript iface)
static

Definition at line 697 of file jscript.c.

698{
701
702 TRACE("(%p) ref=%ld\n", iface, ref);
703
704 if(!ref) {
705 if(This->ctx && This->ctx->state != SCRIPTSTATE_CLOSED)
706 IActiveScript_Close(&This->IActiveScript_iface);
707 if(This->ctx) {
708 This->ctx->active_script = NULL;
709 script_release(This->ctx);
710 }
711 if(This->thread_data)
712 release_thread_data(This->thread_data);
713 free(This);
715 }
716
717 return ref;
718}
void script_release(script_ctx_t *ctx)
Definition: jscript.c:75
static void unlock_module(void)
Definition: ieframe.h:339

◆ JScript_SetScriptSite()

static HRESULT WINAPI JScript_SetScriptSite ( IActiveScript iface,
IActiveScriptSite pass 
)
static

Definition at line 720 of file jscript.c.

722{
724 struct thread_data *thread_data;
726 LCID lcid;
728
729 TRACE("(%p)->(%p)\n", This, pass);
730
731 if(!pass)
732 return E_POINTER;
733
734 if(This->site)
735 return E_UNEXPECTED;
736
738 return E_OUTOFMEMORY;
739
740 if(InterlockedCompareExchangePointer((void**)&This->thread_data, thread_data, NULL)) {
742 return E_UNEXPECTED;
743 }
744
745 if(!This->ctx) {
746 script_ctx_t *ctx = calloc(1, sizeof(script_ctx_t));
747 if(!ctx)
748 return E_OUTOFMEMORY;
749
750 ctx->ref = 1;
752 ctx->active_script = &This->IActiveScript_iface;
753 ctx->safeopt = This->safeopt;
754 ctx->version = This->version;
755 ctx->html_mode = This->html_mode;
756 ctx->acc = jsval_undefined();
757 list_init(&ctx->named_items);
758 heap_pool_init(&ctx->tmp_heap);
759
761 if(FAILED(hres)) {
762 free(ctx);
763 return hres;
764 }
765
766 thread_data->ref++;
767 ctx->thread_data = thread_data;
768 ctx->last_match = jsstr_empty();
769
770 This->ctx = ctx;
771 }
772
773 /* Retrieve new dispatches for persistent named items */
774 LIST_FOR_EACH_ENTRY(item, &This->ctx->named_items, named_item_t, entry)
775 {
776 if(!item->disp)
777 {
779 if(FAILED(hres)) return hres;
780 }
781
782 /* For some reason, CODEONLY flag is lost in re-initialized scripts */
783 item->flags &= ~SCRIPTITEM_CODEONLY;
784 }
785
786 This->site = pass;
787 IActiveScriptSite_AddRef(This->site);
788
789 hres = IActiveScriptSite_GetLCID(This->site, &lcid);
790 if(hres == S_OK)
791 This->lcid = lcid;
792
793 This->ctx->lcid = This->lcid;
794
795 hres = init_global(This->ctx);
796 if(FAILED(hres))
797 return hres;
798
799 IActiveScriptSite_AddRef(This->site);
800 This->ctx->site = This->site;
801
802 if(This->is_initialized)
804 return S_OK;
805}
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
Definition: jscript.c:138
LCID lcid
Definition: locale.c:5660
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
HRESULT init_global(script_ctx_t *ctx)
Definition: global.c:1091
void heap_pool_init(heap_pool_t *)
Definition: jsutils.c:66
HRESULT create_jscaller(script_ctx_t *)
Definition: jsutils.c:1109
struct thread_data * get_thread_data(void)
Definition: jscript_main.c:51
jsstr_t * jsstr_empty(void)
Definition: jsstr.c:291
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
DWORD LCID
Definition: nls.h:13
LONG ref
Definition: jscript.h:136
pass
Definition: typegen.h:25

◆ JScript_SetScriptState()

static HRESULT WINAPI JScript_SetScriptState ( IActiveScript iface,
SCRIPTSTATE  ss 
)
static

Definition at line 815 of file jscript.c.

816{
818
819 TRACE("(%p)->(%d)\n", This, ss);
820
821 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
822 return E_UNEXPECTED;
823
825 if(This->ctx && This->ctx->state == SCRIPTSTATE_CLOSED)
826 return E_UNEXPECTED;
827
829 list_move_tail(&This->queued_code, &This->persistent_code);
830 return S_OK;
831 }
832
833 if(!This->is_initialized || !This->ctx)
834 return E_UNEXPECTED;
835
836 switch(ss) {
838 case SCRIPTSTATE_CONNECTED: /* FIXME */
839 if(This->ctx->state == SCRIPTSTATE_UNINITIALIZED || This->ctx->state == SCRIPTSTATE_CLOSED)
840 return E_UNEXPECTED;
841
843 break;
845 FIXME("unimplemented SCRIPTSTATE_INITIALIZED\n");
846 return S_OK;
847 default:
848 FIXME("unimplemented state %d\n", ss);
849 return E_NOTIMPL;
850 }
851
853 return S_OK;
854}
static void exec_queued_code(JScript *This)
Definition: jscript.c:437
static void list_move_tail(struct list_head *list, struct list_head *head)
Definition: list.h:122
#define ss
Definition: i386-dis.c:441

◆ JScriptError_AddRef()

static ULONG WINAPI JScriptError_AddRef ( IActiveScriptError iface)
static

Definition at line 219 of file jscript.c.

220{
223
224 TRACE("(%p) ref=%ld\n", This, ref);
225
226 return ref;
227}
static JScriptError * impl_from_IActiveScriptError(IActiveScriptError *iface)
Definition: jscript.c:194

◆ JScriptError_GetExceptionInfo()

static HRESULT WINAPI JScriptError_GetExceptionInfo ( IActiveScriptError iface,
EXCEPINFO *  excepinfo 
)
static

Definition at line 244 of file jscript.c.

245{
247
248 TRACE("(%p)->(%p)\n", This, excepinfo);
249
250 if(!excepinfo)
251 return E_POINTER;
252
253 memset(excepinfo, 0, sizeof(*excepinfo));
254 excepinfo->scode = This->ei.error;
255 if(This->ei.source)
256 jsstr_to_bstr(This->ei.source, &excepinfo->bstrSource);
257 if(This->ei.message)
258 jsstr_to_bstr(This->ei.message, &excepinfo->bstrDescription);
259 return S_OK;
260}
HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r)
Definition: jsstr.c:306
static EXCEPINFO excepinfo
Definition: automation.c:47

◆ JScriptError_GetSourceLineText()

static HRESULT WINAPI JScriptError_GetSourceLineText ( IActiveScriptError iface,
BSTR source 
)
static

Definition at line 288 of file jscript.c.

289{
291
292 TRACE("(%p)->(%p)\n", This, source);
293
294 if(!source)
295 return E_POINTER;
296
297 if(!This->ei.line) {
298 *source = NULL;
299 return E_FAIL;
300 }
301
302 return jsstr_to_bstr(This->ei.line, source);
303}
#define E_FAIL
Definition: ddrawi.h:102

◆ JScriptError_GetSourcePosition()

static HRESULT WINAPI JScriptError_GetSourcePosition ( IActiveScriptError iface,
DWORD source_context,
ULONG line,
LONG character 
)
static

Definition at line 262 of file jscript.c.

263{
265 bytecode_t *code = This->ei.code;
266 unsigned line_pos, char_pos;
267
268 TRACE("(%p)->(%p %p %p)\n", This, source_context, line, character);
269
270 if(!This->ei.code) {
271 FIXME("unknown position\n");
272 return E_FAIL;
273 }
274
275 if(source_context)
276 *source_context = This->ei.code->source_context;
277 if(!line && !character)
278 return S_OK;
279
280 line_pos = get_location_line(code, This->ei.loc, &char_pos);
281 if(line)
282 *line = line_pos;
283 if(character)
284 *character = char_pos;
285 return S_OK;
286}
unsigned get_location_line(bytecode_t *code, unsigned loc, unsigned *char_pos)
Definition: compile.c:2445
Definition: parser.c:49

◆ JScriptError_QueryInterface()

static HRESULT WINAPI JScriptError_QueryInterface ( IActiveScriptError iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 199 of file jscript.c.

200{
202
204 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
205 *ppv = &This->IActiveScriptError_iface;
206 }else if(IsEqualGUID(riid, &IID_IActiveScriptError)) {
207 TRACE("(%p)->(IID_IActiveScriptError %p)\n", This, ppv);
208 *ppv = &This->IActiveScriptError_iface;
209 }else {
210 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
211 *ppv = NULL;
212 return E_NOINTERFACE;
213 }
214
215 IUnknown_AddRef((IUnknown*)*ppv);
216 return S_OK;
217}

◆ JScriptError_Release()

static ULONG WINAPI JScriptError_Release ( IActiveScriptError iface)
static

Definition at line 229 of file jscript.c.

230{
233
234 TRACE("(%p) ref=%ld\n", This, ref);
235
236 if(!ref) {
237 reset_ei(&This->ei);
238 free(This);
239 }
240
241 return ref;
242}
void reset_ei(jsexcept_t *ei)
Definition: jscript.c:314

◆ JScriptParse_AddRef()

static ULONG WINAPI JScriptParse_AddRef ( IActiveScriptParse *  iface)
static

Definition at line 1045 of file jscript.c.

1046{
1048 return IActiveScript_AddRef(&This->IActiveScript_iface);
1049}
static JScript * impl_from_IActiveScriptParse(IActiveScriptParse *iface)
Definition: jscript.c:1034

◆ JScriptParse_AddScriptlet()

static HRESULT WINAPI JScriptParse_AddScriptlet ( IActiveScriptParse *  iface,
LPCOLESTR  pstrDefaultName,
LPCOLESTR  pstrCode,
LPCOLESTR  pstrItemName,
LPCOLESTR  pstrSubItemName,
LPCOLESTR  pstrEventName,
LPCOLESTR  pstrDelimiter,
CTXARG_T  dwSourceContextCookie,
ULONG  ulStartingLineNumber,
DWORD  dwFlags,
BSTR pbstrName,
EXCEPINFO *  pexcepinfo 
)
static

Definition at line 1072 of file jscript.c.

1077{
1079 FIXME("(%p)->(%s %s %s %s %s %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrDefaultName),
1080 debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
1081 debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), wine_dbgstr_longlong(dwSourceContextCookie),
1082 ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
1083 return E_NOTIMPL;
1084}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49

◆ JScriptParse_InitNew()

static HRESULT WINAPI JScriptParse_InitNew ( IActiveScriptParse *  iface)
static

Definition at line 1057 of file jscript.c.

1058{
1060
1061 TRACE("(%p)\n", This);
1062
1063 if(This->is_initialized)
1064 return E_UNEXPECTED;
1065 This->is_initialized = TRUE;
1066
1067 if(This->site)
1069 return S_OK;
1070}
#define TRUE
Definition: types.h:120

◆ JScriptParse_ParseScriptText()

static HRESULT WINAPI JScriptParse_ParseScriptText ( IActiveScriptParse *  iface,
LPCOLESTR  pstrCode,
LPCOLESTR  pstrItemName,
IUnknown punkContext,
LPCOLESTR  pstrDelimiter,
CTXARG_T  dwSourceContextCookie,
ULONG  ulStartingLine,
DWORD  dwFlags,
VARIANT pvarResult,
EXCEPINFO *  pexcepinfo 
)
static

Definition at line 1086 of file jscript.c.

1090{
1094 jsexcept_t ei;
1095 HRESULT hres;
1096
1097 TRACE("(%p)->(%s %s %p %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrCode),
1098 debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1099 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLine, dwFlags, pvarResult, pexcepinfo);
1100
1101 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED)
1102 return E_UNEXPECTED;
1103
1104 if(pstrItemName) {
1105 item = lookup_named_item(This->ctx, pstrItemName, 0);
1106 if(!item) {
1107 WARN("Unknown context %s\n", debugstr_w(pstrItemName));
1108 return E_INVALIDARG;
1109 }
1110 if(!item->script_obj) item = NULL;
1111 }
1112
1113 enter_script(This->ctx, &ei);
1114 hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLine, NULL, pstrDelimiter,
1115 (dwFlags & SCRIPTTEXT_ISEXPRESSION) != 0, This->is_encode, item, &code);
1116 if(FAILED(hres))
1117 return leave_script(This->ctx, hres);
1118
1119 if(dwFlags & SCRIPTTEXT_ISEXPRESSION) {
1120 jsval_t r;
1121
1122 hres = exec_global_code(This->ctx, code, &r);
1123 if(SUCCEEDED(hres)) {
1124 if(pvarResult)
1125 hres = jsval_to_variant(r, pvarResult);
1127 }
1128
1129 return leave_script(This->ctx, hres);
1130 }
1131
1132 code->is_persistent = (dwFlags & SCRIPTTEXT_ISPERSISTENT) != 0;
1133
1134 /*
1135 * Although pvarResult is not really used without SCRIPTTEXT_ISEXPRESSION flag, if it's not NULL,
1136 * script is executed immediately, even if it's not in started state yet.
1137 */
1138 if(!pvarResult && !is_started(This->ctx)) {
1139 list_add_tail(&This->queued_code, &code->entry);
1140 }else {
1142 if(code->is_persistent)
1143 list_add_tail(&This->persistent_code, &code->entry);
1144 else
1146 }
1147
1148 if(FAILED(hres = leave_script(This->ctx, hres)))
1149 return hres;
1150
1151 if(pvarResult)
1152 V_VT(pvarResult) = VT_EMPTY;
1153 return S_OK;
1154}
@ VT_EMPTY
Definition: compat.h:2295
static BOOL is_started(script_ctx_t *ctx)
Definition: jscript.c:117
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_context, unsigned start_line, const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, named_item_t *named_item, bytecode_t **ret)
Definition: compile.c:2725
void jsval_release(jsval_t val)
Definition: jsutils.c:186
HRESULT jsval_to_variant(jsval_t val, VARIANT *retv)
Definition: jsutils.c:367
#define V_VT(A)
Definition: oleauto.h:211
Definition: jsval.h:54

◆ JScriptParse_QueryInterface()

static HRESULT WINAPI JScriptParse_QueryInterface ( IActiveScriptParse *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1039 of file jscript.c.

1040{
1042 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1043}

◆ JScriptParse_Release()

static ULONG WINAPI JScriptParse_Release ( IActiveScriptParse *  iface)
static

Definition at line 1051 of file jscript.c.

1052{
1054 return IActiveScript_Release(&This->IActiveScript_iface);
1055}

◆ JScriptParseProcedure_AddRef()

static ULONG WINAPI JScriptParseProcedure_AddRef ( IActiveScriptParseProcedure2 *  iface)
static

Definition at line 1176 of file jscript.c.

1177{
1179 return IActiveScript_AddRef(&This->IActiveScript_iface);
1180}
static JScript * impl_from_IActiveScriptParseProcedure2(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1165

◆ JScriptParseProcedure_ParseProcedureText()

static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText ( IActiveScriptParseProcedure2 *  iface,
LPCOLESTR  pstrCode,
LPCOLESTR  pstrFormalParams,
LPCOLESTR  pstrProcedureName,
LPCOLESTR  pstrItemName,
IUnknown punkContext,
LPCOLESTR  pstrDelimiter,
CTXARG_T  dwSourceContextCookie,
ULONG  ulStartingLineNumber,
DWORD  dwFlags,
IDispatch **  ppdisp 
)
static

Definition at line 1188 of file jscript.c.

1192{
1196 jsdisp_t *dispex;
1197 jsexcept_t ei;
1198 HRESULT hres;
1199
1200 TRACE("(%p)->(%s %s %s %s %p %s %s %lu %lx %p)\n", This, debugstr_w(pstrCode), debugstr_w(pstrFormalParams),
1201 debugstr_w(pstrProcedureName), debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1202 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLineNumber, dwFlags, ppdisp);
1203
1204 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED)
1205 return E_UNEXPECTED;
1206
1207 if(pstrItemName) {
1208 item = lookup_named_item(This->ctx, pstrItemName, 0);
1209 if(!item) {
1210 WARN("Unknown context %s\n", debugstr_w(pstrItemName));
1211 return E_INVALIDARG;
1212 }
1213 if(!item->script_obj) item = NULL;
1214 }
1215
1216 enter_script(This->ctx, &ei);
1217 hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLineNumber, pstrFormalParams,
1218 pstrDelimiter, FALSE, This->is_encode, item, &code);
1219 if(FAILED(hres))
1220 return leave_script(This->ctx, hres);
1221
1222 hres = create_source_function(This->ctx, code, &code->global_code, NULL, &dispex);
1224
1225 hres = leave_script(This->ctx, hres);
1226 if(FAILED(hres))
1227 return hres;
1228
1229 *ppdisp = to_disp(dispex);
1230 return S_OK;
1231}
#define FALSE
Definition: types.h:117
HRESULT create_source_function(script_ctx_t *, bytecode_t *, function_code_t *, scope_chain_t *, jsdisp_t **)
Definition: function.c:953

◆ JScriptParseProcedure_QueryInterface()

static HRESULT WINAPI JScriptParseProcedure_QueryInterface ( IActiveScriptParseProcedure2 *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1170 of file jscript.c.

1171{
1173 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1174}

◆ JScriptParseProcedure_Release()

static ULONG WINAPI JScriptParseProcedure_Release ( IActiveScriptParseProcedure2 *  iface)
static

Definition at line 1182 of file jscript.c.

1183{
1185 return IActiveScript_Release(&This->IActiveScript_iface);
1186}

◆ JScriptProperty_AddRef()

static ULONG WINAPI JScriptProperty_AddRef ( IActiveScriptProperty iface)
static

Definition at line 1251 of file jscript.c.

1252{
1254 return IActiveScript_AddRef(&This->IActiveScript_iface);
1255}
static JScript * impl_from_IActiveScriptProperty(IActiveScriptProperty *iface)
Definition: jscript.c:1240

◆ JScriptProperty_GetProperty()

static HRESULT WINAPI JScriptProperty_GetProperty ( IActiveScriptProperty iface,
DWORD  dwProperty,
VARIANT pvarIndex,
VARIANT pvarValue 
)
static

Definition at line 1263 of file jscript.c.

1265{
1267 FIXME("(%p)->(%lx %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
1268 return E_NOTIMPL;
1269}

◆ JScriptProperty_QueryInterface()

static HRESULT WINAPI JScriptProperty_QueryInterface ( IActiveScriptProperty iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1245 of file jscript.c.

1246{
1248 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1249}

◆ JScriptProperty_Release()

static ULONG WINAPI JScriptProperty_Release ( IActiveScriptProperty iface)
static

Definition at line 1257 of file jscript.c.

1258{
1260 return IActiveScript_Release(&This->IActiveScript_iface);
1261}

◆ JScriptProperty_SetProperty()

static HRESULT WINAPI JScriptProperty_SetProperty ( IActiveScriptProperty iface,
DWORD  dwProperty,
VARIANT pvarIndex,
VARIANT pvarValue 
)
static

Definition at line 1271 of file jscript.c.

1273{
1275
1276 TRACE("(%p)->(%lx %s %s)\n", This, dwProperty, debugstr_variant(pvarIndex), debugstr_variant(pvarValue));
1277
1278 if(pvarIndex)
1279 FIXME("unsupported pvarIndex\n");
1280
1281 switch(dwProperty) {
1282 case SCRIPTPROP_INVOKEVERSIONING:
1283 if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0
1284 || (V_I4(pvarValue) > 15 && !(V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML))) {
1285 WARN("invalid value %s\n", debugstr_variant(pvarValue));
1286 return E_INVALIDARG;
1287 }
1288
1289 This->version = V_I4(pvarValue) & 0x1ff;
1290 This->html_mode = (V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML) != 0;
1291 break;
1292 default:
1293 FIXME("Unimplemented property %lx\n", dwProperty);
1294 return E_NOTIMPL;
1295 }
1296
1297 return S_OK;
1298}
@ VT_I4
Definition: compat.h:2298
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
#define SCRIPTLANGUAGEVERSION_HTML
Definition: jscript.h:48
#define V_I4(A)
Definition: oleauto.h:247

◆ JScriptSafety_AddRef()

static ULONG WINAPI JScriptSafety_AddRef ( IObjectSafety iface)
static

Definition at line 1319 of file jscript.c.

1320{
1322 return IActiveScript_AddRef(&This->IActiveScript_iface);
1323}
static JScript * impl_from_IObjectSafety(IObjectSafety *iface)
Definition: jscript.c:1308

◆ JScriptSafety_GetInterfaceSafetyOptions()

static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions ( IObjectSafety iface,
REFIID  riid,
DWORD pdwSupportedOptions,
DWORD pdwEnabledOptions 
)
static

Definition at line 1333 of file jscript.c.

1335{
1337
1338 TRACE("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
1339
1340 if(!pdwSupportedOptions || !pdwEnabledOptions)
1341 return E_POINTER;
1342
1343 *pdwSupportedOptions = SUPPORTED_OPTIONS;
1344 *pdwEnabledOptions = This->safeopt;
1345
1346 return S_OK;
1347}
#define SUPPORTED_OPTIONS
Definition: jscript.c:1331

◆ JScriptSafety_QueryInterface()

static HRESULT WINAPI JScriptSafety_QueryInterface ( IObjectSafety iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1313 of file jscript.c.

1314{
1316 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1317}

◆ JScriptSafety_Release()

static ULONG WINAPI JScriptSafety_Release ( IObjectSafety iface)
static

Definition at line 1325 of file jscript.c.

1326{
1328 return IActiveScript_Release(&This->IActiveScript_iface);
1329}

◆ JScriptSafety_SetInterfaceSafetyOptions()

static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions ( IObjectSafety iface,
REFIID  riid,
DWORD  dwOptionSetMask,
DWORD  dwEnabledOptions 
)
static

Definition at line 1349 of file jscript.c.

1351{
1353
1354 TRACE("(%p)->(%s %lx %lx)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
1355
1356 if(dwOptionSetMask & ~SUPPORTED_OPTIONS)
1357 return E_FAIL;
1358
1359 This->safeopt = (dwEnabledOptions & dwOptionSetMask) | (This->safeopt & ~dwOptionSetMask) | INTERFACE_USES_DISPEX;
1360 return S_OK;
1361}

◆ leave_script()

HRESULT leave_script ( script_ctx_t ctx,
HRESULT  result 
)

Definition at line 348 of file jscript.c.

349{
350 jsexcept_t *ei = ctx->ei;
351 BOOL enter_notified = ei->enter_notified;
353
354 TRACE("ctx %p ei %p prev %p\n", ctx, ei, ei->prev);
355
356 ctx->ei = ei->prev;
357 if(result == DISP_E_EXCEPTION) {
358 result = ei->error;
359 }else {
360 reset_ei(ei);
361 ei->error = result;
362 }
363 if(FAILED(result)) {
364 WARN("%08lx\n", result);
365 if(ctx->site && (error = malloc(sizeof(*error)))) {
367
368 error->IActiveScriptError_iface.lpVtbl = &JScriptErrorVtbl;
369 error->ref = 1;
370 error->ei = *ei;
371 memset(ei, 0, sizeof(*ei));
372
373 hres = IActiveScriptSite_OnScriptError(ctx->site, &error->IActiveScriptError_iface);
374 IActiveScriptError_Release(&error->IActiveScriptError_iface);
375 if(hres == S_OK)
376 result = SCRIPT_E_REPORTED;
377 }
378 }
379 if(enter_notified && ctx->site)
380 IActiveScriptSite_OnLeaveScript(ctx->site);
381 reset_ei(ei);
382 return result;
383}
static const IActiveScriptErrorVtbl JScriptErrorVtbl
Definition: jscript.c:305
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint64EXT * result
Definition: glext.h:11304
#define error(str)
Definition: mkdosfs.c:1605
BOOL enter_notified
Definition: engine.h:266
HRESULT error
Definition: engine.h:254
#define DISP_E_EXCEPTION
Definition: winerror.h:3621

Referenced by DispatchEx_InvokeEx(), exec_queued_code(), JScriptParse_ParseScriptText(), JScriptParseProcedure_ParseProcedureText(), variant_change_type(), and VariantChangeType_ChangeType().

◆ lookup_named_item()

named_item_t * lookup_named_item ( script_ctx_t ctx,
const WCHAR item_name,
unsigned  flags 
)

Definition at line 162 of file jscript.c.

163{
165 HRESULT hr;
166
167 LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) {
168 if((item->flags & flags) == flags && !wcscmp(item->name, item_name)) {
169 if(!item->script_obj && !(item->flags & SCRIPTITEM_GLOBALMEMBERS)) {
171 if(FAILED(hr)) return NULL;
172 }
173
174 if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
176 if(FAILED(hr)) continue;
177 }
178
179 return item;
180 }
181 }
182
183 return NULL;
184}
HRESULT hr
Definition: delayimp.cpp:582
HRESULT create_named_item_script_obj(script_ctx_t *ctx, named_item_t *item)
Definition: jscript.c:124
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
GLbitfield flags
Definition: glext.h:7161

Referenced by compile_script(), identifier_eval(), JScript_GetScriptDispatch(), JScriptParse_ParseScriptText(), JScriptParseProcedure_ParseProcedureText(), and lookup_identifier().

◆ release_named_item()

void release_named_item ( named_item_t item)

Definition at line 186 of file jscript.c.

187{
188 if(--item->ref) return;
189
190 free(item->name);
191 free(item);
192}

Referenced by decrease_state(), release_bytecode(), release_named_item_list(), and release_vbscode().

◆ release_named_item_list()

static void release_named_item_list ( JScript This)
static

Definition at line 417 of file jscript.c.

418{
419 while(!list_empty(&This->ctx->named_items)) {
420 named_item_t *iter = LIST_ENTRY(list_head(&This->ctx->named_items), named_item_t, entry);
421 list_remove(&iter->entry);
422 release_named_item(iter);
423 }
424}
struct list entry
Definition: jscript.h:156

Referenced by JScript_Close().

◆ release_named_item_script_obj()

static void release_named_item_script_obj ( named_item_t item)
static

Definition at line 130 of file jscript.c.

131{
132 if(!item->script_obj) return;
133
134 jsdisp_release(item->script_obj);
135 item->script_obj = NULL;
136}
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911

Referenced by decrease_state(), and release_persistent_script_objs().

◆ release_persistent_script_objs()

static void release_persistent_script_objs ( JScript This)
static

Definition at line 408 of file jscript.c.

409{
410 bytecode_t *iter;
411
412 LIST_FOR_EACH_ENTRY(iter, &This->persistent_code, bytecode_t, entry)
413 if(iter->named_item)
415}
named_item_t * named_item
Definition: engine.h:199

Referenced by decrease_state().

◆ reset_ei()

void reset_ei ( jsexcept_t ei)

Definition at line 314 of file jscript.c.

315{
316 ei->error = S_OK;
317 if(ei->valid_value) {
318 jsval_release(ei->value);
319 ei->valid_value = FALSE;
320 }
321 if(ei->code) {
323 ei->code = NULL;
324 ei->loc = 0;
325 }
326 if(ei->source) {
328 ei->source = NULL;
329 }
330 if(ei->message) {
332 ei->message = NULL;
333 }
334 if(ei->line) {
335 jsstr_release(ei->line);
336 ei->line = NULL;
337 }
338}
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
unsigned loc
Definition: engine.h:264
BOOL valid_value
Definition: engine.h:256
bytecode_t * code
Definition: engine.h:263
jsstr_t * message
Definition: engine.h:260
jsstr_t * line
Definition: engine.h:261
jsval_t value
Definition: engine.h:257
jsstr_t * source
Definition: engine.h:259

Referenced by handle_dispatch_exception(), JScriptError_Release(), leave_script(), set_error_value(), and throw_error().

◆ retrieve_named_item_disp()

static HRESULT retrieve_named_item_disp ( IActiveScriptSite site,
named_item_t item 
)
static

Definition at line 138 of file jscript.c.

139{
140 IUnknown *unk;
141 HRESULT hr;
142
143 if(!site)
144 return E_UNEXPECTED;
145
146 hr = IActiveScriptSite_GetItemInfo(site, item->name, SCRIPTINFO_IUNKNOWN, &unk, NULL);
147 if(FAILED(hr)) {
148 WARN("GetItemInfo failed: %08lx\n", hr);
149 return hr;
150 }
151
152 hr = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
153 IUnknown_Release(unk);
154 if(FAILED(hr)) {
155 WARN("object does not implement IDispatch\n");
156 return hr;
157 }
158
159 return S_OK;
160}
static IActiveScriptSite * site
Definition: script.c:149

Referenced by JScript_SetScriptSite(), and lookup_named_item().

◆ script_globals_release()

static void script_globals_release ( script_ctx_t ctx)
static

Definition at line 96 of file jscript.c.

97{
98 unsigned i;
99 for(i = 0; i < ARRAY_SIZE(ctx->global_objects); i++) {
100 if(ctx->global_objects[i]) {
101 jsdisp_release(ctx->global_objects[i]);
102 ctx->global_objects[i] = NULL;
103 }
104 }
105}
#define ARRAY_SIZE(A)
Definition: main.h:20
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248

Referenced by decrease_state().

◆ script_release()

void script_release ( script_ctx_t ctx)

Definition at line 75 of file jscript.c.

76{
77 if(--ctx->ref)
78 return;
79
80 jsval_release(ctx->acc);
81 if(ctx->cc)
82 release_cc(ctx->cc);
83 heap_pool_free(&ctx->tmp_heap);
84 if(ctx->last_match)
85 jsstr_release(ctx->last_match);
86 assert(!ctx->stack_top);
87 free(ctx->stack);
88
89 ctx->jscaller->ctx = NULL;
90 IServiceProvider_Release(&ctx->jscaller->IServiceProvider_iface);
91
92 release_thread_data(ctx->thread_data);
93 free(ctx);
94}
void release_cc(cc_ctx_t *)
Definition: lex.c:817
void heap_pool_free(heap_pool_t *)
Definition: jsutils.c:164
CONTEXT ctx

Referenced by JScript_Release(), and jsdisp_free().

◆ VariantChangeType_AddRef()

static ULONG WINAPI VariantChangeType_AddRef ( IVariantChangeType iface)
static

Definition at line 1382 of file jscript.c.

1383{
1385 return IActiveScript_AddRef(&This->IActiveScript_iface);
1386}
static JScript * impl_from_IVariantChangeType(IVariantChangeType *iface)
Definition: jscript.c:1371

◆ VariantChangeType_ChangeType()

static HRESULT WINAPI VariantChangeType_ChangeType ( IVariantChangeType iface,
VARIANT dst,
VARIANT src,
LCID  lcid,
VARTYPE  vt 
)
static

Definition at line 1394 of file jscript.c.

1395{
1397 jsexcept_t ei;
1398 VARIANT res;
1399 HRESULT hres;
1400
1401 TRACE("(%p)->(%p %s %lx %s)\n", This, dst, debugstr_variant(src), lcid, debugstr_vt(vt));
1402
1403 if(!This->ctx) {
1404 FIXME("Object uninitialized\n");
1405 return E_UNEXPECTED;
1406 }
1407
1408 enter_script(This->ctx, &ei);
1409 hres = variant_change_type(This->ctx, &res, src, vt);
1410 hres = leave_script(This->ctx, hres);
1411 if(FAILED(hres))
1412 return hres;
1413
1415 if(FAILED(hres)) {
1416 VariantClear(&res);
1417 return hres;
1418 }
1419
1420 *dst = res;
1421 return S_OK;
1422}
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
GLuint res
Definition: glext.h:9613
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
HRESULT variant_change_type(script_ctx_t *, VARIANT *, VARIANT *, VARTYPE)
Definition: jsutils.c:922
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

◆ VariantChangeType_QueryInterface()

static HRESULT WINAPI VariantChangeType_QueryInterface ( IVariantChangeType iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1376 of file jscript.c.

1377{
1379 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1380}

◆ VariantChangeType_Release()

static ULONG WINAPI VariantChangeType_Release ( IVariantChangeType iface)
static

Definition at line 1388 of file jscript.c.

1389{
1391 return IActiveScript_Release(&This->IActiveScript_iface);
1392}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

◆ WineJScript_AddRef()

static ULONG WINAPI WineJScript_AddRef ( IWineJScript iface)
static

Definition at line 1442 of file jscript.c.

1443{
1445 return IActiveScript_AddRef(&This->IActiveScript_iface);
1446}
static JScript * impl_from_IWineJScript(IWineJScript *iface)
Definition: jscript.c:1431

◆ WineJScript_InitHostConstructor()

static HRESULT WINAPI WineJScript_InitHostConstructor ( IWineJScript iface,
IWineJSDispatchHost constr,
IWineJSDispatch prototype,
IWineJSDispatch **  ret 
)
static

Definition at line 1461 of file jscript.c.

1463{
1465 return init_host_constructor(This->ctx, constr, prototype, ret);
1466}
HRESULT init_host_constructor(script_ctx_t *ctx, IWineJSDispatchHost *host_constr, IWineJSDispatch *prototype, IWineJSDispatch **ret)
Definition: function.c:1190

◆ WineJScript_InitHostObject()

static HRESULT WINAPI WineJScript_InitHostObject ( IWineJScript iface,
IWineJSDispatchHost host_obj,
IWineJSDispatch prototype,
UINT32  flags,
IWineJSDispatch **  ret 
)
static

Definition at line 1454 of file jscript.c.

1456{
1458 return init_host_object(This->ctx, host_obj, prototype, flags, ret);
1459}
IHost host_obj
Definition: host.c:474
HRESULT init_host_object(script_ctx_t *ctx, IWineJSDispatchHost *host_iface, IWineJSDispatch *prototype_iface, UINT32 flags, IWineJSDispatch **ret)
Definition: dispex.c:3557

◆ WineJScript_QueryInterface()

static HRESULT WINAPI WineJScript_QueryInterface ( IWineJScript iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1436 of file jscript.c.

1437{
1439 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1440}

◆ WineJScript_Release()

static ULONG WINAPI WineJScript_Release ( IWineJScript iface)
static

Definition at line 1448 of file jscript.c.

1449{
1451 return IActiveScript_Release(&This->IActiveScript_iface);
1452}

Variable Documentation

◆ AXSiteVtbl

IServiceProviderVtbl AXSiteVtbl
static
Initial value:
= {
}
static ULONG WINAPI AXSite_Release(IServiceProvider *iface)
Definition: jscript.c:576
static ULONG WINAPI AXSite_AddRef(IServiceProvider *iface)
Definition: jscript.c:566
static HRESULT WINAPI AXSite_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: jscript.c:546
static HRESULT WINAPI AXSite_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: jscript.c:594

Definition at line 607 of file jscript.c.

Referenced by create_ax_site().

◆ JScriptErrorVtbl

const IActiveScriptErrorVtbl JScriptErrorVtbl
static
Initial value:
= {
}
static HRESULT WINAPI JScriptError_GetExceptionInfo(IActiveScriptError *iface, EXCEPINFO *excepinfo)
Definition: jscript.c:244
static ULONG WINAPI JScriptError_Release(IActiveScriptError *iface)
Definition: jscript.c:229
static HRESULT WINAPI JScriptError_GetSourcePosition(IActiveScriptError *iface, DWORD *source_context, ULONG *line, LONG *character)
Definition: jscript.c:262
static ULONG WINAPI JScriptError_AddRef(IActiveScriptError *iface)
Definition: jscript.c:219
static HRESULT WINAPI JScriptError_GetSourceLineText(IActiveScriptError *iface, BSTR *source)
Definition: jscript.c:288
static HRESULT WINAPI JScriptError_QueryInterface(IActiveScriptError *iface, REFIID riid, void **ppv)
Definition: jscript.c:199

Definition at line 305 of file jscript.c.

Referenced by leave_script().

◆ JScriptParseProcedureVtbl

const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
static
Initial value:
= {
}
static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface, LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
Definition: jscript.c:1188
static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
Definition: jscript.c:1170
static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1176
static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1182

Definition at line 1233 of file jscript.c.

Referenced by create_jscript_object().

◆ JScriptParseVtbl

const IActiveScriptParseVtbl JScriptParseVtbl
static
Initial value:
= {
}
static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
Definition: jscript.c:1051
static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
Definition: jscript.c:1057
static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface, LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, BSTR *pbstrName, EXCEPINFO *pexcepinfo)
Definition: jscript.c:1072
static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
Definition: jscript.c:1039
static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
Definition: jscript.c:1045
static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine, DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
Definition: jscript.c:1086

Definition at line 1156 of file jscript.c.

Referenced by create_jscript_object().

◆ JScriptPropertyVtbl

const IActiveScriptPropertyVtbl JScriptPropertyVtbl
static
Initial value:
= {
}
static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
Definition: jscript.c:1271
static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
Definition: jscript.c:1263
static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
Definition: jscript.c:1251
static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
Definition: jscript.c:1245
static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
Definition: jscript.c:1257

Definition at line 1300 of file jscript.c.

Referenced by create_jscript_object().

◆ JScriptSafetyVtbl

const IObjectSafetyVtbl JScriptSafetyVtbl
static
Initial value:
= {
}
static ULONG WINAPI JScriptSafety_AddRef(IObjectSafety *iface)
Definition: jscript.c:1319
static HRESULT WINAPI JScriptSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
Definition: jscript.c:1313
static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
Definition: jscript.c:1333
static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
Definition: jscript.c:1349
static ULONG WINAPI JScriptSafety_Release(IObjectSafety *iface)
Definition: jscript.c:1325

Definition at line 1363 of file jscript.c.

Referenced by create_jscript_object().

◆ JScriptVtbl

const IActiveScriptVtbl JScriptVtbl
static
Initial value:
= {
}
static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
Definition: jscript.c:815
static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface, SCRIPTTHREADID *pstridThread)
Definition: jscript.c:976
static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
Definition: jscript.c:687
static ULONG WINAPI JScript_Release(IActiveScript *iface)
Definition: jscript.c:697
static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
Definition: jscript.c:887
static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass)
Definition: jscript.c:720
static HRESULT WINAPI JScript_Close(IActiveScript *iface)
Definition: jscript.c:872
static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
Definition: jscript.c:1008
static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface, SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
Definition: jscript.c:992
static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib, DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
Definition: jscript.c:940
static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
Definition: jscript.c:856
static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
Definition: jscript.c:948
static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid, void **ppvObject)
Definition: jscript.c:807
static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface, SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
Definition: jscript.c:1000
static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface, DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
Definition: jscript.c:984
static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
Definition: jscript.c:643

Definition at line 1015 of file jscript.c.

Referenced by create_jscript_object().

◆ VariantChangeTypeVtbl

const IVariantChangeTypeVtbl VariantChangeTypeVtbl
static
Initial value:
= {
}
static HRESULT WINAPI VariantChangeType_ChangeType(IVariantChangeType *iface, VARIANT *dst, VARIANT *src, LCID lcid, VARTYPE vt)
Definition: jscript.c:1394
static ULONG WINAPI VariantChangeType_Release(IVariantChangeType *iface)
Definition: jscript.c:1388
static ULONG WINAPI VariantChangeType_AddRef(IVariantChangeType *iface)
Definition: jscript.c:1382
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
Definition: jscript.c:1376

Definition at line 1424 of file jscript.c.

Referenced by create_jscript_object().

◆ WineJScriptVtbl

const IWineJScriptVtbl WineJScriptVtbl
static
Initial value:
= {
}
static ULONG WINAPI WineJScript_Release(IWineJScript *iface)
Definition: jscript.c:1448
static HRESULT WINAPI WineJScript_QueryInterface(IWineJScript *iface, REFIID riid, void **ppv)
Definition: jscript.c:1436
static ULONG WINAPI WineJScript_AddRef(IWineJScript *iface)
Definition: jscript.c:1442
static HRESULT WINAPI WineJScript_InitHostObject(IWineJScript *iface, IWineJSDispatchHost *host_obj, IWineJSDispatch *prototype, UINT32 flags, IWineJSDispatch **ret)
Definition: jscript.c:1454
static HRESULT WINAPI WineJScript_InitHostConstructor(IWineJScript *iface, IWineJSDispatchHost *constr, IWineJSDispatch *prototype, IWineJSDispatch **ret)
Definition: jscript.c:1461

Definition at line 1468 of file jscript.c.

Referenced by create_jscript_object().