ReactOS 0.4.17-dev-357-ga8f14ff
vbscript.h File Reference
#include <stdarg.h>
#include <stdint.h>
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "dispex.h"
#include "activscp.h"
#include "activdbg.h"
#include "vbscript_classes.h"
#include "vbscript_defs.h"
#include "wine/list.h"
Include dependency graph for vbscript.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  heap_pool_t
 
struct  array_desc_t
 
struct  vbdisp_prop_desc_t
 
struct  vbdisp_funcprop_desc_t
 
struct  _class_desc_t
 
struct  _vbdisp_t
 
struct  _dynamic_var_t
 
struct  ScriptDisp
 
struct  BuiltinDisp
 
struct  named_item_t
 
struct  vbcaller
 
struct  _script_ctx_t
 
union  instr_arg_t
 
struct  instr_t
 
struct  arg_desc_t
 
struct  var_desc_t
 
struct  _function_t
 
struct  _vbscode_t
 

Macros

#define COBJMACROS
 
#define SP_CALLER_UNINITIALIZED   ((IServiceProvider*)IntToPtr(-1))
 
#define OP_LIST
 
#define X(x, n, a, b)   OP_##x,
 
#define FACILITY_VBS   0xa
 
#define MAKE_VBSERROR(code)   MAKE_HRESULT(SEVERITY_ERROR, FACILITY_VBS, code)
 
#define VBSCRIPT_BUILD_VERSION   16978
 
#define VBSCRIPT_MAJOR_VERSION   5
 
#define VBSCRIPT_MINOR_VERSION   8
 

Typedefs

typedef struct _function_t function_t
 
typedef struct _vbscode_t vbscode_t
 
typedef struct _script_ctx_t script_ctx_t
 
typedef struct _vbdisp_t vbdisp_t
 
typedef struct _class_desc_t class_desc_t
 
typedef struct _dynamic_var_t dynamic_var_t
 
typedef struct _builtin_prop_t builtin_prop_t
 
typedef struct named_item_t named_item_t
 

Enumerations

enum  vbdisp_invoke_type_t { VBDISP_CALLGET , VBDISP_LET , VBDISP_SET , VBDISP_ANY }
 
enum  instr_arg_type_t {
  ARG_NONE = 0 , ARG_ADDR , ARG_BSTR , ARG_DBL ,
  ARG_FUNC , ARG_INT , ARG_STR , ARG_UINT ,
  ARG_NONE = 0 , ARG_STR , ARG_BSTR , ARG_INT ,
  ARG_UINT , ARG_ADDR , ARG_DOUBLE , ARG_DATE
}
 
enum  vbsop_t { OP_LAST }
 
enum  function_type_t {
  FUNC_GLOBAL , FUNC_FUNCTION , FUNC_SUB , FUNC_PROPGET ,
  FUNC_PROPLET , FUNC_PROPSET
}
 

Functions

void heap_pool_init (heap_pool_t *)
 
voidheap_pool_alloc (heap_pool_t *, size_t) __WINE_ALLOC_SIZE(2)
 
voidheap_pool_grow (heap_pool_t *, void *, DWORD, DWORD)
 
void heap_pool_clear (heap_pool_t *)
 
void heap_pool_free (heap_pool_t *)
 
heap_pool_theap_pool_mark (heap_pool_t *)
 
HRESULT create_vbdisp (const class_desc_t *, vbdisp_t **)
 
HRESULT disp_get_id (IDispatch *, BSTR, vbdisp_invoke_type_t, BOOL, DISPID *)
 
HRESULT vbdisp_get_id (vbdisp_t *, BSTR, vbdisp_invoke_type_t, BOOL, DISPID *)
 
HRESULT disp_call (script_ctx_t *, IDispatch *, DISPID, DISPPARAMS *, VARIANT *)
 
HRESULT disp_propput (script_ctx_t *, IDispatch *, DISPID, WORD, DISPPARAMS *)
 
HRESULT get_disp_value (script_ctx_t *, IDispatch *, VARIANT *)
 
void collect_objects (script_ctx_t *)
 
HRESULT create_script_disp (script_ctx_t *, ScriptDisp **)
 
HRESULT to_int (VARIANT *, int *)
 
static unsigned arg_cnt (const DISPPARAMS *dp)
 
static VARIANTget_arg (DISPPARAMS *dp, DWORD i)
 
HRESULT init_global (script_ctx_t *)
 
HRESULT init_err (script_ctx_t *)
 
IUnknowncreate_ax_site (script_ctx_t *)
 
static void grab_vbscode (vbscode_t *code)
 
void release_vbscode (vbscode_t *)
 
HRESULT compile_script (script_ctx_t *, const WCHAR *, const WCHAR *, const WCHAR *, DWORD_PTR, unsigned, DWORD, vbscode_t **)
 
HRESULT compile_procedure (script_ctx_t *, const WCHAR *, const WCHAR *, const WCHAR *, DWORD_PTR, unsigned, DWORD, class_desc_t **)
 
HRESULT exec_script (script_ctx_t *, BOOL, function_t *, vbdisp_t *, DISPPARAMS *, VARIANT *)
 
void release_dynamic_var (dynamic_var_t *)
 
named_item_tlookup_named_item (script_ctx_t *, const WCHAR *, unsigned)
 
void release_named_item (named_item_t *)
 
void clear_ei (EXCEPINFO *)
 
HRESULT report_script_error (script_ctx_t *, const vbscode_t *, unsigned)
 
void detach_global_objects (script_ctx_t *)
 
HRESULT get_builtin_id (BuiltinDisp *, const WCHAR *, DISPID *)
 
HRESULT array_access (SAFEARRAY *array, DISPPARAMS *dp, VARIANT **ret)
 
void release_regexp_typelib (void)
 
HRESULT get_dispatch_typeinfo (ITypeInfo **)
 
static BOOL is_int32 (double d)
 
static BOOL is_digit (WCHAR c)
 
HRESULT create_regexp (IDispatch **)
 
BSTR string_replace (BSTR, BSTR, BSTR, int, int, int)
 
void map_vbs_exception (EXCEPINFO *)
 
HRESULT create_safearray_iter (SAFEARRAY *sa, BOOL owned, IEnumVARIANT **ev)
 
HRESULT WINAPI VBScriptFactory_CreateInstance (IClassFactory *, IUnknown *, REFIID, void **)
 
HRESULT WINAPI VBScriptRegExpFactory_CreateInstance (IClassFactory *, IUnknown *, REFIID, void **)
 
BSTR get_vbscript_string (int)
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 24 of file vbscript.h.

◆ FACILITY_VBS

#define FACILITY_VBS   0xa

Definition at line 424 of file vbscript.h.

◆ MAKE_VBSERROR

#define MAKE_VBSERROR (   code)    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_VBS, code)

Definition at line 425 of file vbscript.h.

◆ OP_LIST

#define OP_LIST

Definition at line 235 of file vbscript.h.

◆ SP_CALLER_UNINITIALIZED

#define SP_CALLER_UNINITIALIZED   ((IServiceProvider*)IntToPtr(-1))

Definition at line 185 of file vbscript.h.

◆ VBSCRIPT_BUILD_VERSION

#define VBSCRIPT_BUILD_VERSION   16978

Definition at line 432 of file vbscript.h.

◆ VBSCRIPT_MAJOR_VERSION

#define VBSCRIPT_MAJOR_VERSION   5

Definition at line 433 of file vbscript.h.

◆ VBSCRIPT_MINOR_VERSION

#define VBSCRIPT_MINOR_VERSION   8

Definition at line 434 of file vbscript.h.

◆ X

#define X (   x,
  n,
  a,
  b 
)    OP_##x,

Definition at line 304 of file vbscript.h.

Typedef Documentation

◆ builtin_prop_t

Definition at line 144 of file vbscript.h.

◆ class_desc_t

◆ dynamic_var_t

◆ function_t

Definition at line 54 of file vbscript.h.

◆ named_item_t

◆ script_ctx_t

Definition at line 56 of file vbscript.h.

◆ vbdisp_t

Definition at line 57 of file vbscript.h.

◆ vbscode_t

Definition at line 55 of file vbscript.h.

Enumeration Type Documentation

◆ function_type_t

Enumerator
FUNC_GLOBAL 
FUNC_FUNCTION 
FUNC_SUB 
FUNC_PROPGET 
FUNC_PROPLET 
FUNC_PROPSET 

Definition at line 331 of file vbscript.h.

