Sweden-Number/dlls/jscript/jsval.h

169 lines
3.2 KiB
C

/*
* Copyright 2012 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef JSVAL_H
#define JSVAL_H
typedef enum {
JSV_UNDEFINED,
JSV_NULL,
JSV_OBJECT,
JSV_STRING,
JSV_NUMBER,
JSV_BOOL,
JSV_VARIANT
} jsval_type_t;
struct _jsval_t {
jsval_type_t type;
union {
IDispatch *obj;
BSTR str;
double n;
BOOL b;
VARIANT *v;
} u;
};
static inline jsval_t jsval_bool(BOOL b)
{
jsval_t ret;
ret.type = JSV_BOOL;
ret.u.b = b;
return ret;
}
static inline jsval_t jsval_string(BSTR str)
{
jsval_t ret;
ret.type = JSV_STRING;
ret.u.str = str;
return ret;
}
static inline jsval_t jsval_disp(IDispatch *obj)
{
jsval_t ret;
ret.type = JSV_OBJECT;
ret.u.obj = obj;
return ret;
}
static inline jsval_t jsval_obj(jsdisp_t *obj)
{
return jsval_disp(to_disp(obj));
}
static inline jsval_t jsval_null(void)
{
jsval_t ret = { JSV_NULL };
return ret;
}
static inline jsval_t jsval_undefined(void)
{
jsval_t ret = { JSV_UNDEFINED };
return ret;
}
static inline jsval_t jsval_number(double n)
{
jsval_t ret;
ret.type = JSV_NUMBER;
ret.u.n = n;
return ret;
}
static inline jsval_type_t jsval_type(jsval_t v)
{
return v.type;
}
static inline BOOL is_object_instance(jsval_t v)
{
return v.type == JSV_OBJECT;
}
static inline BOOL is_undefined(jsval_t v)
{
return v.type == JSV_UNDEFINED;
}
static inline BOOL is_null(jsval_t v)
{
return v.type == JSV_NULL;
}
static inline BOOL is_null_instance(jsval_t v)
{
return v.type == JSV_NULL || (v.type == JSV_OBJECT && !v.u.obj);
}
static inline BOOL is_string(jsval_t v)
{
return v.type == JSV_STRING;
}
static inline BOOL is_number(jsval_t v)
{
return v.type == JSV_NUMBER;
}
static inline BOOL is_variant(jsval_t v)
{
return v.type == JSV_VARIANT;
}
static inline BOOL is_bool(jsval_t v)
{
return v.type == JSV_BOOL;
}
static inline IDispatch *get_object(jsval_t v)
{
return v.u.obj;
}
static inline double get_number(jsval_t v)
{
return v.u.n;
}
static inline BSTR get_string(jsval_t v)
{
return v.u.str;
}
static inline VARIANT *get_variant(jsval_t v)
{
return v.u.v;
}
static inline BOOL get_bool(jsval_t v)
{
return v.u.b;
}
HRESULT variant_to_jsval(VARIANT*,jsval_t*) DECLSPEC_HIDDEN;
HRESULT jsval_to_variant(jsval_t,VARIANT*) DECLSPEC_HIDDEN;
void jsval_release(jsval_t) DECLSPEC_HIDDEN;
HRESULT jsval_variant(jsval_t*,VARIANT*) DECLSPEC_HIDDEN;
HRESULT jsval_copy(jsval_t,jsval_t*) DECLSPEC_HIDDEN;
#endif