jscript: Don't use VARTYPE as is in literal_t.

This commit is contained in:
Jacek Caban 2009-10-14 14:41:50 +02:00 committed by Alexandre Julliard
parent b462e34cf8
commit fa3e6917b4
4 changed files with 34 additions and 22 deletions

View File

@ -349,31 +349,33 @@ static HRESULT equal2_values(VARIANT *lval, VARIANT *rval, BOOL *ret)
static HRESULT literal_to_var(literal_t *literal, VARIANT *v) static HRESULT literal_to_var(literal_t *literal, VARIANT *v)
{ {
V_VT(v) = literal->vt; switch(literal->type) {
case LT_UNDEFINED:
switch(V_VT(v)) { V_VT(v) = VT_EMPTY;
case VT_EMPTY:
case VT_NULL:
break; break;
case VT_I4: case LT_NULL:
V_VT(v) = VT_NULL;
break;
case LT_INT:
V_VT(v) = VT_I4;
V_I4(v) = literal->u.lval; V_I4(v) = literal->u.lval;
break; break;
case VT_R8: case LT_DOUBLE:
V_VT(v) = VT_R8;
V_R8(v) = literal->u.dval; V_R8(v) = literal->u.dval;
break; break;
case VT_BSTR: case LT_STRING:
V_VT(v) = VT_BSTR;
V_BSTR(v) = SysAllocString(literal->u.wstr); V_BSTR(v) = SysAllocString(literal->u.wstr);
break; break;
case VT_BOOL: case LT_BOOL:
V_VT(v) = VT_BOOL;
V_BOOL(v) = literal->u.bval; V_BOOL(v) = literal->u.bval;
break; break;
case VT_DISPATCH: case LT_DISPATCH:
V_VT(v) = VT_DISPATCH;
IDispatch_AddRef(literal->u.disp); IDispatch_AddRef(literal->u.disp);
V_DISPATCH(v) = literal->u.disp; V_DISPATCH(v) = literal->u.disp;
break;
default:
ERR("wrong type %d\n", V_VT(v));
return E_NOTIMPL;
} }
return S_OK; return S_OK;

View File

@ -126,8 +126,18 @@ typedef struct _parameter_t parameter_t;
HRESULT create_source_function(parser_ctx_t*,parameter_t*,source_elements_t*,scope_chain_t*, HRESULT create_source_function(parser_ctx_t*,parameter_t*,source_elements_t*,scope_chain_t*,
const WCHAR*,DWORD,DispatchEx**); const WCHAR*,DWORD,DispatchEx**);
typedef enum {
LT_INT,
LT_DOUBLE,
LT_STRING,
LT_BOOL,
LT_DISPATCH,
LT_UNDEFINED,
LT_NULL
}literal_type_t;
typedef struct { typedef struct {
VARTYPE vt; literal_type_t type;
union { union {
LONG lval; LONG lval;
double dval; double dval;

View File

@ -369,7 +369,7 @@ static literal_t *alloc_int_literal(parser_ctx_t *ctx, LONG l)
{ {
literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); literal_t *ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_I4; ret->type = LT_INT;
ret->u.lval = l; ret->u.lval = l;
return ret; return ret;
@ -447,7 +447,7 @@ static int parse_double_literal(parser_ctx_t *ctx, LONG int_part, literal_t **li
} }
*literal = parser_alloc(ctx, sizeof(literal_t)); *literal = parser_alloc(ctx, sizeof(literal_t));
(*literal)->vt = VT_R8; (*literal)->type = LT_DOUBLE;
(*literal)->u.dval = (double)d*pow(10, exp); (*literal)->u.dval = (double)d*pow(10, exp);
return tNumericLiteral; return tNumericLiteral;
@ -801,7 +801,7 @@ literal_t *parse_regexp(parser_ctx_t *ctx)
add_object_literal(ctx, regexp); add_object_literal(ctx, regexp);
ret = parser_alloc(ctx, sizeof(literal_t)); ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_DISPATCH; ret->type = LT_DISPATCH;
ret->u.disp = (IDispatch*)_IDispatchEx_(regexp); ret->u.disp = (IDispatch*)_IDispatchEx_(regexp);
return ret; return ret;
} }

View File

@ -841,7 +841,7 @@ static literal_t *new_string_literal(parser_ctx_t *ctx, const WCHAR *str)
{ {
literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); literal_t *ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_BSTR; ret->type = LT_STRING;
ret->u.wstr = str; ret->u.wstr = str;
return ret; return ret;
@ -851,7 +851,7 @@ static literal_t *new_null_literal(parser_ctx_t *ctx)
{ {
literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); literal_t *ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_NULL; ret->type = LT_NULL;
return ret; return ret;
} }
@ -860,7 +860,7 @@ static literal_t *new_undefined_literal(parser_ctx_t *ctx)
{ {
literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); literal_t *ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_EMPTY; ret->type = LT_UNDEFINED;
return ret; return ret;
} }
@ -869,7 +869,7 @@ static literal_t *new_boolean_literal(parser_ctx_t *ctx, VARIANT_BOOL bval)
{ {
literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); literal_t *ret = parser_alloc(ctx, sizeof(literal_t));
ret->vt = VT_BOOL; ret->type = LT_BOOL;
ret->u.bval = bval; ret->u.bval = bval;
return ret; return ret;