331 {
334 FUNC_SUB,
function_type_t
Definition: vbscript.h:331
@ FUNC_PROPLET
Definition: vbscript.h:336
@ FUNC_PROPSET
Definition: vbscript.h:337
@ FUNC_SUB
Definition: vbscript.h:334
@ FUNC_PROPGET
Definition: vbscript.h:335
@ FUNC_GLOBAL
Definition: vbscript.h:332
@ FUNC_FUNCTION
Definition: vbscript.h:333

◆ instr_arg_type_t

Enumerator
ARG_NONE 
ARG_ADDR 
ARG_BSTR 
ARG_DBL 
ARG_FUNC 
ARG_INT 
ARG_STR 
ARG_UINT 
ARG_NONE 
ARG_STR 
ARG_BSTR 
ARG_INT 
ARG_UINT 
ARG_ADDR 
ARG_DOUBLE 
ARG_DATE 

Definition at line 224 of file vbscript.h.

224 {
225 ARG_NONE = 0,
226 ARG_STR,
227 ARG_BSTR,
228 ARG_INT,
229 ARG_UINT,
230 ARG_ADDR,
instr_arg_type_t
Definition: vbscript.h:224
@ ARG_DATE
Definition: vbscript.h:232
@ ARG_INT
Definition: vbscript.h:228
@ ARG_ADDR
Definition: vbscript.h:230
@ ARG_BSTR
Definition: vbscript.h:227
@ ARG_NONE
Definition: vbscript.h:225
@ ARG_DOUBLE
Definition: vbscript.h:231
@ ARG_STR
Definition: vbscript.h:226
@ ARG_UINT
Definition: vbscript.h:229

◆ vbdisp_invoke_type_t

Enumerator
VBDISP_CALLGET 
VBDISP_LET 
VBDISP_SET 
VBDISP_ANY 

Definition at line 59 of file vbscript.h.

59 {
vbdisp_invoke_type_t
Definition: vbscript.h:59
@ VBDISP_LET
Definition: vbscript.h:61
@ VBDISP_SET
Definition: vbscript.h:62
@ VBDISP_CALLGET
Definition: vbscript.h:60
@ VBDISP_ANY
Definition: vbscript.h:63

◆ vbsop_t

Enumerator
OP_LAST 

Definition at line 303 of file vbscript.h.

303 {
304#define X(x,n,a,b) OP_##x,
306#undef X
307 OP_LAST
308} vbsop_t;
vbsop_t
Definition: vbscript.h:303
@ OP_LAST
Definition: vbscript.h:307
#define OP_LIST
Definition: vbscript.h:235

Function Documentation

◆ arg_cnt()

◆ array_access()

HRESULT array_access ( SAFEARRAY array,
DISPPARAMS *  dp,
VARIANT **  ret 
)

Definition at line 525 of file interp.c.

526{
527 unsigned i, argc = arg_cnt(dp);
528 LONG *indices;
530
531 if(!array) {
532 FIXME("NULL array\n");
533 return E_FAIL;
534 }
535
537 if(FAILED(hres))
538 return hres;
539
540 if(array->cDims != argc) {
541 FIXME("argc %d does not match cDims %d\n", dp->cArgs, array->cDims);
543 return E_FAIL;
544 }
545
546 indices = malloc(sizeof(*indices) * argc);
547 if(!indices) {
549 return E_OUTOFMEMORY;
550 }
551
552 for(i=0; i<argc; i++) {
553 hres = to_int(get_arg(dp, i), (int *)(indices+i));
554 if(FAILED(hres)) {
555 free(indices);
557 return hres;
558 }
559 }
560
563 free(indices);
564 return hres;
565}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
static ULONG_PTR get_arg(int nr, DWORD flags, struct format_args *args)
Definition: format_msg.c:149
MonoAssembly int argc
Definition: metahost.c:107
HRESULT WINAPI SafeArrayUnlock(SAFEARRAY *psa)
Definition: safearray.c:831
HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY *psa, LONG *rgIndices, void **ppvData)
Definition: safearray.c:1194
HRESULT WINAPI SafeArrayLock(SAFEARRAY *psa)
Definition: safearray.c:795
return ret
Definition: mutex.c:146
GLuint GLuint GLsizei GLenum const GLvoid * indices
Definition: gl.h:1545
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
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hres
Definition: protocol.c:465
long LONG
Definition: pedump.c:60
Definition: undname.c:54
HRESULT to_int(VARIANT *v, int *ret)
Definition: global.c:419
static unsigned arg_cnt(const DISPPARAMS *dp)
Definition: vbscript.h:175

Referenced by assign_ident(), invoke_variant_prop(), and variant_call().

◆ clear_ei()

void clear_ei ( EXCEPINFO *  ei)

Definition at line 288 of file interp.c.

289{
290 SysFreeString(ei->bstrSource);
291 SysFreeString(ei->bstrDescription);
292 SysFreeString(ei->bstrHelpFile);
293 memset(ei, 0, sizeof(*ei));
294}
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define memset(x, y, z)
Definition: compat.h:39

Referenced by compile_error(), disp_call(), disp_propput(), Err_Clear(), exec_script(), interp_errmode(), and release_script().

◆ collect_objects()

void collect_objects ( script_ctx_t ctx)

Definition at line 1563 of file vbdisp.c.

1564{
1565 vbdisp_t *iter, *iter2;
1566
1567 LIST_FOR_EACH_ENTRY_SAFE(iter, iter2, &ctx->objects, vbdisp_t, entry)
1568 run_terminator(iter);
1569
1570 while(!list_empty(&ctx->objects)) {
1571 iter = LIST_ENTRY(list_head(&ctx->objects), vbdisp_t, entry);
1572
1573 IDispatchEx_AddRef(&iter->IDispatchEx_iface);
1574 clean_props(iter);
1575 iter->desc = NULL;
1576 list_remove(&iter->entry);
1577 list_init(&iter->entry);
1578 IDispatchEx_Release(&iter->IDispatchEx_iface);
1579 }
1580}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_init(struct list_entry *head)
Definition: list.h:51
#define NULL
Definition: types.h:112
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
IDispatchEx IDispatchEx_iface
Definition: vbscript.h:105
struct list entry
Definition: vbscript.h:109
const class_desc_t * desc
Definition: vbscript.h:111
Definition: list.h:15
#define LIST_ENTRY(type)
Definition: queue.h:175
static void clean_props(vbdisp_t *This)
Definition: vbdisp.c:278
static BOOL run_terminator(vbdisp_t *This)
Definition: vbdisp.c:261

◆ compile_procedure()

HRESULT compile_procedure ( script_ctx_t script,
const WCHAR src,
const WCHAR item_name,
const WCHAR delimiter,
DWORD_PTR  cookie,
unsigned  start_line,
DWORD  flags,
class_desc_t **  ret 
)

Definition at line 2078 of file compile.c.

2080{
2082 vbscode_t *code;
2083 HRESULT hres;
2084
2085 hres = compile_script(script, src, item_name, delimiter, cookie, start_line,
2086 flags & ~SCRIPTTEXT_ISPERSISTENT, &code);
2087 if(FAILED(hres))
2088 return hres;
2089
2090 if(!(desc = compiler_alloc_zero(code, sizeof(*desc))))
2091 return E_OUTOFMEMORY;
2092 if(!(desc->funcs = compiler_alloc_zero(code, sizeof(*desc->funcs))))
2093 return E_OUTOFMEMORY;
2094
2095 desc->ctx = script;
2096 desc->func_cnt = 1;
2097 desc->funcs->entries[VBDISP_CALLGET] = &code->main_code;
2098
2099 *ret = desc;
2100 return S_OK;
2101}
GLenum src
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
#define S_OK
Definition: intsafe.h:52
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1204
const char * delimiter
Definition: string.c:1779
script
Definition: msipriv.h:383
Definition: inflate.c:139
Definition: cookie.c:34
static void * compiler_alloc_zero(vbscode_t *vbscode, size_t size)
Definition: compile.c:123
HRESULT compile_script(script_ctx_t *script, const WCHAR *src, const WCHAR *item_name, const WCHAR *delimiter, DWORD_PTR cookie, unsigned start_line, DWORD flags, vbscode_t **ret)
Definition: compile.c:1986

Referenced by VBScriptParseProcedure_ParseProcedureText().

◆ compile_script()

HRESULT compile_script ( script_ctx_t script,
const WCHAR src,
const WCHAR item_name,
const WCHAR delimiter,
DWORD_PTR  cookie,
unsigned  start_line,
DWORD  flags,
vbscode_t **  ret 
)

Definition at line 1986 of file compile.c.

1988{
1989 function_decl_t *func_decl;
1991 class_decl_t *class_decl;
1992 function_t *new_func;
1994 vbscode_t *code;
1995 HRESULT hres;
1996
1997 if(item_name) {
1998 item = lookup_named_item(script, item_name, 0);
1999 if(!item) {
2000 WARN("Unknown context %s\n", debugstr_w(item_name));
2001 return E_INVALIDARG;
2002 }
2003 if(!item->script_obj) item = NULL;
2004 }
2005
2006 memset(&ctx, 0, sizeof(ctx));
2007 code = ctx.code = alloc_vbscode(&ctx, src, cookie, start_line);
2008 if(!ctx.code)
2009 return E_OUTOFMEMORY;
2010 if(item) {
2011 code->named_item = item;
2012 item->ref++;
2013 }
2014
2015 ctx.parser.lcid = script->lcid;
2016 hres = parse_script(&ctx.parser, code->source, delimiter, flags);
2017 if(FAILED(hres)) {
2018 if(ctx.parser.error_loc != -1)
2019 ctx.loc = ctx.parser.error_loc;
2022 return hres;
2023 }
2024
2025 hres = compile_func(&ctx, ctx.parser.stats, &ctx.code->main_code);
2026 if(FAILED(hres)) {
2029 return hres;
2030 }
2031
2032 code->option_explicit = ctx.parser.option_explicit;
2033 ctx.global_consts = ctx.const_decls;
2034 code->option_explicit = ctx.parser.option_explicit;
2035
2036
2037 for(func_decl = ctx.func_decls; func_decl; func_decl = func_decl->next) {
2038 hres = create_function(&ctx, func_decl, &new_func);
2039 if(FAILED(hres)) {
2042 return hres;
2043 }
2044
2045 new_func->next = ctx.code->funcs;
2046 ctx.code->funcs = new_func;
2047 }
2048
2049 for(class_decl = ctx.parser.class_decls; class_decl; class_decl = class_decl->next) {
2050 hres = compile_class(&ctx, class_decl);
2051 if(FAILED(hres)) {
2054 return hres;
2055 }
2056 }
2057
2059 if(FAILED(hres)) {
2062 return hres;
2063 }
2064
2065 code->is_persistent = (flags & SCRIPTTEXT_ISPERSISTENT) != 0;
2066
2067 if(TRACE_ON(vbscript_disas))
2068 dump_code(&ctx);
2069
2070 ctx.code = NULL;
2072
2073 list_add_tail(&script->code_list, &code->entry);
2074 *ret = code;
2075 return S_OK;
2076}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRACE_ON(x)
Definition: compat.h:75
named_item_t * lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
Definition: jscript.c:162
#define debugstr_w
Definition: kernel32.h:32
#define parse_script(p, s)
Definition: activex.c:681
struct _class_decl_t * next
Definition: parse.h:215
struct _function_decl_t * next
Definition: parse.h:202
function_t * next
Definition: vbscript.h:356
static void release_compiler(compile_ctx_t *ctx)
Definition: compile.c:1978
static HRESULT compile_class(compile_ctx_t *ctx, class_decl_t *class_decl)
Definition: compile.c:1718
static vbscode_t * alloc_vbscode(compile_ctx_t *ctx, const WCHAR *source, DWORD_PTR cookie, unsigned start_line)
Definition: compile.c:1935
static HRESULT compile_error(script_ctx_t *ctx, compile_ctx_t *compiler, HRESULT error)
Definition: compile.c:396
void release_vbscode(vbscode_t *code)
Definition: compile.c:1915
static HRESULT compile_func(compile_ctx_t *ctx, statement_t *stat, function_t *func)
Definition: compile.c:1497
static HRESULT check_script_collisions(compile_ctx_t *ctx, script_ctx_t *script)
Definition: compile.c:1892
static void dump_code(compile_ctx_t *ctx)
Definition: compile.c:105
static HRESULT create_function(compile_ctx_t *ctx, function_decl_t *decl, function_t **ret)
Definition: compile.c:1600

◆ 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}
static IServiceProviderVtbl AXSiteVtbl
Definition: jscript.c:607
static const WCHAR sp[]
Definition: suminfo.c:287
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by create_activex_object(), and set_object_site().

◆ create_regexp()

HRESULT create_regexp ( IDispatch **  ret)

Definition at line 1811 of file vbregexp.c.

1812{
1813 RegExp2 *regexp;
1814 HRESULT hres;
1815
1816 hres = init_regexp_typeinfo(RegExp2_tid);
1817 if(FAILED(hres))
1818 return hres;
1819
1820 regexp = calloc(1, sizeof(*regexp));
1821 if(!regexp)
1822 return E_OUTOFMEMORY;
1823
1824 regexp->IRegExp2_iface.lpVtbl = &RegExp2Vtbl;
1825 regexp->IRegExp_iface.lpVtbl = &RegExpVtbl;
1826 regexp->ref = 1;
1827 heap_pool_init(&regexp->pool);
1828
1829 *ret = (IDispatch*)&regexp->IRegExp2_iface;
1830 return S_OK;
1831}
void heap_pool_init(heap_pool_t *)
Definition: jsutils.c:66
#define calloc
Definition: rosglue.h:14
IRegExp IRegExp_iface
Definition: vbregexp.c:125
LONG ref
Definition: vbregexp.c:127
IRegExp2 IRegExp2_iface
Definition: vbregexp.c:124
heap_pool_t pool
Definition: vbregexp.c:131
static IRegExpVtbl RegExpVtbl
Definition: vbregexp.c:1792
static const IRegExp2Vtbl RegExp2Vtbl
Definition: vbregexp.c:1614
static HRESULT init_regexp_typeinfo(regexp_tid_t tid)
Definition: vbregexp.c:50

Referenced by VBScriptRegExpFactory_CreateInstance().

◆ create_safearray_iter()

HRESULT create_safearray_iter ( SAFEARRAY sa,
BOOL  owned,
IEnumVARIANT **  ev 
)

Definition at line 167 of file utils.c.

168{
169 safearray_iter *iter;
171
172 if(sa && !(sa->fFeatures & FADF_VARIANT)) {
173 FIXME("enumeration not supported: %x\n", sa->fFeatures);
174 return E_NOTIMPL;
175 }
176
177 iter = malloc(sizeof(*iter));
178 if(!iter)
179 return E_OUTOFMEMORY;
180
181 if(sa) {
183 if(FAILED(hres)) {
184 free(iter);
185 return hres;
186 }
187 }
188
190 iter->ref = 1;
191 iter->sa = sa;
192 iter->owned = owned;
193 iter->i = 0;
194 iter->size = get_safearray_size(sa);
195
196 *ev = &iter->IEnumVARIANT_iface;
197 return S_OK;
198}
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
#define E_NOTIMPL
Definition: ddrawi.h:99
static ULONG get_safearray_size(SAFEARRAY *sa)
Definition: utils.c:154
static const IEnumVARIANTVtbl safearray_iter_EnumVARIANTVtbl
Definition: utils.c:144
LONG ref
Definition: utils.c:28
BOOL owned
Definition: utils.c:31
ULONG size
Definition: utils.c:32
IEnumVARIANT IEnumVARIANT_iface
Definition: utils.c:26
SAFEARRAY * sa
Definition: utils.c:30
ULONG i
Definition: utils.c:32

Referenced by interp_newenum().

◆ create_script_disp()

HRESULT create_script_disp ( script_ctx_t ctx,
ScriptDisp **  ret 
)

Definition at line 1545 of file vbdisp.c.

1546{
1548
1549 script_disp = calloc(1, sizeof(*script_disp));
1550 if(!script_disp)
1551 return E_OUTOFMEMORY;
1552
1553 script_disp->IDispatchEx_iface.lpVtbl = &ScriptDispVtbl;
1554 script_disp->ref = 1;
1555 script_disp->ctx = ctx;
1557 script_disp->rnd = 0x50000;
1558
1559 *ret = script_disp;
1560 return S_OK;
1561}
static IDispatch * script_disp
Definition: run.c:195
static IDispatchExVtbl ScriptDispVtbl
Definition: vbdisp.c:1527

Referenced by exec_global_code(), lookup_named_item(), and VBScript_SetScriptSite().

◆ create_vbdisp()

HRESULT create_vbdisp ( const class_desc_t desc,
vbdisp_t **  ret 
)

Definition at line 507 of file vbdisp.c.

508{
509 vbdisp_t *vbdisp;
510 HRESULT hres = S_OK;
511
512 vbdisp = calloc( 1, FIELD_OFFSET( vbdisp_t, props[desc->prop_cnt] ));
513 if(!vbdisp)
514 return E_OUTOFMEMORY;
515
516 vbdisp->IDispatchEx_iface.lpVtbl = &DispatchExVtbl;
517 vbdisp->ref = 1;
518 vbdisp->desc = desc;
519
520 list_add_tail(&desc->ctx->objects, &vbdisp->entry);
521
522 if(desc->array_cnt) {
523 vbdisp->arrays = calloc(desc->array_cnt, sizeof(*vbdisp->arrays));
524 if(vbdisp->arrays) {
525 unsigned i, j;
526
527 for(i=0; i < desc->array_cnt; i++) {
528 if(!desc->array_descs[i].dim_cnt)
529 continue;
530
531 vbdisp->arrays[i] = SafeArrayCreate(VT_VARIANT, desc->array_descs[i].dim_cnt, desc->array_descs[i].bounds);
532 if(!vbdisp->arrays[i]) {
534 break;
535 }
536 }
537
538 if(SUCCEEDED(hres)) {
539 for(i=0, j=0; i < desc->prop_cnt; i++) {
540 if(desc->props[i].is_array) {
542 V_ARRAYREF(vbdisp->props+i) = vbdisp->arrays + j++;
543 }
544 }
545 }
546 }else {
548 }
549 }
550
551 if(SUCCEEDED(hres) && desc->class_initialize_id) {
552 DISPPARAMS dp = {0};
553 hres = exec_script(desc->ctx, FALSE, desc->funcs[desc->class_initialize_id].entries[VBDISP_CALLGET],
554 vbdisp, &dp, NULL);
555 }
556
557 if(FAILED(hres)) {
558 IDispatchEx_Release(&vbdisp->IDispatchEx_iface);
559 return hres;
560 }
561
562 *ret = vbdisp;
563 return S_OK;
564}
#define FALSE
Definition: types.h:117
@ VT_BYREF
Definition: compat.h:2342
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
Definition: safearray.c:600
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 GLint GLint j
Definition: glfuncs.h:250
HRESULT exec_script(HTMLInnerWindow *, const WCHAR *, const WCHAR *, VARIANT *) DECLSPEC_HIDDEN
Definition: script.c:1245
#define SUCCEEDED(hr)
Definition: intsafe.h:50
struct stdole::DISPPARAMS DISPPARAMS
#define V_ARRAYREF(A)
Definition: oleauto.h:223
#define V_VT(A)
Definition: oleauto.h:211
SAFEARRAY ** arrays
Definition: vbscript.h:112
LONG ref
Definition: vbscript.h:107
VARIANT props[1]
Definition: vbscript.h:113
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
static IDispatchExVtbl DispatchExVtbl
Definition: vbdisp.c:482
static const WCHAR props[]
Definition: wbemdisp.c:288

Referenced by interp_new(), and VBScriptParseProcedure_ParseProcedureText().

◆ detach_global_objects()

void detach_global_objects ( script_ctx_t ctx)

Definition at line 3602 of file global.c.

3603{
3604 if(ctx->err_obj) {
3605 ctx->err_obj->ctx = NULL;
3606 IDispatch_Release(&ctx->err_obj->IDispatch_iface);
3607 ctx->err_obj = NULL;
3608 }
3609
3610 if(ctx->global_obj) {
3611 ctx->global_obj->ctx = NULL;
3612 IDispatch_Release(&ctx->global_obj->IDispatch_iface);
3613 ctx->global_obj = NULL;
3614 }
3615}
CONTEXT ctx

Referenced by VBScript_Release().

◆ disp_call()

HRESULT disp_call ( script_ctx_t ctx,
IDispatch disp,
DISPID  id,
DISPPARAMS *  dp,
VARIANT retv 
)

Definition at line 1675 of file vbdisp.c.

1676{
1677 const WORD flags = DISPATCH_METHOD|(retv ? DISPATCH_PROPERTYGET : 0);
1678 IDispatchEx *dispex;
1679 vbdisp_t *vbdisp;
1680 EXCEPINFO ei;
1681 HRESULT hres;
1682
1683 memset(&ei, 0, sizeof(ei));
1684 if(retv)
1685 V_VT(retv) = VT_EMPTY;
1686
1687 vbdisp = unsafe_impl_from_IDispatch(disp);
1688 if(vbdisp && vbdisp->desc && vbdisp->desc->ctx == ctx)
1689 return invoke_vbdisp(vbdisp, id, flags, FALSE, dp, retv);
1690
1691 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
1692 if(SUCCEEDED(hres)) {
1693 hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, flags, dp, retv, &ei, &ctx->vbcaller->IServiceProvider_iface);
1694 IDispatchEx_Release(dispex);
1695 }else {
1696 UINT err = 0;
1697
1698 TRACE("using IDispatch\n");
1699 hres = IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, flags, dp, retv, &ei, &err);
1700 }
1701
1702 if(hres == DISP_E_EXCEPTION) {
1703 clear_ei(&ctx->ei);
1704 ctx->ei = ei;
1705 hres = SCRIPT_E_RECORDED;
1706 }
1707 return hres;
1708}
@ VT_EMPTY
Definition: compat.h:2295
unsigned short WORD
Definition: ntddk_ex.h:93
void clear_ei(EXCEPINFO *ei)
Definition: interp.c:288
struct stdole::EXCEPINFO EXCEPINFO
unsigned int UINT
Definition: ndis.h:50
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
#define IID_NULL
Definition: guiddef.h:98
#define err(...)
script_ctx_t * ctx
Definition: vbscript.h:86
static vbdisp_t * unsafe_impl_from_IDispatch(IDispatch *iface)
Definition: vbdisp.c:500
static HRESULT invoke_vbdisp(vbdisp_t *This, DISPID id, DWORD flags, BOOL extern_caller, DISPPARAMS *params, VARIANT *res)
Definition: vbdisp.c:174
#define DISP_E_EXCEPTION
Definition: winerror.h:3621

Referenced by get_disp_value().

◆ disp_get_id()

HRESULT disp_get_id ( IDispatch disp,
BSTR  name,
vbdisp_invoke_type_t  invoke_type,
BOOL  search_private,
DISPID id 
)

Definition at line 1582 of file vbdisp.c.

1583{
1584 IDispatchEx *dispex;
1585 vbdisp_t *vbdisp;
1586 HRESULT hres;
1587
1588 vbdisp = unsafe_impl_from_IDispatch(disp);
1589 if(vbdisp)
1590 return vbdisp_get_id(vbdisp, name, invoke_type, search_private, id);
1591
1592 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
1593 if(FAILED(hres)) {
1594 TRACE("using IDispatch\n");
1595 return IDispatch_GetIDsOfNames(disp, &IID_NULL, &name, 1, 0, id);
1596 }
1597
1598 hres = IDispatchEx_GetDispID(dispex, name, fdexNameCaseInsensitive, id);
1599 IDispatchEx_Release(dispex);
1600 return hres;
1601}
Definition: name.c:39
HRESULT vbdisp_get_id(vbdisp_t *This, BSTR name, vbdisp_invoke_type_t invoke_type, BOOL search_private, DISPID *id)
Definition: vbdisp.c:60

◆ disp_propput()

HRESULT disp_propput ( script_ctx_t ctx,
IDispatch disp,
DISPID  id,
WORD  flags,
DISPPARAMS *  dp 
)

Definition at line 1718 of file vbdisp.c.

1719{
1720 IDispatchEx *dispex;
1721 vbdisp_t *vbdisp;
1722 EXCEPINFO ei = {0};
1723 HRESULT hres;
1724
1725 vbdisp = unsafe_impl_from_IDispatch(disp);
1726 if(vbdisp && vbdisp->desc && vbdisp->desc->ctx == ctx)
1727 return invoke_vbdisp(vbdisp, id, flags, FALSE, dp, NULL);
1728
1729 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
1730 if(SUCCEEDED(hres)) {
1731 hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, flags, dp, NULL, &ei, &ctx->vbcaller->IServiceProvider_iface);
1732 IDispatchEx_Release(dispex);
1733 }else {
1734 UINT err = 0;
1735
1736 TRACE("using IDispatch\n");
1737 hres = IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, flags, dp, NULL, &ei, &err);
1738 }
1739
1740 if(hres == DISP_E_EXCEPTION) {
1741 clear_ei(&ctx->ei);
1742 ctx->ei = ei;
1743 hres = SCRIPT_E_RECORDED;
1744 }
1745 return hres;
1746}

◆ exec_script()

HRESULT exec_script ( script_ctx_t ctx,
BOOL  extern_caller,
function_t func,
vbdisp_t vbthis,
DISPPARAMS *  dp,
VARIANT res 
)

Definition at line 2455 of file interp.c.

2456{
2457 exec_ctx_t exec = {func->code_ctx};
2458 vbsop_t op;
2459 HRESULT hres = S_OK;
2460
2461 exec.code = func->code_ctx;
2462
2463 if(dp ? func->arg_cnt != arg_cnt(dp) : func->arg_cnt) {
2464 FIXME("wrong arg_cnt %d, expected %d\n", dp ? arg_cnt(dp) : 0, func->arg_cnt);
2465 return E_FAIL;
2466 }
2467
2468 heap_pool_init(&exec.heap);
2469
2470 TRACE("%s args=%u\n", debugstr_w(func->name),func->arg_cnt);
2471 if(func->arg_cnt) {
2472 VARIANT *v;
2473 unsigned i;
2474
2475 exec.args = calloc(func->arg_cnt, sizeof(VARIANT));
2476 if(!exec.args) {
2477 release_exec(&exec);
2478 return E_OUTOFMEMORY;
2479 }
2480
2481 for(i=0; i < func->arg_cnt; i++) {
2482 v = get_arg(dp, i);
2483 TRACE(" [%d] %s\n", i, debugstr_variant(v));
2484 if(V_VT(v) == (VT_VARIANT|VT_BYREF)) {
2485 if(func->args[i].by_ref)
2486 exec.args[i] = *v;
2487 else
2489 }else {
2490 hres = VariantCopyInd(exec.args+i, v);
2491 }
2492 if(FAILED(hres)) {
2493 release_exec(&exec);
2494 return hres;
2495 }
2496 }
2497 }else {
2498 exec.args = NULL;
2499 }
2500
2501 if(func->var_cnt) {
2502 exec.vars = calloc(func->var_cnt, sizeof(VARIANT));
2503 if(!exec.vars) {
2504 release_exec(&exec);
2505 return E_OUTOFMEMORY;
2506 }
2507 }else {
2508 exec.vars = NULL;
2509 }
2510
2511 exec.stack_size = 16;
2512 exec.top = 0;
2513 exec.stack = malloc(exec.stack_size * sizeof(VARIANT));
2514 if(!exec.stack) {
2515 release_exec(&exec);
2516 return E_OUTOFMEMORY;
2517 }
2518
2519 if(extern_caller)
2520 IActiveScriptSite_OnEnterScript(ctx->site);
2521
2522 if(vbthis) {
2523 IDispatchEx_AddRef(&vbthis->IDispatchEx_iface);
2524 exec.vbthis = vbthis;
2525 }
2526
2527 exec.instr = exec.code->instrs + func->code_off;
2528 exec.script = ctx;
2529 exec.func = func;
2530
2531 while(exec.instr) {
2532 op = exec.instr->op;
2533 hres = op_funcs[op](&exec);
2534 if(FAILED(hres)) {
2535 if(hres != SCRIPT_E_RECORDED) {
2536 /* SCRIPT_E_RECORDED means ctx->ei is already populated */
2537 clear_ei(&ctx->ei);
2538 ctx->ei.scode = hres;
2539 }
2540
2541 if(!ctx->ei.bstrDescription)
2542 map_vbs_exception(&ctx->ei);
2543
2544 if(exec.resume_next) {
2545 unsigned stack_off;
2546
2547 WARN("Failed %08lx in resume next mode\n", ctx->ei.scode);
2548
2549 /*
2550 * Unwinding here is simple. We need to find the next OP_catch, which contains
2551 * information about expected stack size and jump offset on error. Generated
2552 * bytecode needs to guarantee, that simple jump and stack adjustment will
2553 * guarantee proper execution continuation.
2554 */
2555 while((++exec.instr)->op != OP_catch);
2556
2557 TRACE("unwind jmp %d stack_off %d\n", exec.instr->arg1.uint, exec.instr->arg2.uint);
2558
2560 stack_off = exec.instr->arg2.uint;
2561 instr_jmp(&exec, exec.instr->arg1.uint);
2562
2563 if(exec.top > stack_off) {
2564 stack_popn(&exec, exec.top-stack_off);
2565 }else if(exec.top < stack_off) {
2566 VARIANT v;
2567
2568 V_VT(&v) = VT_EMPTY;
2569 while(exec.top < stack_off) {
2570 hres = stack_push(&exec, &v);
2571 if(FAILED(hres))
2572 break;
2573 }
2574 }
2575
2576 continue;
2577 }else {
2578 if(!ctx->error_loc_code) {
2579 grab_vbscode(exec.code);
2580 ctx->error_loc_code = exec.code;
2581 ctx->error_loc_offset = exec.instr->loc;
2582 }
2583 stack_popn(&exec, exec.top);
2584 break;
2585 }
2586 }
2587
2588 exec.instr += op_move[op];
2589 }
2590
2591 assert(!exec.top);
2592
2593 if(extern_caller) {
2594 if(FAILED(hres)) {
2595 if(!ctx->ei.scode)
2596 ctx->ei.scode = hres;
2597 hres = report_script_error(ctx, ctx->error_loc_code, ctx->error_loc_offset);
2599 }
2600 IActiveScriptSite_OnLeaveScript(ctx->site);
2601 }
2602
2603 if(SUCCEEDED(hres) && res) {
2604 *res = exec.ret_val;
2605 V_VT(&exec.ret_val) = VT_EMPTY;
2606 }
2607
2608 release_exec(&exec);
2609 return hres;
2610}
UINT op
Definition: effect.c:236
#define assert(_expr)
Definition: assert.h:32
HRESULT report_script_error(script_ctx_t *ctx, const vbscode_t *code, unsigned loc)
Definition: vbscript.c:558
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
const GLdouble * v
Definition: gl.h:2040
GLenum func
Definition: glext.h:6028
GLuint res
Definition: glext.h:9613
static void instr_jmp(exec_ctx_t *ctx, unsigned addr)
Definition: interp.c:496
static void stack_popn(exec_ctx_t *ctx, unsigned n)
Definition: interp.c:342
static const unsigned op_move[]
Definition: interp.c:2405
static HRESULT stack_push(exec_ctx_t *ctx, VARIANT *v)
Definition: interp.c:316
static const instr_func_t op_funcs[]
Definition: interp.c:2399
static void clear_error_loc(script_ctx_t *ctx)
Definition: interp.c:296
static void release_exec(exec_ctx_t *ctx)
Definition: interp.c:2418
#define V_VARIANTREF(A)
Definition: oleauto.h:283
instr_t * instrs
Definition: vbscript.h:360
heap_pool_t heap
Definition: interp.c:41
VARIANT * args
Definition: interp.c:36
function_t * func
Definition: interp.c:33
script_ctx_t * script
Definition: interp.c:32
VARIANT ret_val
Definition: interp.c:49
vbdisp_t * vbthis
Definition: interp.c:34
vbscode_t * code
Definition: interp.c:30
VARIANT * stack
Definition: interp.c:47
unsigned top
Definition: interp.c:46
VARIANT * vars
Definition: interp.c:37
unsigned stack_size
Definition: interp.c:45
instr_t * instr
Definition: interp.c:31
BOOL resume_next
Definition: interp.c:43
instr_arg_t arg2
Definition: vbscript.h:323
instr_arg_t arg1
Definition: vbscript.h:322
jsop_t op
Definition: engine.h:133
unsigned loc
Definition: engine.h:134
unsigned uint
Definition: engine.h:118
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
Definition: variant.c:847
void map_vbs_exception(EXCEPINFO *ei)
Definition: vbdisp.c:1605
static void grab_vbscode(vbscode_t *code)
Definition: vbscript.h:386

Referenced by do_icall().

◆ get_arg()

static VARIANT * get_arg ( DISPPARAMS *  dp,
DWORD  i 
)
inlinestatic

Definition at line 180 of file vbscript.h.

181{
182 return dp->rgvarg + dp->cArgs-i-1;
183}

◆ get_builtin_id()

HRESULT get_builtin_id ( BuiltinDisp disp,
const WCHAR name,
DISPID id 
)

Definition at line 127 of file global.c.

128{
129 size_t min = 1, max = disp->member_cnt - 1, i;
130 int r;
131
132 while(min <= max) {
133 i = (min + max) / 2;
134 r = wcsicmp(disp->members[i].name, name);
135 if(!r) {
136 *id = i;
137 return S_OK;
138 }
139 if(r < 0)
140 min = i+1;
141 else
142 max = i-1;
143 }
144
146
147}
#define wcsicmp
Definition: compat.h:15
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define min(a, b)
Definition: monoChain.cc:55
size_t member_cnt
Definition: vbscript.h:149
const builtin_prop_t * members
Definition: vbscript.h:150
const WCHAR * name
Definition: global.c:54
#define max(a, b)
Definition: svc.c:63
#define DISP_E_MEMBERNOTFOUND
Definition: winerror.h:3615

Referenced by Builtin_GetIDsOfNames().

◆ get_disp_value()

HRESULT get_disp_value ( script_ctx_t ctx,
IDispatch disp,
VARIANT v 
)

Definition at line 1710 of file vbdisp.c.

1711{
1712 DISPPARAMS dp = {NULL};
1713 if(!disp)
1715 return disp_call(ctx, disp, DISPID_VALUE, &dp, v);
1716}
#define VBSE_OBJECT_VARIABLE_NOT_SET
HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, DISPPARAMS *dp, VARIANT *retv)
Definition: vbdisp.c:1675
#define MAKE_VBSERROR(code)
Definition: vbscript.h:425

Referenced by assign_value(), get_propput_arg(), stack_assume_val(), and stack_pop_val().

◆ get_dispatch_typeinfo()

HRESULT get_dispatch_typeinfo ( ITypeInfo **  out)

Definition at line 78 of file jscript_main.c.

79{
82 HRESULT hr;
83
85 {
87 if (FAILED(hr)) return hr;
88
89 hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
90 ITypeLib_Release(typelib);
91 if (FAILED(hr)) return hr;
92
94 ITypeInfo_Release(typeinfo);
95 }
96
98 return S_OK;
99}
HRESULT hr
Definition: delayimp.cpp:582
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
static ITypeInfo * dispatch_typeinfo
Definition: jscript_main.c:42
#define STDOLE_MINORVERNUM
Definition: oleauto.h:31
#define STDOLE_LCID
Definition: oleauto.h:32
#define STDOLE_MAJORVERNUM
Definition: oleauto.h:30
const GUID IID_IDispatch
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ get_vbscript_string()

BSTR get_vbscript_string ( int  id)

Definition at line 39 of file vbscript_main.c.

40{
41 WCHAR buf[512];
43 return SysAllocString(buf);
44}
#define ARRAY_SIZE(A)
Definition: main.h:20
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
short WCHAR
Definition: pedump.c:58
#define LoadStringW
Definition: utils.h:64
static HINSTANCE vbscript_hinstance
Definition: vbscript_main.c:36

Referenced by compile_error(), and map_vbs_exception().

◆ grab_vbscode()

static void grab_vbscode ( vbscode_t code)
inlinestatic

Definition at line 386 of file vbscript.h.

387{
388 code->ref++;
389}

Referenced by exec_script(), and ScriptDisp_GetTypeInfo().

◆ heap_pool_alloc()

void * heap_pool_alloc ( heap_pool_t heap,
size_t  size 
)

Definition at line 60 of file vbscript_main.c.

61{
62 struct list *list;
63 void *tmp;
64
65 size = (size+3)&~3;
66
67 if(!heap->block_cnt) {
68 if(!heap->blocks) {
69 heap->blocks = malloc(sizeof(void*));
70 if(!heap->blocks)
71 return NULL;
72 }
73
74 tmp = malloc(block_size(0));
75 if(!tmp)
76 return NULL;
77
78 heap->blocks[0] = tmp;
79 heap->block_cnt = 1;
80 }
81
82 if(heap->offset + size <= block_size(heap->last_block)) {
83 tmp = ((BYTE*)heap->blocks[heap->last_block])+heap->offset;
84 heap->offset += size;
85 return tmp;
86 }
87
88 if(size <= block_size(heap->last_block+1)) {
89 if(heap->last_block+1 == heap->block_cnt) {
90 tmp = realloc(heap->blocks, (heap->block_cnt+1)*sizeof(void*));
91 if(!tmp)
92 return NULL;
93
94 heap->blocks = tmp;
95 heap->blocks[heap->block_cnt] = malloc(block_size(heap->block_cnt));
96 if(!heap->blocks[heap->block_cnt])
97 return NULL;
98
99 heap->block_cnt++;
100 }
101
102 heap->last_block++;
103 heap->offset = size;
104 return heap->blocks[heap->last_block];
105 }
106
107 list = malloc(size + sizeof(struct list));
108 if(!list)
109 return NULL;
110
111 list_add_head(&heap->custom_blocks, list);
112 return list+1;
113}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
Definition: list.h:37
#define realloc
Definition: debug_ros.c:6
GLsizeiptr size
Definition: glext.h:5919
#define list
Definition: rosglue.h:35
Definition: heap.c:86
static DWORD block_size(DWORD block)
Definition: vbscript_main.c:49
unsigned char BYTE
Definition: xxhash.c:193

Referenced by heap_pool_grow().

◆ heap_pool_clear()

void heap_pool_clear ( heap_pool_t heap)

Definition at line 141 of file jsutils.c.

142{
143 struct list *tmp;
144
145 if(!heap)
146 return;
147
148 while((tmp = list_head(&heap->custom_blocks))) {
149 list_remove(tmp);
150 free(tmp);
151 }
152
153 if(WARN_ON(heap)) {
154 DWORD i;
155
156 for(i=0; i < heap->block_cnt; i++)
158 }
159
160 heap->last_block = heap->offset = 0;
161 heap->mark = FALSE;
162}
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ARENA_FREE_FILLER
Definition: jsutils.c:59
static DWORD block_size(DWORD block)
Definition: jsutils.c:61
#define WARN_ON(c)
Definition: module.h:257

Referenced by heap_pool_free().

◆ heap_pool_free()

void heap_pool_free ( heap_pool_t heap)

Definition at line 164 of file jsutils.c.

165{
166 DWORD i;
167
169
170 for(i=0; i < heap->block_cnt; i++)
171 free(heap->blocks[i]);
172 free(heap->blocks);
173
175}
void heap_pool_init(heap_pool_t *heap)
Definition: jsutils.c:66
void heap_pool_clear(heap_pool_t *heap)
Definition: jsutils.c:141

◆ heap_pool_grow()

void * heap_pool_grow ( heap_pool_t heap,
void mem,
DWORD  size,
DWORD  inc 
)

Definition at line 125 of file jsutils.c.

126{
127 void *ret;
128
129 if(mem == (BYTE*)heap->blocks[heap->last_block] + heap->offset-size
130 && heap->offset+inc < block_size(heap->last_block)) {
131 heap->offset += inc;
132 return mem;
133 }
134
136 if(ret) /* FIXME: avoid copying for custom blocks */
137 memcpy(ret, mem, size);
138 return ret;
139}
void * heap_pool_alloc(heap_pool_t *heap, DWORD size)
Definition: jsutils.c:72
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: mem.c:349

◆ heap_pool_init()

void heap_pool_init ( heap_pool_t heap)

Definition at line 66 of file jsutils.c.

67{
68 memset(heap, 0, sizeof(*heap));
69 list_init(&heap->custom_blocks);
70}

Referenced by heap_pool_free().

◆ heap_pool_mark()

heap_pool_t * heap_pool_mark ( heap_pool_t heap)

Definition at line 177 of file jsutils.c.

178{
179 if(heap->mark)
180 return NULL;
181
182 heap->mark = TRUE;
183 return heap;
184}
#define TRUE
Definition: types.h:120

◆ init_err()

HRESULT init_err ( script_ctx_t )

◆ init_global()

HRESULT init_global ( script_ctx_t ctx)

Definition at line 1091 of file global.c.

1092{
1093 unsigned const_flags = ctx->version >= SCRIPTLANGUAGEVERSION_ES5 ? 0 : PROPF_WRITABLE;
1094 jsdisp_t *math, *constr;
1095 HRESULT hres;
1096
1097 if(ctx->global)
1098 return S_OK;
1099
1100 hres = create_dispex(ctx, &JSGlobal_info, NULL, &ctx->global);
1101 if(FAILED(hres))
1102 return hres;
1103
1104 hres = create_object_prototype(ctx, &ctx->object_prototype);
1105 if(FAILED(hres))
1106 return hres;
1107
1108 hres = init_constructors(ctx, ctx->object_prototype);
1109 if(FAILED(hres))
1110 return hres;
1111
1112 hres = init_object_prototype_accessors(ctx, ctx->object_prototype);
1113 if(FAILED(hres))
1114 return hres;
1115
1116 hres = create_math(ctx, &math);
1117 if(FAILED(hres))
1118 return hres;
1119
1121 jsdisp_release(math);
1122 if(FAILED(hres))
1123 return hres;
1124
1125 if(ctx->version >= 2) {
1126 jsdisp_t *json;
1127
1128 hres = create_json(ctx, &json);
1129 if(FAILED(hres))
1130 return hres;
1131
1133 jsdisp_release(json);
1134 if(FAILED(hres))
1135 return hres;
1136 }
1137
1138 hres = create_activex_constr(ctx, &constr);
1139 if(FAILED(hres))
1140 return hres;
1141
1143 jsval_obj(constr));
1144 jsdisp_release(constr);
1145 if(FAILED(hres))
1146 return hres;
1147
1148 hres = jsdisp_define_data_property(ctx->global, L"undefined", const_flags, jsval_undefined());
1149 if(FAILED(hres))
1150 return hres;
1151
1152 hres = jsdisp_define_data_property(ctx->global, L"NaN", const_flags, jsval_number(NAN));
1153 if(FAILED(hres))
1154 return hres;
1155
1156 hres = jsdisp_define_data_property(ctx->global, L"Infinity", const_flags, jsval_number(INFINITY));
1157 if(FAILED(hres))
1158 return hres;
1159
1161 if(FAILED(hres))
1162 return hres;
1163
1164 return init_set_constructor(ctx);
1165}
HRESULT init_arraybuf_constructors(script_ctx_t *ctx)
Definition: arraybuf.c:692
HRESULT create_activex_constr(script_ctx_t *ctx, jsdisp_t **ret)
Definition: activex.c:189
#define NAN
Definition: math.h:273
#define INFINITY
Definition: math.h:272
#define L(x)
Definition: resources.c:13
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
Definition: dispex.c:3349
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:2493
static const builtin_info_t JSGlobal_info
Definition: global.c:919
static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: global.c:950
static HRESULT init_object_prototype_accessors(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: global.c:925
HRESULT create_math(script_ctx_t *, jsdisp_t **)
Definition: math.c:503
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **)
Definition: object.c:1126
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:53
HRESULT init_set_constructor(script_ctx_t *)
Definition: set.c:894
HRESULT create_json(script_ctx_t *, jsdisp_t **)
Definition: json.c:1032
const unsigned int PROPF_WRITABLE
Definition: jsdisp.idl:37
const unsigned int PROPF_CONFIGURABLE
Definition: jsdisp.idl:38
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
static jsval_t jsval_number(double n)
Definition: jsval.h:153

Referenced by JScript_SetScriptSite(), and VBScriptFactory_CreateInstance().

◆ is_digit()

static BOOL is_digit ( WCHAR  c)
inlinestatic

Definition at line 412 of file vbscript.h.

413{
414 return '0' <= c && c <= '9';
415}
const GLubyte * c
Definition: glext.h:8905

◆ is_int32()

static BOOL is_int32 ( double  d)
inlinestatic

Definition at line 407 of file vbscript.h.

408{
409 return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d;
410}
#define INT32_MAX
Definition: stdint.h:80
#define INT32_MIN
Definition: stdint.h:75
#define d
Definition: ke_i.h:81
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91

◆ 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 create_named_item_script_obj(script_ctx_t *ctx, named_item_t *item)
Definition: jscript.c:124
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
Definition: jscript.c:138
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198

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

◆ map_vbs_exception()

void map_vbs_exception ( EXCEPINFO *  ei)

Definition at line 1605 of file vbdisp.c.

1606{
1607 int vbse_number;
1608
1609 if(HRESULT_FACILITY(ei->scode) == FACILITY_VBS)
1610 vbse_number = HRESULT_CODE(ei->scode);
1611 else
1612 {
1613 switch(ei->scode) {
1614 case E_NOTIMPL: vbse_number = VBSE_ACTION_NOT_SUPPORTED; break;
1615 case E_NOINTERFACE: vbse_number = VBSE_OLE_NOT_SUPPORTED; break;
1616 case DISP_E_UNKNOWNINTERFACE: vbse_number = VBSE_OLE_NO_PROP_OR_METHOD; break;
1617 case DISP_E_MEMBERNOTFOUND: vbse_number = VBSE_OLE_NO_PROP_OR_METHOD; break;
1618 case DISP_E_PARAMNOTFOUND: vbse_number = VBSE_NAMED_PARAM_NOT_FOUND; break;
1619 case DISP_E_TYPEMISMATCH: vbse_number = VBSE_TYPE_MISMATCH; break;
1620 case DISP_E_UNKNOWNNAME: vbse_number = VBSE_OLE_NO_PROP_OR_METHOD; break;
1621 case DISP_E_NONAMEDARGS: vbse_number = VBSE_NAMED_ARGS_NOT_SUPPORTED; break;
1622 case DISP_E_BADVARTYPE: vbse_number = VBSE_INVALID_TYPELIB_VARIABLE; break;
1623 case DISP_E_OVERFLOW: vbse_number = VBSE_OVERFLOW; break;
1624 case DISP_E_BADINDEX: vbse_number = VBSE_OUT_OF_BOUNDS; break;
1625 case DISP_E_UNKNOWNLCID: vbse_number = VBSE_LOCALE_SETTING_NOT_SUPPORTED; break;
1626 case DISP_E_ARRAYISLOCKED: vbse_number = VBSE_ARRAY_LOCKED; break;
1627 case DISP_E_BADPARAMCOUNT: vbse_number = VBSE_FUNC_ARITY_MISMATCH; break;
1628 case DISP_E_PARAMNOTOPTIONAL: vbse_number = VBSE_PARAMETER_NOT_OPTIONAL; break;
1629 case DISP_E_NOTACOLLECTION: vbse_number = VBSE_NOT_ENUM; break;
1631 case TYPE_E_TYPEMISMATCH: vbse_number = VBSE_TYPE_MISMATCH; break;
1632 case TYPE_E_OUTOFBOUNDS: vbse_number = VBSE_OUT_OF_BOUNDS; break;
1633 case TYPE_E_IOERROR: vbse_number = VBSE_IO_ERROR; break;
1634 case TYPE_E_CANTCREATETMPFILE: vbse_number = VBSE_CANT_CREATE_TMP_FILE; break;
1635 case STG_E_FILENOTFOUND: vbse_number = VBSE_OLE_FILE_NOT_FOUND; break;
1636 case STG_E_PATHNOTFOUND: vbse_number = VBSE_PATH_NOT_FOUND; break;
1637 case STG_E_TOOMANYOPENFILES: vbse_number = VBSE_TOO_MANY_FILES; break;
1638 case STG_E_ACCESSDENIED: vbse_number = VBSE_PERMISSION_DENIED; break;
1639 case STG_E_INSUFFICIENTMEMORY: vbse_number = VBSE_OUT_OF_MEMORY; break;
1640 case STG_E_NOMOREFILES: vbse_number = VBSE_TOO_MANY_FILES; break;
1641 case STG_E_DISKISWRITEPROTECTED: vbse_number = VBSE_PERMISSION_DENIED; break;
1642 case STG_E_WRITEFAULT: vbse_number = VBSE_IO_ERROR; break;
1643 case STG_E_READFAULT: vbse_number = VBSE_IO_ERROR; break;
1644 case STG_E_SHAREVIOLATION: vbse_number = VBSE_PATH_FILE_ACCESS; break;
1645 case STG_E_LOCKVIOLATION: vbse_number = VBSE_PERMISSION_DENIED; break;
1646 case STG_E_FILEALREADYEXISTS: vbse_number = VBSE_FILE_ALREADY_EXISTS; break;
1647 case STG_E_MEDIUMFULL: vbse_number = VBSE_DISK_FULL; break;
1648 case STG_E_INVALIDNAME: vbse_number = VBSE_FILE_NOT_FOUND; break;
1649 case STG_E_INUSE: vbse_number = VBSE_PERMISSION_DENIED; break;
1650 case STG_E_NOTCURRENT: vbse_number = VBSE_PERMISSION_DENIED; break;
1651 case STG_E_CANTSAVE: vbse_number = VBSE_IO_ERROR; break;
1652 case REGDB_E_CLASSNOTREG: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1653 case MK_E_UNAVAILABLE: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1654 case MK_E_INVALIDEXTENSION: vbse_number = VBSE_OLE_FILE_NOT_FOUND; break;
1655 case MK_E_CANTOPENFILE: vbse_number = VBSE_OLE_FILE_NOT_FOUND; break;
1656 case CO_E_CLASSSTRING: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1657 case CO_E_APPNOTFOUND: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1658 case CO_E_APPDIDNTREG: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1659 case E_ACCESSDENIED: vbse_number = VBSE_PERMISSION_DENIED; break;
1660 case E_OUTOFMEMORY: vbse_number = VBSE_OUT_OF_MEMORY; break;
1661 case E_INVALIDARG: vbse_number = VBSE_ILLEGAL_FUNC_CALL; break;
1662 case RPC_E_SERVER_UNAVAILABLE: vbse_number = VBSE_SERVER_NOT_FOUND; break;
1663 case CO_E_SERVER_EXEC_FAILURE: vbse_number = VBSE_CANT_CREATE_OBJECT; break;
1664 default: return; /* early return, all other HRESULT left as-is */
1665 }
1666 ei->scode = MAKE_VBSERROR(vbse_number);
1667 }
1668 if(!ei->bstrSource)
1669 ei->bstrSource = get_vbscript_string(VBS_RUNTIME_ERROR);
1670 if(!ei->bstrDescription)
1671 if(!(ei->bstrDescription = get_vbscript_string(vbse_number)))
1672 ei->bstrDescription = get_vbscript_string(VBS_UNKNOWN_RUNTIME_ERROR);
1673}
#define VBSE_PATH_NOT_FOUND
#define VBSE_INVALID_DLL_FUNCTION_NAME
#define VBSE_ILLEGAL_FUNC_CALL
#define VBS_UNKNOWN_RUNTIME_ERROR
#define VBSE_ARRAY_LOCKED
#define VBSE_PATH_FILE_ACCESS
#define VBSE_OVERFLOW
#define VBSE_NOT_ENUM
#define VBSE_INVALID_TYPELIB_VARIABLE
#define VBSE_OLE_NO_PROP_OR_METHOD
#define VBSE_FUNC_ARITY_MISMATCH
#define VBSE_LOCALE_SETTING_NOT_SUPPORTED
#define VBSE_OLE_FILE_NOT_FOUND
#define VBSE_ACTION_NOT_SUPPORTED
#define VBSE_OUT_OF_BOUNDS
#define VBS_RUNTIME_ERROR
#define VBSE_FILE_NOT_FOUND
#define VBSE_PARAMETER_NOT_OPTIONAL
#define VBSE_CANT_CREATE_TMP_FILE
#define VBSE_OUT_OF_MEMORY
#define VBSE_TOO_MANY_FILES
#define VBSE_TYPE_MISMATCH
#define VBSE_OLE_NOT_SUPPORTED
#define VBSE_NAMED_ARGS_NOT_SUPPORTED
#define VBSE_NAMED_PARAM_NOT_FOUND
#define VBSE_DISK_FULL
#define VBSE_FILE_ALREADY_EXISTS
#define VBSE_CANT_CREATE_OBJECT
#define VBSE_SERVER_NOT_FOUND
#define VBSE_PERMISSION_DENIED
#define VBSE_IO_ERROR
#define RPC_E_SERVER_UNAVAILABLE
Definition: vbdisp.c:1603
BSTR get_vbscript_string(int)
Definition: vbscript_main.c:39
#define FACILITY_VBS
Definition: vbscript.h:424
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define STG_E_SHAREVIOLATION
Definition: winerror.h:3672
#define TYPE_E_CANTCREATETMPFILE
Definition: winerror.h:3654
#define DISP_E_PARAMNOTFOUND
Definition: winerror.h:3616
#define DISP_E_NONAMEDARGS
Definition: winerror.h:3619
#define DISP_E_ARRAYISLOCKED
Definition: winerror.h:3625
#define STG_E_INUSE
Definition: winerror.h:3684
#define STG_E_PATHNOTFOUND
Definition: winerror.h:3661
#define MK_E_UNAVAILABLE
Definition: winerror.h:3894
#define STG_E_TOOMANYOPENFILES
Definition: winerror.h:3662
#define TYPE_E_DLLFUNCTIONNOTFOUND
Definition: winerror.h:3646
#define STG_E_NOTCURRENT
Definition: winerror.h:3685
#define STG_E_CANTSAVE
Definition: winerror.h:3687
#define STG_E_LOCKVIOLATION
Definition: winerror.h:3673
#define STG_E_INVALIDNAME
Definition: winerror.h:3680
#define E_NOINTERFACE
Definition: winerror.h:3479
#define HRESULT_FACILITY(hr)
Definition: winerror.h:191
#define DISP_E_UNKNOWNINTERFACE
Definition: winerror.h:3614
#define DISP_E_OVERFLOW
Definition: winerror.h:3622
#define STG_E_READFAULT
Definition: winerror.h:3671
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620
#define DISP_E_BADPARAMCOUNT
Definition: winerror.h:3626
#define STG_E_DISKISWRITEPROTECTED
Definition: winerror.h:3668
#define STG_E_FILEALREADYEXISTS
Definition: winerror.h:3674
#define CO_E_APPDIDNTREG
Definition: winerror.h:3930
#define E_ACCESSDENIED
Definition: winerror.h:4116
#define TYPE_E_TYPEMISMATCH
Definition: winerror.h:3651
#define STG_E_FILENOTFOUND
Definition: winerror.h:3660
#define DISP_E_NOTACOLLECTION
Definition: winerror.h:3629
#define STG_E_ACCESSDENIED
Definition: winerror.h:3663
#define CO_E_APPNOTFOUND
Definition: winerror.h:3921
#define MK_E_CANTOPENFILE
Definition: winerror.h:3905
#define DISP_E_BADINDEX
Definition: winerror.h:3623
#define DISP_E_UNKNOWNLCID
Definition: winerror.h:3624
#define TYPE_E_IOERROR
Definition: winerror.h:3653
#define STG_E_MEDIUMFULL
Definition: winerror.h:3676
#define CO_E_SERVER_EXEC_FAILURE
Definition: winerror.h:4204
#define STG_E_WRITEFAULT
Definition: winerror.h:3670
#define HRESULT_CODE(hr)
Definition: winerror.h:188
#define MK_E_INVALIDEXTENSION
Definition: winerror.h:3900
#define DISP_E_TYPEMISMATCH
Definition: winerror.h:3617
#define STG_E_NOMOREFILES
Definition: winerror.h:3667
#define DISP_E_PARAMNOTOPTIONAL
Definition: winerror.h:3627
#define TYPE_E_OUTOFBOUNDS
Definition: winerror.h:3652
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:3618
#define STG_E_INSUFFICIENTMEMORY
Definition: winerror.h:3665
#define CO_E_CLASSSTRING
Definition: winerror.h:3919

Referenced by compile_error(), Err_Raise(), and exec_script().

◆ release_dynamic_var()

void release_dynamic_var ( dynamic_var_t var)

Definition at line 2411 of file interp.c.

2412{
2413 VariantClear(&var->v);
2414 if(var->array)
2415 SafeArrayDestroy(var->array);
2416}
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1347
const char * var
Definition: shader.c:5666
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by release_exec(), and ScriptDisp_Release().

◆ 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(), release_script(), and release_vbscode().

◆ release_regexp_typelib()

void release_regexp_typelib ( void  )

Definition at line 1849 of file vbregexp.c.

1850{
1851 DWORD i;
1852
1853 for(i=0; i<REGEXP_LAST_tid; i++) {
1854 if(typeinfos[i])
1855 ITypeInfo_Release(typeinfos[i]);
1856 }
1857 if(typelib)
1858 ITypeLib_Release(typelib);
1859}
static ITypeInfo * typeinfos[REGEXP_LAST_tid]
Definition: vbregexp.c:48
@ REGEXP_LAST_tid
Definition: vbregexp.c:38

Referenced by DllMain().

◆ release_vbscode()

void release_vbscode ( vbscode_t code)

Definition at line 1915 of file compile.c.

1916{
1917 unsigned i;
1918
1919 if(--code->ref)
1920 return;
1921
1922 for(i=0; i < code->bstr_cnt; i++)
1923 SysFreeString(code->bstr_pool[i]);
1924
1925 if(code->named_item)
1926 release_named_item(code->named_item);
1927 heap_pool_free(&code->heap);
1928
1929 free(code->bstr_pool);
1930 free(code->source);
1931 free(code->instrs);
1932 free(code);
1933}
void release_named_item(named_item_t *item)
Definition: jscript.c:186
void heap_pool_free(heap_pool_t *)
Definition: jsutils.c:164

Referenced by alloc_vbscode(), clear_error_loc(), compile_script(), release_code_list(), release_compiler(), release_script(), and ScriptTypeInfo_Release().

◆ report_script_error()

HRESULT report_script_error ( script_ctx_t ctx,
const vbscode_t code,
unsigned  loc 
)

Definition at line 558 of file vbscript.c.

559{
561 const WCHAR *p, *nl;
563
564 if(!(error = malloc(sizeof(*error))))
565 return E_OUTOFMEMORY;
566 error->IActiveScriptError_iface.lpVtbl = &VBScriptErrorVtbl;
567
568 error->ref = 1;
569 error->ei = ctx->ei;
570 memset(&ctx->ei, 0, sizeof(ctx->ei));
571 result = error->ei.scode;
572
573 p = code->source;
574 error->cookie = code->cookie;
575 error->line = code->start_line;
576 for(nl = p = code->source; p < code->source + loc; p++) {
577 if(*p != '\n') continue;
578 error->line++;
579 nl = p + 1;
580 }
581 error->character = code->source + loc - nl;
582
583 hres = IActiveScriptSite_OnScriptError(ctx->site, &error->IActiveScriptError_iface);
584 IActiveScriptError_Release(&error->IActiveScriptError_iface);
585 return hres == S_OK ? SCRIPT_E_REPORTED : result;
586}
static const IActiveScriptErrorVtbl VBScriptErrorVtbl
Definition: vbscript.c:549
GLuint64EXT * result
Definition: glext.h:11304
GLfloat GLfloat p
Definition: glext.h:8902
#define error(str)
Definition: mkdosfs.c:1605

Referenced by compile_error(), and exec_script().

◆ string_replace()

BSTR string_replace ( BSTR  string,
BSTR  find,
BSTR  replace,
int  from,
int  cnt,
int  mode 
)

Definition at line 1635 of file vbregexp.c.

1636{
1637 const WCHAR *ptr, *string_end;
1638 strbuf_t buf = { NULL, 0, 0 };
1639 size_t replace_len, find_len;
1640 BSTR ret = NULL;
1641 HRESULT hres = S_OK;
1642 int pos;
1643
1644 string_end = string + SysStringLen(string);
1645 ptr = from > SysStringLen(string) ? string_end : string + from;
1646
1647 find_len = SysStringLen(find);
1648 replace_len = SysStringLen(replace);
1649
1650 while(string_end - ptr >= find_len && cnt && find_len) {
1651 pos = FindStringOrdinal(FIND_FROMSTART, ptr, string_end - ptr,
1652 find, find_len, mode);
1653
1654 if(pos == -1)
1655 break;
1656 else {
1658 if(FAILED(hres))
1659 break;
1660 hres = strbuf_append(&buf, replace, replace_len);
1661 if(FAILED(hres))
1662 break;
1663
1664 ptr = ptr + pos + find_len;
1665 if(cnt != -1)
1666 cnt--;
1667 }
1668 }
1669
1670 if(SUCCEEDED(hres)) {
1671 hres = strbuf_append(&buf, ptr, string_end - ptr);
1672 if(SUCCEEDED(hres))
1673 ret = SysAllocStringLen(buf.buf, buf.len);
1674 }
1675
1676 free(buf.buf);
1677 return ret;
1678}
static TAGID TAGID find
Definition: db.cpp:156
OLECHAR * BSTR
Definition: compat.h:2293
INT WINAPI DECLSPEC_HOTPATCH FindStringOrdinal(DWORD flag, const WCHAR *src, INT src_size, const WCHAR *val, INT val_size, BOOL ignore_case)
Definition: locale.c:5257
GLenum mode
Definition: glext.h:6217
static PVOID ptr
Definition: dispmode.c:27
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
Definition: replace.c:38
CardRegion * from
Definition: spigame.cpp:19
static HRESULT strbuf_append(strbuf_t *buf, const WCHAR *str, DWORD len)
Definition: vbregexp.c:1468
_In_ size_t cnt
Definition: wcstombs.cpp:43
#define FIND_FROMSTART
Definition: winnls.h:230

Referenced by Global_Replace().

◆ to_int()

◆ vbdisp_get_id()

HRESULT vbdisp_get_id ( vbdisp_t This,
BSTR  name,
vbdisp_invoke_type_t  invoke_type,
BOOL  search_private,
DISPID id 
)

Definition at line 60 of file vbdisp.c.

61{
62 unsigned i;
63
64 if(get_func_id(This, name, invoke_type, search_private, id))
65 return S_OK;
66
67 for(i=0; i < This->desc->prop_cnt; i++) {
68 if(!search_private && !This->desc->props[i].is_public)
69 continue;
70
71 if(!wcsicmp(This->desc->props[i].name, name)) {
72 *id = i + This->desc->func_cnt;
73 return S_OK;
74 }
75 }
76
77 *id = -1;
78 return DISP_E_UNKNOWNNAME;
79}
static BOOL get_func_id(vbdisp_t *This, const WCHAR *name, vbdisp_invoke_type_t invoke_type, BOOL search_private, DISPID *id)
Definition: vbdisp.c:37

Referenced by disp_get_id(), DispatchEx_GetDispID(), and lookup_identifier().

◆ VBScriptFactory_CreateInstance()

HRESULT WINAPI VBScriptFactory_CreateInstance ( IClassFactory iface,
IUnknown pUnkOuter,
REFIID  riid,
void **  ppv 
)

Definition at line 1201 of file vbscript.c.

1202{
1203 struct vbcaller *vbcaller;
1205 VBScript *ret;
1206 HRESULT hres;
1207
1208 TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
1209
1210 ret = calloc(1, sizeof(*ret));
1211 if(!ret)
1212 return E_OUTOFMEMORY;
1213
1214 if(!(vbcaller = create_vbcaller())) {
1215 free(ret);
1216 return E_OUTOFMEMORY;
1217 }
1218
1219 ret->IActiveScript_iface.lpVtbl = &VBScriptVtbl;
1220 ret->IActiveScriptDebug_iface.lpVtbl = &VBScriptDebugVtbl;
1221 ret->IActiveScriptParse_iface.lpVtbl = &VBScriptParseVtbl;
1222 ret->IActiveScriptParseProcedure2_iface.lpVtbl = &VBScriptParseProcedureVtbl;
1223 ret->IObjectSafety_iface.lpVtbl = &VBScriptSafetyVtbl;
1224
1225 ret->ref = 1;
1227
1228 ctx = ret->ctx = calloc(1, sizeof(*ctx));
1229 if(!ctx) {
1230 IServiceProvider_Release(&vbcaller->IServiceProvider_iface);
1231 free(ret);
1232 return E_OUTOFMEMORY;
1233 }
1234
1235 vbcaller->ctx = ctx;
1236 ctx->vbcaller = vbcaller;
1237 ctx->safeopt = INTERFACE_USES_DISPEX;
1238 list_init(&ctx->objects);
1239 list_init(&ctx->code_list);
1240 list_init(&ctx->named_items);
1241
1242 hres = init_global(ctx);
1243 if(FAILED(hres)) {
1244 IActiveScript_Release(&ret->IActiveScript_iface);
1245 return hres;
1246 }
1247
1248 hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
1249 IActiveScript_Release(&ret->IActiveScript_iface);
1250 return hres;
1251}
@ SCRIPTSTATE_UNINITIALIZED
Definition: activscp.idl:57
static const IActiveScriptParseProcedure2Vtbl VBScriptParseProcedureVtbl
Definition: vbscript.c:1132
static const IActiveScriptDebugVtbl VBScriptDebugVtbl
Definition: vbscript.c:980
static const IObjectSafetyVtbl VBScriptSafetyVtbl
Definition: vbscript.c:1193
static struct vbcaller * create_vbcaller(void)
Definition: vbscript.c:453
static const IActiveScriptParseVtbl VBScriptParseVtbl
Definition: vbscript.c:1070
static const IActiveScriptVtbl VBScriptVtbl
Definition: vbscript.c:912
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT init_global(script_ctx_t *ctx)
Definition: global.c:1091
#define debugstr_guid
Definition: kernel32.h:35
IServiceProvider IServiceProvider_iface
Definition: vbscript.h:188
script_ctx_t * ctx
Definition: vbscript.h:192

◆ VBScriptRegExpFactory_CreateInstance()

HRESULT WINAPI VBScriptRegExpFactory_CreateInstance ( IClassFactory iface,
IUnknown pUnkOuter,
REFIID  riid,
void **  ppv 
)

Definition at line 1833 of file vbregexp.c.

1834{
1835 IDispatch *regexp;
1836 HRESULT hres;
1837
1838 TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
1839
1840 hres = create_regexp(&regexp);
1841 if(FAILED(hres))
1842 return hres;
1843
1844 hres = IDispatch_QueryInterface(regexp, riid, ppv);
1845 IDispatch_Release(regexp);
1846 return hres;
1847}
HRESULT create_regexp(IDispatch **ret)
Definition: vbregexp.c:1811