mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:42:56 +00:00
[JSCRIPT] Sync with Wine Staging 3.3. CORE-14434
This commit is contained in:
parent
919215fd3b
commit
8dba275bd6
38 changed files with 859 additions and 453 deletions
|
@ -33,7 +33,7 @@ list(APPEND SOURCE
|
||||||
regexp.c
|
regexp.c
|
||||||
string.c
|
string.c
|
||||||
vbarray.c
|
vbarray.c
|
||||||
jscript.h)
|
precomp.h)
|
||||||
|
|
||||||
list(APPEND jscript_rc_deps
|
list(APPEND jscript_rc_deps
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/jscript.rgs
|
${CMAKE_CURRENT_SOURCE_DIR}/jscript.rgs
|
||||||
|
@ -54,5 +54,5 @@ add_dependencies(jscript jscript_idlheader stdole2)
|
||||||
set_module_type(jscript win32dll)
|
set_module_type(jscript win32dll)
|
||||||
target_link_libraries(jscript uuid wine)
|
target_link_libraries(jscript uuid wine)
|
||||||
add_importlibs(jscript user32 ole32 oleaut32 advapi32 msvcrt kernel32 ntdll)
|
add_importlibs(jscript user32 ole32 oleaut32 advapi32 msvcrt kernel32 ntdll)
|
||||||
add_pch(jscript jscript.h SOURCE)
|
add_pch(jscript precomp.h SOURCE)
|
||||||
add_cd_file(TARGET jscript DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET jscript DESTINATION reactos/system32 FOR all)
|
||||||
|
|
|
@ -16,9 +16,16 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
#include <mshtmhst.h>
|
#include "jscript.h"
|
||||||
|
#include "objsafe.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
/* Defined as extern in urlmon.idl, but not exported by uuid.lib */
|
/* Defined as extern in urlmon.idl, but not exported by uuid.lib */
|
||||||
const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
|
const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
|
||||||
|
|
|
@ -16,8 +16,18 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
||||||
|
@ -37,6 +47,7 @@ static const WCHAR spliceW[] = {'s','p','l','i','c','e',0};
|
||||||
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
|
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
|
||||||
static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
|
static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
|
||||||
static const WCHAR unshiftW[] = {'u','n','s','h','i','f','t',0};
|
static const WCHAR unshiftW[] = {'u','n','s','h','i','f','t',0};
|
||||||
|
static const WCHAR indexOfW[] = {'i','n','d','e','x','O','f',0};
|
||||||
|
|
||||||
static const WCHAR default_separatorW[] = {',',0};
|
static const WCHAR default_separatorW[] = {',',0};
|
||||||
|
|
||||||
|
@ -377,9 +388,10 @@ static HRESULT Array_pop(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned
|
||||||
hres = jsdisp_get_idx(jsthis, length, &val);
|
hres = jsdisp_get_idx(jsthis, length, &val);
|
||||||
if(SUCCEEDED(hres))
|
if(SUCCEEDED(hres))
|
||||||
hres = jsdisp_delete_idx(jsthis, length);
|
hres = jsdisp_delete_idx(jsthis, length);
|
||||||
else if(hres == DISP_E_UNKNOWNNAME)
|
else if(hres == DISP_E_UNKNOWNNAME) {
|
||||||
val = jsval_undefined();
|
val = jsval_undefined();
|
||||||
else
|
hres = S_OK;
|
||||||
|
}else
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
if(SUCCEEDED(hres))
|
if(SUCCEEDED(hres))
|
||||||
|
@ -938,6 +950,61 @@ static HRESULT Array_toLocaleString(script_ctx_t *ctx, vdisp_t *vthis, WORD flag
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT Array_indexOf(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||||
|
jsval_t *r)
|
||||||
|
{
|
||||||
|
jsdisp_t *jsthis;
|
||||||
|
unsigned length, i, from = 0;
|
||||||
|
jsval_t search, value;
|
||||||
|
BOOL eq;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
hres = get_length(ctx, vthis, &jsthis, &length);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
if(!length) {
|
||||||
|
if(r) *r = jsval_number(-1);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
search = argc ? argv[0] : jsval_undefined();
|
||||||
|
|
||||||
|
if(argc > 1) {
|
||||||
|
double from_arg;
|
||||||
|
|
||||||
|
hres = to_integer(ctx, argv[1], &from_arg);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
if(from_arg >= 0)
|
||||||
|
from = min(from_arg, length);
|
||||||
|
else
|
||||||
|
from = max(from_arg + length, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = from; i < length; i++) {
|
||||||
|
hres = jsdisp_get_idx(jsthis, i, &value);
|
||||||
|
if(hres == DISP_E_UNKNOWNNAME)
|
||||||
|
continue;
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
hres = jsval_strict_equal(value, search, &eq);
|
||||||
|
jsval_release(value);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
if(eq) {
|
||||||
|
if(r) *r = jsval_number(i);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(r) *r = jsval_number(-1);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* ECMA-262 3rd Edition 15.4.4.13 */
|
/* ECMA-262 3rd Edition 15.4.4.13 */
|
||||||
static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv,
|
static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||||
jsval_t *r)
|
jsval_t *r)
|
||||||
|
@ -1036,6 +1103,7 @@ static void Array_on_put(jsdisp_t *dispex, const WCHAR *name)
|
||||||
|
|
||||||
static const builtin_prop_t Array_props[] = {
|
static const builtin_prop_t Array_props[] = {
|
||||||
{concatW, Array_concat, PROPF_METHOD|1},
|
{concatW, Array_concat, PROPF_METHOD|1},
|
||||||
|
{indexOfW, Array_indexOf, PROPF_ES5|PROPF_METHOD|1},
|
||||||
{joinW, Array_join, PROPF_METHOD|1},
|
{joinW, Array_join, PROPF_METHOD|1},
|
||||||
{lengthW, NULL,0, Array_get_length, Array_set_length},
|
{lengthW, NULL,0, Array_get_length, Array_set_length},
|
||||||
{popW, Array_pop, PROPF_METHOD},
|
{popW, Array_pop, PROPF_METHOD},
|
||||||
|
@ -1072,6 +1140,24 @@ static const builtin_info_t ArrayInst_info = {
|
||||||
Array_on_put
|
Array_on_put
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* ECMA-262 5.1 Edition 15.4.3.2 */
|
||||||
|
static HRESULT ArrayConstr_isArray(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
|
||||||
|
{
|
||||||
|
jsdisp_t *obj;
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
if(!argc || !is_object_instance(argv[0])) {
|
||||||
|
if(r) *r = jsval_bool(FALSE);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = iface_to_jsdisp(get_object(argv[0]));
|
||||||
|
if(r) *r = jsval_bool(obj && is_class(obj, JSCLASS_ARRAY));
|
||||||
|
if(obj) jsdisp_release(obj);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT ArrayConstr_value(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv,
|
static HRESULT ArrayConstr_value(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||||
jsval_t *r)
|
jsval_t *r)
|
||||||
{
|
{
|
||||||
|
@ -1146,6 +1232,21 @@ static HRESULT alloc_array(script_ctx_t *ctx, jsdisp_t *object_prototype, ArrayI
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const WCHAR isArrayW[] = {'i','s','A','r','r','a','y',0};
|
||||||
|
|
||||||
|
static const builtin_prop_t ArrayConstr_props[] = {
|
||||||
|
{isArrayW, ArrayConstr_isArray, PROPF_ES5|PROPF_METHOD|1}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const builtin_info_t ArrayConstr_info = {
|
||||||
|
JSCLASS_FUNCTION,
|
||||||
|
DEFAULT_FUNCTION_VALUE,
|
||||||
|
sizeof(ArrayConstr_props)/sizeof(*ArrayConstr_props),
|
||||||
|
ArrayConstr_props,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
|
HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
|
||||||
{
|
{
|
||||||
ArrayInstance *array;
|
ArrayInstance *array;
|
||||||
|
@ -1157,7 +1258,7 @@ HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdis
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
hres = create_builtin_constructor(ctx, ArrayConstr_value, ArrayW, NULL, PROPF_CONSTR|1, &array->dispex, ret);
|
hres = create_builtin_constructor(ctx, ArrayConstr_value, ArrayW, &ArrayConstr_info, PROPF_CONSTR|1, &array->dispex, ret);
|
||||||
|
|
||||||
jsdisp_release(&array->dispex);
|
jsdisp_release(&array->dispex);
|
||||||
return hres;
|
return hres;
|
||||||
|
|
|
@ -17,8 +17,14 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* A Bison parser, made by GNU Bison 3.0.2. */
|
/* A Bison parser, made by GNU Bison 3.0. */
|
||||||
|
|
||||||
/* Bison implementation for Yacc-like parsers in C
|
/* Bison implementation for Yacc-like parsers in C
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
#define YYBISON 1
|
#define YYBISON 1
|
||||||
|
|
||||||
/* Bison version. */
|
/* Bison version. */
|
||||||
#define YYBISON_VERSION "3.0.2"
|
#define YYBISON_VERSION "3.0"
|
||||||
|
|
||||||
/* Skeleton name. */
|
/* Skeleton name. */
|
||||||
#define YYSKELETON_NAME "yacc.c"
|
#define YYSKELETON_NAME "yacc.c"
|
||||||
|
@ -70,15 +70,23 @@
|
||||||
/* Copy the first part of user declarations. */
|
/* Copy the first part of user declarations. */
|
||||||
#line 19 "cc_parser.y" /* yacc.c:339 */
|
#line 19 "cc_parser.y" /* yacc.c:339 */
|
||||||
|
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
|
|
||||||
#line 84 "cc_parser.tab.c" /* yacc.c:339 */
|
#line 84 "cc_parser.tab.c" /* yacc.c:339 */
|
||||||
|
|
||||||
# ifndef YY_NULLPTR
|
# ifndef YY_NULL
|
||||||
# if defined __cplusplus && 201103L <= __cplusplus
|
# if defined __cplusplus && 201103L <= __cplusplus
|
||||||
# define YY_NULLPTR nullptr
|
# define YY_NULL nullptr
|
||||||
# else
|
# else
|
||||||
# define YY_NULLPTR 0
|
# define YY_NULL 0
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -90,7 +98,10 @@
|
||||||
# define YYERROR_VERBOSE 0
|
# define YYERROR_VERBOSE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* In a future release of Bison, this section will be replaced
|
||||||
|
by #include "cc_parser.tab.h". */
|
||||||
|
#ifndef YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
|
||||||
|
# define YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
|
||||||
/* Debug traces. */
|
/* Debug traces. */
|
||||||
#ifndef YYDEBUG
|
#ifndef YYDEBUG
|
||||||
# define YYDEBUG 0
|
# define YYDEBUG 0
|
||||||
|
@ -128,7 +139,7 @@ union YYSTYPE
|
||||||
|
|
||||||
ccval_t ccval;
|
ccval_t ccval;
|
||||||
|
|
||||||
#line 140 "cc_parser.tab.c" /* yacc.c:355 */
|
#line 143 "cc_parser.tab.c" /* yacc.c:355 */
|
||||||
};
|
};
|
||||||
# define YYSTYPE_IS_TRIVIAL 1
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
# define YYSTYPE_IS_DECLARED 1
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
|
@ -138,7 +149,7 @@ union YYSTYPE
|
||||||
|
|
||||||
int cc_parser_parse (parser_ctx_t *ctx);
|
int cc_parser_parse (parser_ctx_t *ctx);
|
||||||
|
|
||||||
|
#endif /* !YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED */
|
||||||
|
|
||||||
/* Copy the second part of user declarations. */
|
/* Copy the second part of user declarations. */
|
||||||
#line 47 "cc_parser.y" /* yacc.c:358 */
|
#line 47 "cc_parser.y" /* yacc.c:358 */
|
||||||
|
@ -235,7 +246,7 @@ static int cc_parser_lex(void *lval, parser_ctx_t *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#line 247 "cc_parser.tab.c" /* yacc.c:358 */
|
#line 250 "cc_parser.tab.c" /* yacc.c:358 */
|
||||||
|
|
||||||
#ifdef short
|
#ifdef short
|
||||||
# undef short
|
# undef short
|
||||||
|
@ -292,30 +303,11 @@ typedef short int yytype_int16;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef YY_ATTRIBUTE
|
#ifndef __attribute__
|
||||||
# if (defined __GNUC__ \
|
/* This feature is available in gcc versions 2.5 and later. */
|
||||||
&& (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
|
# if (! defined __GNUC__ || __GNUC__ < 2 \
|
||||||
|| defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
|
|| (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
|
||||||
# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
|
# define __attribute__(Spec) /* empty */
|
||||||
# else
|
|
||||||
# define YY_ATTRIBUTE(Spec) /* empty */
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef YY_ATTRIBUTE_PURE
|
|
||||||
# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef YY_ATTRIBUTE_UNUSED
|
|
||||||
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined _Noreturn \
|
|
||||||
&& (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
|
|
||||||
# if defined _MSC_VER && 1200 <= _MSC_VER
|
|
||||||
# define _Noreturn __declspec (noreturn)
|
|
||||||
# else
|
|
||||||
# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -553,7 +545,7 @@ static const char *const yytname[] =
|
||||||
"CCBitwiseORExpression", "CCBitwiseXORExpression",
|
"CCBitwiseORExpression", "CCBitwiseXORExpression",
|
||||||
"CCBitwiseANDExpression", "CCEqualityExpression",
|
"CCBitwiseANDExpression", "CCEqualityExpression",
|
||||||
"CCRelationalExpression", "CCShiftExpression", "CCAdditiveExpression",
|
"CCRelationalExpression", "CCShiftExpression", "CCAdditiveExpression",
|
||||||
"CCMultiplicativeExpression", YY_NULLPTR
|
"CCMultiplicativeExpression", YY_NULL
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -955,11 +947,11 @@ static int
|
||||||
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
|
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
|
||||||
yytype_int16 *yyssp, int yytoken)
|
yytype_int16 *yyssp, int yytoken)
|
||||||
{
|
{
|
||||||
YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
|
YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
|
||||||
YYSIZE_T yysize = yysize0;
|
YYSIZE_T yysize = yysize0;
|
||||||
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
|
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
|
||||||
/* Internationalized format string. */
|
/* Internationalized format string. */
|
||||||
const char *yyformat = YY_NULLPTR;
|
const char *yyformat = YY_NULL;
|
||||||
/* Arguments of yyformat. */
|
/* Arguments of yyformat. */
|
||||||
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
|
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
|
||||||
/* Number of reported tokens (one for the "unexpected", one per
|
/* Number of reported tokens (one for the "unexpected", one per
|
||||||
|
@ -1016,7 +1008,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
|
||||||
}
|
}
|
||||||
yyarg[yycount++] = yytname[yyx];
|
yyarg[yycount++] = yytname[yyx];
|
||||||
{
|
{
|
||||||
YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
|
YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
|
||||||
if (! (yysize <= yysize1
|
if (! (yysize <= yysize1
|
||||||
&& yysize1 <= YYSTACK_ALLOC_MAXIMUM))
|
&& yysize1 <= YYSTACK_ALLOC_MAXIMUM))
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -1355,233 +1347,233 @@ yyreduce:
|
||||||
case 2:
|
case 2:
|
||||||
#line 146 "cc_parser.y" /* yacc.c:1646 */
|
#line 146 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ ctx->ccval = (yyvsp[0].ccval); YYACCEPT; }
|
{ ctx->ccval = (yyvsp[0].ccval); YYACCEPT; }
|
||||||
#line 1367 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1351 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
#line 149 "cc_parser.y" /* yacc.c:1646 */
|
#line 149 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1373 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1357 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
#line 150 "cc_parser.y" /* yacc.c:1646 */
|
#line 150 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[-1].ccval); }
|
{ (yyval.ccval) = (yyvsp[-1].ccval); }
|
||||||
#line 1379 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1363 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
#line 151 "cc_parser.y" /* yacc.c:1646 */
|
#line 151 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(!get_ccbool((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(!get_ccbool((yyvsp[0].ccval))); }
|
||||||
#line 1385 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1369 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
#line 152 "cc_parser.y" /* yacc.c:1646 */
|
#line 152 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'~' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'~' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1391 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1375 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
#line 153 "cc_parser.y" /* yacc.c:1646 */
|
#line 153 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'+' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'+' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1397 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1381 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
#line 154 "cc_parser.y" /* yacc.c:1646 */
|
#line 154 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'-' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'-' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1403 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1387 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
#line 157 "cc_parser.y" /* yacc.c:1646 */
|
#line 157 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1409 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1393 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 10:
|
case 10:
|
||||||
#line 159 "cc_parser.y" /* yacc.c:1646 */
|
#line 159 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'||' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'||' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1415 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1399 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 11:
|
case 11:
|
||||||
#line 162 "cc_parser.y" /* yacc.c:1646 */
|
#line 162 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1421 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1405 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 12:
|
case 12:
|
||||||
#line 164 "cc_parser.y" /* yacc.c:1646 */
|
#line 164 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'&&' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'&&' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1427 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1411 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 13:
|
case 13:
|
||||||
#line 167 "cc_parser.y" /* yacc.c:1646 */
|
#line 167 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1433 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1417 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 14:
|
case 14:
|
||||||
#line 169 "cc_parser.y" /* yacc.c:1646 */
|
#line 169 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'|' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'|' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1439 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1423 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 15:
|
case 15:
|
||||||
#line 172 "cc_parser.y" /* yacc.c:1646 */
|
#line 172 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1445 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1429 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
#line 174 "cc_parser.y" /* yacc.c:1646 */
|
#line 174 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'^' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'^' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1451 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1435 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 17:
|
case 17:
|
||||||
#line 177 "cc_parser.y" /* yacc.c:1646 */
|
#line 177 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1457 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1441 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 18:
|
case 18:
|
||||||
#line 179 "cc_parser.y" /* yacc.c:1646 */
|
#line 179 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'&' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'&' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1463 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1447 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19:
|
case 19:
|
||||||
#line 182 "cc_parser.y" /* yacc.c:1646 */
|
#line 182 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1469 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1453 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 20:
|
case 20:
|
||||||
#line 184 "cc_parser.y" /* yacc.c:1646 */
|
#line 184 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) == get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) == get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1475 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1459 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 21:
|
case 21:
|
||||||
#line 186 "cc_parser.y" /* yacc.c:1646 */
|
#line 186 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) != get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) != get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1481 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1465 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 22:
|
case 22:
|
||||||
#line 188 "cc_parser.y" /* yacc.c:1646 */
|
#line 188 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'===' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'===' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1487 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1471 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 23:
|
case 23:
|
||||||
#line 190 "cc_parser.y" /* yacc.c:1646 */
|
#line 190 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'!==' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'!==' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1493 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1477 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 24:
|
case 24:
|
||||||
#line 193 "cc_parser.y" /* yacc.c:1646 */
|
#line 193 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1499 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1483 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 25:
|
case 25:
|
||||||
#line 195 "cc_parser.y" /* yacc.c:1646 */
|
#line 195 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) < get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) < get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1505 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1489 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 26:
|
case 26:
|
||||||
#line 197 "cc_parser.y" /* yacc.c:1646 */
|
#line 197 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) <= get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) <= get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1511 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1495 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 27:
|
case 27:
|
||||||
#line 199 "cc_parser.y" /* yacc.c:1646 */
|
#line 199 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) > get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) > get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1517 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1501 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 28:
|
case 28:
|
||||||
#line 201 "cc_parser.y" /* yacc.c:1646 */
|
#line 201 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) >= get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) >= get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1523 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1507 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 29:
|
case 29:
|
||||||
#line 204 "cc_parser.y" /* yacc.c:1646 */
|
#line 204 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1529 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1513 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 30:
|
case 30:
|
||||||
#line 206 "cc_parser.y" /* yacc.c:1646 */
|
#line 206 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'<<' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'<<' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1535 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1519 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 31:
|
case 31:
|
||||||
#line 208 "cc_parser.y" /* yacc.c:1646 */
|
#line 208 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1541 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1525 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 32:
|
case 32:
|
||||||
#line 210 "cc_parser.y" /* yacc.c:1646 */
|
#line 210 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'>>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'>>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1547 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1531 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 33:
|
case 33:
|
||||||
#line 213 "cc_parser.y" /* yacc.c:1646 */
|
#line 213 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1553 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1537 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 34:
|
case 34:
|
||||||
#line 215 "cc_parser.y" /* yacc.c:1646 */
|
#line 215 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) + get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) + get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1559 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1543 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 35:
|
case 35:
|
||||||
#line 217 "cc_parser.y" /* yacc.c:1646 */
|
#line 217 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) - get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) - get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1565 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1549 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 36:
|
case 36:
|
||||||
#line 220 "cc_parser.y" /* yacc.c:1646 */
|
#line 220 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
{ (yyval.ccval) = (yyvsp[0].ccval); }
|
||||||
#line 1571 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1555 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 37:
|
case 37:
|
||||||
#line 222 "cc_parser.y" /* yacc.c:1646 */
|
#line 222 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) * get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) * get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1577 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1561 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38:
|
case 38:
|
||||||
#line 224 "cc_parser.y" /* yacc.c:1646 */
|
#line 224 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) / get_ccnum((yyvsp[0].ccval))); }
|
{ (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) / get_ccnum((yyvsp[0].ccval))); }
|
||||||
#line 1583 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1567 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 39:
|
case 39:
|
||||||
#line 226 "cc_parser.y" /* yacc.c:1646 */
|
#line 226 "cc_parser.y" /* yacc.c:1646 */
|
||||||
{ FIXME("'%%' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
{ FIXME("'%%' expression not implemented\n"); ctx->hres = E_NOTIMPL; YYABORT; }
|
||||||
#line 1589 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1573 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
#line 1593 "cc_parser.tab.c" /* yacc.c:1646 */
|
#line 1577 "cc_parser.tab.c" /* yacc.c:1646 */
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
/* User semantic actions sometimes alter yychar, and that requires
|
/* User semantic actions sometimes alter yychar, and that requires
|
||||||
|
|
82
dll/win32/jscript/cc_parser.tab.h
Normal file
82
dll/win32/jscript/cc_parser.tab.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/* A Bison parser, made by GNU Bison 3.0. */
|
||||||
|
|
||||||
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
|
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* As a special exception, you may create a larger work that contains
|
||||||
|
part or all of the Bison parser skeleton and distribute that work
|
||||||
|
under terms of your choice, so long as that work isn't itself a
|
||||||
|
parser generator using the skeleton or a modified version thereof
|
||||||
|
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||||
|
the parser skeleton itself, you may (at your option) remove this
|
||||||
|
special exception, which will cause the skeleton and the resulting
|
||||||
|
Bison output files to be licensed under the GNU General Public
|
||||||
|
License without this special exception.
|
||||||
|
|
||||||
|
This special exception was added by the Free Software Foundation in
|
||||||
|
version 2.2 of Bison. */
|
||||||
|
|
||||||
|
#ifndef YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
|
||||||
|
# define YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
|
||||||
|
/* Debug traces. */
|
||||||
|
#ifndef YYDEBUG
|
||||||
|
# define YYDEBUG 0
|
||||||
|
#endif
|
||||||
|
#if YYDEBUG
|
||||||
|
extern int cc_parser_debug;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Token type. */
|
||||||
|
#ifndef YYTOKENTYPE
|
||||||
|
# define YYTOKENTYPE
|
||||||
|
enum yytokentype
|
||||||
|
{
|
||||||
|
tEQ = 258,
|
||||||
|
tEQEQ = 259,
|
||||||
|
tNEQ = 260,
|
||||||
|
tNEQEQ = 261,
|
||||||
|
tLSHIFT = 262,
|
||||||
|
tRSHIFT = 263,
|
||||||
|
tRRSHIFT = 264,
|
||||||
|
tOR = 265,
|
||||||
|
tAND = 266,
|
||||||
|
tLEQ = 267,
|
||||||
|
tGEQ = 268,
|
||||||
|
tCCValue = 269
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Value type. */
|
||||||
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
union YYSTYPE
|
||||||
|
{
|
||||||
|
#line 36 "cc_parser.y" /* yacc.c:1909 */
|
||||||
|
|
||||||
|
ccval_t ccval;
|
||||||
|
|
||||||
|
#line 73 "cc_parser.tab.h" /* yacc.c:1909 */
|
||||||
|
};
|
||||||
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cc_parser_parse (parser_ctx_t *ctx);
|
||||||
|
|
||||||
|
#endif /* !YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED */
|
|
@ -19,6 +19,12 @@
|
||||||
%{
|
%{
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,17 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
#include <wine/rbtree.h>
|
#include "wine/rbtree.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
WINE_DECLARE_DEBUG_CHANNEL(jscript_disas);
|
WINE_DECLARE_DEBUG_CHANNEL(jscript_disas);
|
||||||
|
|
||||||
typedef struct _statement_ctx_t {
|
typedef struct _statement_ctx_t {
|
||||||
|
@ -854,29 +861,29 @@ static HRESULT literal_as_bstr(compiler_ctx_t *ctx, literal_t *literal, BSTR *st
|
||||||
|
|
||||||
static HRESULT compile_array_literal(compiler_ctx_t *ctx, array_literal_expression_t *expr)
|
static HRESULT compile_array_literal(compiler_ctx_t *ctx, array_literal_expression_t *expr)
|
||||||
{
|
{
|
||||||
unsigned i, elem_cnt = expr->length;
|
unsigned length = 0;
|
||||||
array_element_t *iter;
|
array_element_t *iter;
|
||||||
|
unsigned array_instr;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
for(iter = expr->element_list; iter; iter = iter->next) {
|
array_instr = push_instr(ctx, OP_carray);
|
||||||
elem_cnt += iter->elision+1;
|
|
||||||
|
|
||||||
for(i=0; i < iter->elision; i++) {
|
for(iter = expr->element_list; iter; iter = iter->next) {
|
||||||
if(!push_instr(ctx, OP_undefined))
|
length += iter->elision;
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
hres = compile_expression(ctx, iter->expr, TRUE);
|
hres = compile_expression(ctx, iter->expr, TRUE);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
|
hres = push_instr_uint(ctx, OP_carray_set, length);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
length++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0; i < expr->length; i++) {
|
instr_ptr(ctx, array_instr)->u.arg[0].uint = length + expr->length;
|
||||||
if(!push_instr(ctx, OP_undefined))
|
return S_OK;
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
return push_instr_uint(ctx, OP_carray, elem_cnt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT compile_object_literal(compiler_ctx_t *ctx, property_value_expression_t *expr)
|
static HRESULT compile_object_literal(compiler_ctx_t *ctx, property_value_expression_t *expr)
|
||||||
|
|
|
@ -17,8 +17,19 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
/* 1601 to 1970 is 369 years plus 89 leap days */
|
/* 1601 to 1970 is 369 years plus 89 leap days */
|
||||||
#define TIME_EPOCH ((ULONGLONG)(369 * 365 + 89) * 86400 * 1000)
|
#define TIME_EPOCH ((ULONGLONG)(369 * 365 + 89) * 86400 * 1000)
|
||||||
|
|
||||||
|
@ -81,6 +92,7 @@ static const WCHAR getYearW[] = {'g','e','t','Y','e','a','r',0};
|
||||||
static const WCHAR setYearW[] = {'s','e','t','Y','e','a','r',0};
|
static const WCHAR setYearW[] = {'s','e','t','Y','e','a','r',0};
|
||||||
|
|
||||||
static const WCHAR UTCW[] = {'U','T','C',0};
|
static const WCHAR UTCW[] = {'U','T','C',0};
|
||||||
|
static const WCHAR nowW[] = {'n','o','w',0};
|
||||||
static const WCHAR parseW[] = {'p','a','r','s','e',0};
|
static const WCHAR parseW[] = {'p','a','r','s','e',0};
|
||||||
|
|
||||||
static inline DateInstance *date_from_jsdisp(jsdisp_t *jsdisp)
|
static inline DateInstance *date_from_jsdisp(jsdisp_t *jsdisp)
|
||||||
|
@ -441,6 +453,17 @@ static inline DOUBLE time_clip(DOUBLE time)
|
||||||
return floor(time);
|
return floor(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double date_now(void)
|
||||||
|
{
|
||||||
|
FILETIME ftime;
|
||||||
|
LONGLONG time;
|
||||||
|
|
||||||
|
GetSystemTimeAsFileTime(&ftime);
|
||||||
|
time = ((LONGLONG)ftime.dwHighDateTime << 32) + ftime.dwLowDateTime;
|
||||||
|
|
||||||
|
return time/10000 - TIME_EPOCH;
|
||||||
|
}
|
||||||
|
|
||||||
static SYSTEMTIME create_systemtime(DOUBLE time)
|
static SYSTEMTIME create_systemtime(DOUBLE time)
|
||||||
{
|
{
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
|
@ -2350,6 +2373,15 @@ static HRESULT DateConstr_UTC(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ECMA-262 5.1 Edition 15.9.4.4 */
|
||||||
|
static HRESULT DateConstr_now(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
|
||||||
|
{
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
if(r) *r = jsval_number(date_now());
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT DateConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
static HRESULT DateConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||||
jsval_t *r)
|
jsval_t *r)
|
||||||
{
|
{
|
||||||
|
@ -2362,19 +2394,11 @@ static HRESULT DateConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
|
||||||
case DISPATCH_CONSTRUCT:
|
case DISPATCH_CONSTRUCT:
|
||||||
switch(argc) {
|
switch(argc) {
|
||||||
/* ECMA-262 3rd Edition 15.9.3.3 */
|
/* ECMA-262 3rd Edition 15.9.3.3 */
|
||||||
case 0: {
|
case 0:
|
||||||
FILETIME time;
|
hres = create_date(ctx, NULL, date_now(), &date);
|
||||||
LONGLONG lltime;
|
|
||||||
|
|
||||||
GetSystemTimeAsFileTime(&time);
|
|
||||||
lltime = ((LONGLONG)time.dwHighDateTime<<32)
|
|
||||||
+ time.dwLowDateTime;
|
|
||||||
|
|
||||||
hres = create_date(ctx, NULL, lltime/10000-TIME_EPOCH, &date);
|
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* ECMA-262 3rd Edition 15.9.3.2 */
|
/* ECMA-262 3rd Edition 15.9.3.2 */
|
||||||
case 1: {
|
case 1: {
|
||||||
|
@ -2443,6 +2467,7 @@ static HRESULT DateConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
|
||||||
|
|
||||||
static const builtin_prop_t DateConstr_props[] = {
|
static const builtin_prop_t DateConstr_props[] = {
|
||||||
{UTCW, DateConstr_UTC, PROPF_METHOD},
|
{UTCW, DateConstr_UTC, PROPF_METHOD},
|
||||||
|
{nowW, DateConstr_now, PROPF_HTML|PROPF_METHOD},
|
||||||
{parseW, DateConstr_parse, PROPF_METHOD}
|
{parseW, DateConstr_parse, PROPF_METHOD}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file implements algorithm for decoding scripts encoded by
|
* This file implements algorithm for decoding scripts encoded by
|
||||||
* screnc.exe. The 'secret' algorithm that's well documented here:
|
* screnc.exe. The 'secret' algorithm that's well documented here:
|
||||||
|
|
|
@ -16,8 +16,15 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
#define FDEX_VERSION_MASK 0xf0000000
|
#define FDEX_VERSION_MASK 0xf0000000
|
||||||
#define GOLDEN_RATIO 0x9E3779B9U
|
#define GOLDEN_RATIO 0x9E3779B9U
|
||||||
|
|
||||||
|
@ -83,8 +90,19 @@ static const builtin_prop_t *find_builtin_prop(jsdisp_t *This, const WCHAR *name
|
||||||
i = (min+max)/2;
|
i = (min+max)/2;
|
||||||
|
|
||||||
r = strcmpW(name, This->builtin_info->props[i].name);
|
r = strcmpW(name, This->builtin_info->props[i].name);
|
||||||
if(!r)
|
if(!r) {
|
||||||
|
/* Skip prop if it's available only in higher compatibility mode. */
|
||||||
|
unsigned version = (This->builtin_info->props[i].flags & PROPF_VERSION_MASK)
|
||||||
|
>> PROPF_VERSION_SHIFT;
|
||||||
|
if(version && version > This->ctx->version)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Skip prop if it's available only in HTML mode and we're not running in HTML mode. */
|
||||||
|
if((This->builtin_info->props[i].flags & PROPF_HTML) && !This->ctx->html_mode)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
return This->builtin_info->props + i;
|
return This->builtin_info->props + i;
|
||||||
|
}
|
||||||
|
|
||||||
if(r < 0)
|
if(r < 0)
|
||||||
max = i-1;
|
max = i-1;
|
||||||
|
|
|
@ -16,7 +16,18 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR booleanW[] = {'b','o','o','l','e','a','n',0};
|
static const WCHAR booleanW[] = {'b','o','o','l','e','a','n',0};
|
||||||
static const WCHAR functionW[] = {'f','u','n','c','t','i','o','n',0};
|
static const WCHAR functionW[] = {'f','u','n','c','t','i','o','n',0};
|
||||||
|
@ -514,7 +525,7 @@ static HRESULT disp_cmp(IDispatch *disp1, IDispatch *disp2, BOOL *ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ECMA-262 3rd Edition 11.9.6 */
|
/* ECMA-262 3rd Edition 11.9.6 */
|
||||||
static HRESULT equal2_values(jsval_t lval, jsval_t rval, BOOL *ret)
|
HRESULT jsval_strict_equal(jsval_t lval, jsval_t rval, BOOL *ret)
|
||||||
{
|
{
|
||||||
jsval_type_t type = jsval_type(lval);
|
jsval_type_t type = jsval_type(lval);
|
||||||
|
|
||||||
|
@ -843,7 +854,7 @@ static HRESULT interp_case(script_ctx_t *ctx)
|
||||||
TRACE("\n");
|
TRACE("\n");
|
||||||
|
|
||||||
v = stack_pop(ctx);
|
v = stack_pop(ctx);
|
||||||
hres = equal2_values(stack_top(ctx), v, &b);
|
hres = jsval_strict_equal(stack_top(ctx), v, &b);
|
||||||
jsval_release(v);
|
jsval_release(v);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
@ -1290,7 +1301,7 @@ static HRESULT interp_local(script_ctx_t *ctx)
|
||||||
jsval_t copy;
|
jsval_t copy;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
TRACE("%d\n", arg);
|
TRACE("%d: %s\n", arg, debugstr_w(local_name(frame, arg)));
|
||||||
|
|
||||||
if(!frame->base_scope || !frame->base_scope->frame)
|
if(!frame->base_scope || !frame->base_scope->frame)
|
||||||
return identifier_value(ctx, local_name(frame, arg));
|
return identifier_value(ctx, local_name(frame, arg));
|
||||||
|
@ -1393,8 +1404,6 @@ static HRESULT interp_carray(script_ctx_t *ctx)
|
||||||
{
|
{
|
||||||
const unsigned arg = get_op_uint(ctx, 0);
|
const unsigned arg = get_op_uint(ctx, 0);
|
||||||
jsdisp_t *array;
|
jsdisp_t *array;
|
||||||
jsval_t val;
|
|
||||||
unsigned i;
|
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
TRACE("%u\n", arg);
|
TRACE("%u\n", arg);
|
||||||
|
@ -1403,20 +1412,27 @@ static HRESULT interp_carray(script_ctx_t *ctx)
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
i = arg;
|
|
||||||
while(i--) {
|
|
||||||
val = stack_pop(ctx);
|
|
||||||
hres = jsdisp_propput_idx(array, i, val);
|
|
||||||
jsval_release(val);
|
|
||||||
if(FAILED(hres)) {
|
|
||||||
jsdisp_release(array);
|
|
||||||
return hres;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return stack_push(ctx, jsval_obj(array));
|
return stack_push(ctx, jsval_obj(array));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT interp_carray_set(script_ctx_t *ctx)
|
||||||
|
{
|
||||||
|
const unsigned index = get_op_uint(ctx, 0);
|
||||||
|
jsval_t value, array;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
value = stack_pop(ctx);
|
||||||
|
|
||||||
|
TRACE("[%u] = %s\n", index, debugstr_jsval(value));
|
||||||
|
|
||||||
|
array = stack_top(ctx);
|
||||||
|
assert(is_object_instance(array));
|
||||||
|
|
||||||
|
hres = jsdisp_propput_idx(iface_to_jsdisp(get_object(array)), index, value);
|
||||||
|
jsval_release(value);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
/* ECMA-262 3rd Edition 11.1.5 */
|
/* ECMA-262 3rd Edition 11.1.5 */
|
||||||
static HRESULT interp_new_obj(script_ctx_t *ctx)
|
static HRESULT interp_new_obj(script_ctx_t *ctx)
|
||||||
{
|
{
|
||||||
|
@ -2092,7 +2108,7 @@ static HRESULT interp_preinc(script_ctx_t *ctx)
|
||||||
static HRESULT equal_values(script_ctx_t *ctx, jsval_t lval, jsval_t rval, BOOL *ret)
|
static HRESULT equal_values(script_ctx_t *ctx, jsval_t lval, jsval_t rval, BOOL *ret)
|
||||||
{
|
{
|
||||||
if(jsval_type(lval) == jsval_type(rval) || (is_number(lval) && is_number(rval)))
|
if(jsval_type(lval) == jsval_type(rval) || (is_number(lval) && is_number(rval)))
|
||||||
return equal2_values(lval, rval, ret);
|
return jsval_strict_equal(lval, rval, ret);
|
||||||
|
|
||||||
/* FIXME: NULL disps should be handled in more general way */
|
/* FIXME: NULL disps should be handled in more general way */
|
||||||
if(is_object_instance(lval) && !get_object(lval))
|
if(is_object_instance(lval) && !get_object(lval))
|
||||||
|
@ -2222,7 +2238,7 @@ static HRESULT interp_eq2(script_ctx_t *ctx)
|
||||||
|
|
||||||
TRACE("%s === %s\n", debugstr_jsval(l), debugstr_jsval(r));
|
TRACE("%s === %s\n", debugstr_jsval(l), debugstr_jsval(r));
|
||||||
|
|
||||||
hres = equal2_values(r, l, &b);
|
hres = jsval_strict_equal(r, l, &b);
|
||||||
jsval_release(l);
|
jsval_release(l);
|
||||||
jsval_release(r);
|
jsval_release(r);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
|
@ -2243,7 +2259,7 @@ static HRESULT interp_neq2(script_ctx_t *ctx)
|
||||||
r = stack_pop(ctx);
|
r = stack_pop(ctx);
|
||||||
l = stack_pop(ctx);
|
l = stack_pop(ctx);
|
||||||
|
|
||||||
hres = equal2_values(r, l, &b);
|
hres = jsval_strict_equal(r, l, &b);
|
||||||
jsval_release(l);
|
jsval_release(l);
|
||||||
jsval_release(r);
|
jsval_release(r);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
X(call, 1, ARG_UINT, ARG_UINT) \
|
X(call, 1, ARG_UINT, ARG_UINT) \
|
||||||
X(call_member,1, ARG_UINT, ARG_UINT) \
|
X(call_member,1, ARG_UINT, ARG_UINT) \
|
||||||
X(carray, 1, ARG_UINT, 0) \
|
X(carray, 1, ARG_UINT, 0) \
|
||||||
|
X(carray_set, 1, ARG_UINT, 0) \
|
||||||
X(case, 0, ARG_ADDR, 0) \
|
X(case, 0, ARG_ADDR, 0) \
|
||||||
X(cnd_nz, 0, ARG_ADDR, 0) \
|
X(cnd_nz, 0, ARG_ADDR, 0) \
|
||||||
X(cnd_z, 0, ARG_ADDR, 0) \
|
X(cnd_z, 0, ARG_ADDR, 0) \
|
||||||
|
|
|
@ -16,8 +16,17 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR descriptionW[] = {'d','e','s','c','r','i','p','t','i','o','n',0};
|
static const WCHAR descriptionW[] = {'d','e','s','c','r','i','p','t','i','o','n',0};
|
||||||
static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0};
|
static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0};
|
||||||
static const WCHAR nameW[] = {'n','a','m','e',0};
|
static const WCHAR nameW[] = {'n','a','m','e',0};
|
||||||
|
|
|
@ -16,7 +16,14 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
|
@ -16,8 +16,18 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR NaNW[] = {'N','a','N',0};
|
static const WCHAR NaNW[] = {'N','a','N',0};
|
||||||
static const WCHAR InfinityW[] = {'I','n','f','i','n','i','t','y',0};
|
static const WCHAR InfinityW[] = {'I','n','f','i','n','i','t','y',0};
|
||||||
|
|
|
@ -16,7 +16,15 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "objsafe.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
|
|
||||||
|
@ -47,6 +55,7 @@ typedef struct {
|
||||||
LONG thread_id;
|
LONG thread_id;
|
||||||
LCID lcid;
|
LCID lcid;
|
||||||
DWORD version;
|
DWORD version;
|
||||||
|
BOOL html_mode;
|
||||||
BOOL is_encode;
|
BOOL is_encode;
|
||||||
|
|
||||||
IActiveScriptSite *site;
|
IActiveScriptSite *site;
|
||||||
|
@ -704,6 +713,7 @@ static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
|
||||||
ctx->active_script = &This->IActiveScript_iface;
|
ctx->active_script = &This->IActiveScript_iface;
|
||||||
ctx->safeopt = This->safeopt;
|
ctx->safeopt = This->safeopt;
|
||||||
ctx->version = This->version;
|
ctx->version = This->version;
|
||||||
|
ctx->html_mode = This->html_mode;
|
||||||
ctx->ei.val = jsval_undefined();
|
ctx->ei.val = jsval_undefined();
|
||||||
heap_pool_init(&ctx->tmp_heap);
|
heap_pool_init(&ctx->tmp_heap);
|
||||||
|
|
||||||
|
@ -912,12 +922,14 @@ static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface,
|
||||||
|
|
||||||
switch(dwProperty) {
|
switch(dwProperty) {
|
||||||
case SCRIPTPROP_INVOKEVERSIONING:
|
case SCRIPTPROP_INVOKEVERSIONING:
|
||||||
if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0 || V_I4(pvarValue) > 15) {
|
if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0
|
||||||
|
|| (V_I4(pvarValue) > 15 && !(V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML))) {
|
||||||
WARN("invalid value %s\n", debugstr_variant(pvarValue));
|
WARN("invalid value %s\n", debugstr_variant(pvarValue));
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
This->version = V_I4(pvarValue);
|
This->version = V_I4(pvarValue) & 0x1ff;
|
||||||
|
This->html_mode = (V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML) != 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unimplemented property %x\n", dwProperty);
|
FIXME("Unimplemented property %x\n", dwProperty);
|
||||||
|
|
|
@ -16,37 +16,38 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _WINE_JSCRIPT_H
|
#pragma once
|
||||||
#define _WINE_JSCRIPT_H
|
|
||||||
|
|
||||||
#include <wine/config.h>
|
|
||||||
#include <wine/port.h>
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
#define WIN32_NO_STATUS
|
|
||||||
#define _INC_WINDOWS
|
|
||||||
#define COM_NO_WINDOWS_H
|
|
||||||
|
|
||||||
#define COBJMACROS
|
#define COBJMACROS
|
||||||
|
|
||||||
#include <windef.h>
|
#include "windef.h"
|
||||||
#include <winbase.h>
|
#include "winbase.h"
|
||||||
#include <objbase.h>
|
#include "winuser.h"
|
||||||
#include <oleauto.h>
|
#include "ole2.h"
|
||||||
#include <dispex.h>
|
#include "dispex.h"
|
||||||
#include <activscp.h>
|
#include "activscp.h"
|
||||||
#include <objsafe.h>
|
|
||||||
|
|
||||||
#include <wine/debug.h>
|
|
||||||
#include <wine/list.h>
|
|
||||||
#include <wine/unicode.h>
|
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
|
||||||
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
#include "wine/heap.h"
|
||||||
|
#include "wine/list.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is Wine jscript extension for ES5 compatible mode. Native IE9+ implements
|
||||||
|
* a separated JavaScript enging in side MSHTML. We implement its features here
|
||||||
|
* and enable it when HTML flag is specified in SCRIPTPROP_INVOKEVERSIONING property.
|
||||||
|
*/
|
||||||
|
#define SCRIPTLANGUAGEVERSION_HTML 0x400
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is Wine jscript extension for ES5 compatible mode. Allowed only in HTML mode.
|
||||||
|
*/
|
||||||
|
#define SCRIPTLANGUAGEVERSION_ES5 0x102
|
||||||
|
|
||||||
typedef struct _jsval_t jsval_t;
|
typedef struct _jsval_t jsval_t;
|
||||||
typedef struct _jsstr_t jsstr_t;
|
typedef struct _jsstr_t jsstr_t;
|
||||||
typedef struct _script_ctx_t script_ctx_t;
|
typedef struct _script_ctx_t script_ctx_t;
|
||||||
|
@ -68,26 +69,6 @@ void heap_pool_clear(heap_pool_t*) DECLSPEC_HIDDEN;
|
||||||
void heap_pool_free(heap_pool_t*) DECLSPEC_HIDDEN;
|
void heap_pool_free(heap_pool_t*) DECLSPEC_HIDDEN;
|
||||||
heap_pool_t *heap_pool_mark(heap_pool_t*) DECLSPEC_HIDDEN;
|
heap_pool_t *heap_pool_mark(heap_pool_t*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static inline void* __WINE_ALLOC_SIZE(1) heap_alloc(size_t size)
|
|
||||||
{
|
|
||||||
return HeapAlloc(GetProcessHeap(), 0, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void* __WINE_ALLOC_SIZE(1) heap_alloc_zero(size_t size)
|
|
||||||
{
|
|
||||||
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void* __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, size_t size)
|
|
||||||
{
|
|
||||||
return HeapReAlloc(GetProcessHeap(), 0, mem, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline BOOL heap_free(void *mem)
|
|
||||||
{
|
|
||||||
return HeapFree(GetProcessHeap(), 0, mem);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline LPWSTR heap_strdupW(LPCWSTR str)
|
static inline LPWSTR heap_strdupW(LPCWSTR str)
|
||||||
{
|
{
|
||||||
LPWSTR ret = NULL;
|
LPWSTR ret = NULL;
|
||||||
|
@ -115,6 +96,11 @@ extern HINSTANCE jscript_hinstance DECLSPEC_HIDDEN;
|
||||||
#define PROPF_CONST 0x0800
|
#define PROPF_CONST 0x0800
|
||||||
#define PROPF_DONTDELETE 0x1000
|
#define PROPF_DONTDELETE 0x1000
|
||||||
|
|
||||||
|
#define PROPF_VERSION_MASK 0x01ff0000
|
||||||
|
#define PROPF_VERSION_SHIFT 16
|
||||||
|
#define PROPF_HTML (SCRIPTLANGUAGEVERSION_HTML << PROPF_VERSION_SHIFT)
|
||||||
|
#define PROPF_ES5 ((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES5) << PROPF_VERSION_SHIFT)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is our internal dispatch flag informing calee that it's called directly from interpreter.
|
* This is our internal dispatch flag informing calee that it's called directly from interpreter.
|
||||||
* If calee is executed as interpreted function, we may let already running interpreter to take
|
* If calee is executed as interpreted function, we may let already running interpreter to take
|
||||||
|
@ -357,6 +343,8 @@ HRESULT to_string(script_ctx_t*,jsval_t,jsstr_t**) DECLSPEC_HIDDEN;
|
||||||
HRESULT to_flat_string(script_ctx_t*,jsval_t,jsstr_t**,const WCHAR**) DECLSPEC_HIDDEN;
|
HRESULT to_flat_string(script_ctx_t*,jsval_t,jsstr_t**,const WCHAR**) DECLSPEC_HIDDEN;
|
||||||
HRESULT to_object(script_ctx_t*,jsval_t,IDispatch**) DECLSPEC_HIDDEN;
|
HRESULT to_object(script_ctx_t*,jsval_t,IDispatch**) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
HRESULT jsval_strict_equal(jsval_t,jsval_t,BOOL*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
HRESULT variant_change_type(script_ctx_t*,VARIANT*,VARIANT*,VARTYPE) DECLSPEC_HIDDEN;
|
HRESULT variant_change_type(script_ctx_t*,VARIANT*,VARIANT*,VARTYPE) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
HRESULT decode_source(WCHAR*) DECLSPEC_HIDDEN;
|
HRESULT decode_source(WCHAR*) DECLSPEC_HIDDEN;
|
||||||
|
@ -412,6 +400,7 @@ struct _script_ctx_t {
|
||||||
IInternetHostSecurityManager *secmgr;
|
IInternetHostSecurityManager *secmgr;
|
||||||
DWORD safeopt;
|
DWORD safeopt;
|
||||||
DWORD version;
|
DWORD version;
|
||||||
|
BOOL html_mode;
|
||||||
LCID lcid;
|
LCID lcid;
|
||||||
cc_ctx_t *cc;
|
cc_ctx_t *cc;
|
||||||
JSCaller *jscaller;
|
JSCaller *jscaller;
|
||||||
|
@ -516,7 +505,7 @@ static inline BOOL is_int32(double d)
|
||||||
|
|
||||||
static inline DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
|
static inline DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
|
||||||
{
|
{
|
||||||
return (ctx->version << 28) | flags;
|
return ((ctx->version & 0xff) << 28) | flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FACILITY_JSCRIPT 10
|
#define FACILITY_JSCRIPT 10
|
||||||
|
@ -585,9 +574,3 @@ static inline void unlock_module(void)
|
||||||
{
|
{
|
||||||
InterlockedDecrement(&module_ref);
|
InterlockedDecrement(&module_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "engine.h"
|
|
||||||
#include "parser.h"
|
|
||||||
#include "regexp.h"
|
|
||||||
|
|
||||||
#endif /* _WINE_JSCRIPT_H */
|
|
||||||
|
|
|
@ -16,14 +16,26 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "initguid.h"
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
#include <rpcproxy.h>
|
#include "winreg.h"
|
||||||
#include <initguid.h>
|
#include "advpub.h"
|
||||||
#include <jscript_classes.h>
|
#include "activaut.h"
|
||||||
|
#include "objsafe.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
#include "rpcproxy.h"
|
||||||
|
#include "jscript_classes.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
LONG module_ref = 0;
|
LONG module_ref = 0;
|
||||||
|
|
||||||
|
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
||||||
|
|
||||||
HINSTANCE jscript_hinstance;
|
HINSTANCE jscript_hinstance;
|
||||||
|
|
||||||
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
|
||||||
|
|
|
@ -16,7 +16,16 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR parseW[] = {'p','a','r','s','e',0};
|
static const WCHAR parseW[] = {'p','a','r','s','e',0};
|
||||||
static const WCHAR stringifyW[] = {'s','t','r','i','n','g','i','f','y',0};
|
static const WCHAR stringifyW[] = {'s','t','r','i','n','g','i','f','y',0};
|
||||||
|
@ -536,15 +545,18 @@ static HRESULT stringify_array(stringify_ctx_t *ctx, jsdisp_t *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
hres = jsdisp_get_idx(obj, i, &val);
|
hres = jsdisp_get_idx(obj, i, &val);
|
||||||
if(FAILED(hres))
|
if(SUCCEEDED(hres)) {
|
||||||
return hres;
|
|
||||||
|
|
||||||
hres = stringify(ctx, val);
|
hres = stringify(ctx, val);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
if(hres == S_FALSE && !append_string(ctx, nullW))
|
if(hres == S_FALSE && !append_string(ctx, nullW))
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
}else if(hres == DISP_E_UNKNOWNNAME) {
|
||||||
|
if(!append_string(ctx, nullW))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}else {
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if((length && *ctx->gap && !append_char(ctx, '\n')) || !append_char(ctx, ']'))
|
if((length && *ctx->gap && !append_char(ctx, '\n')) || !append_char(ctx, ']'))
|
||||||
|
|
|
@ -16,7 +16,14 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "regexp.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
|
@ -16,8 +16,12 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the length of a string that is considered to be long enough to be
|
* This is the length of a string that is considered to be long enough to be
|
||||||
* worth the rope to avoid copy.
|
* worth the rope to avoid copy.
|
||||||
|
|
|
@ -16,8 +16,18 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
WINE_DECLARE_DEBUG_CHANNEL(heap);
|
WINE_DECLARE_DEBUG_CHANNEL(heap);
|
||||||
|
|
||||||
const char *debugstr_jsval(const jsval_t v)
|
const char *debugstr_jsval(const jsval_t v)
|
||||||
|
|
|
@ -246,4 +246,4 @@ HRESULT jsval_to_variant(jsval_t,VARIANT*) DECLSPEC_HIDDEN;
|
||||||
void jsval_release(jsval_t) DECLSPEC_HIDDEN;
|
void jsval_release(jsval_t) DECLSPEC_HIDDEN;
|
||||||
HRESULT jsval_copy(jsval_t,jsval_t*) DECLSPEC_HIDDEN;
|
HRESULT jsval_copy(jsval_t,jsval_t*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
#endif /* JSVAL_H */
|
#endif
|
||||||
|
|
|
@ -16,10 +16,24 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "activscp.h"
|
||||||
|
#include "objsafe.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
#include "parser.tab.h"
|
#include "parser.tab.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR breakW[] = {'b','r','e','a','k',0};
|
static const WCHAR breakW[] = {'b','r','e','a','k',0};
|
||||||
static const WCHAR caseW[] = {'c','a','s','e',0};
|
static const WCHAR caseW[] = {'c','a','s','e',0};
|
||||||
static const WCHAR catchW[] = {'c','a','t','c','h',0};
|
static const WCHAR catchW[] = {'c','a','t','c','h',0};
|
||||||
|
|
|
@ -17,9 +17,18 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
#include <ntsecapi.h>
|
#include <math.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include "jscript.h"
|
||||||
|
#include "ntsecapi.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR EW[] = {'E',0};
|
static const WCHAR EW[] = {'E',0};
|
||||||
static const WCHAR LOG2EW[] = {'L','O','G','2','E',0};
|
static const WCHAR LOG2EW[] = {'L','O','G','2','E',0};
|
||||||
|
|
|
@ -16,8 +16,15 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,14 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
|
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
|
||||||
static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
|
static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
|
||||||
static const WCHAR valueOfW[] = {'v','a','l','u','e','O','f',0};
|
static const WCHAR valueOfW[] = {'v','a','l','u','e','O','f',0};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
||||||
/* A Bison parser, made by GNU Bison 3.0.2. */
|
/* A Bison parser, made by GNU Bison 3.0. */
|
||||||
|
|
||||||
/* Bison interface for Yacc-like parsers in C
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@
|
||||||
This special exception was added by the Free Software Foundation in
|
This special exception was added by the Free Software Foundation in
|
||||||
version 2.2 of Bison. */
|
version 2.2 of Bison. */
|
||||||
|
|
||||||
#ifndef YY_PARSER_PARSER_TAB_H_INCLUDED
|
#ifndef YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
|
||||||
# define YY_PARSER_PARSER_TAB_H_INCLUDED
|
# define YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
|
||||||
/* Debug traces. */
|
/* Debug traces. */
|
||||||
#ifndef YYDEBUG
|
#ifndef YYDEBUG
|
||||||
# define YYDEBUG 0
|
# define YYDEBUG 0
|
||||||
|
@ -129,4 +129,4 @@ union YYSTYPE
|
||||||
|
|
||||||
int parser_parse (parser_ctx_t *ctx);
|
int parser_parse (parser_ctx_t *ctx);
|
||||||
|
|
||||||
#endif /* !YY_PARSER_PARSER_TAB_H_INCLUDED */
|
#endif /* !YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED */
|
||||||
|
|
|
@ -19,6 +19,12 @@
|
||||||
%{
|
%{
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
static int parser_error(parser_ctx_t*,const char*);
|
static int parser_error(parser_ctx_t*,const char*);
|
||||||
static void set_error(parser_ctx_t*,UINT);
|
static void set_error(parser_ctx_t*,UINT);
|
||||||
|
|
24
dll/win32/jscript/precomp.h
Normal file
24
dll/win32/jscript/precomp.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
#ifndef _JSCRIPT_PRECOMP_H
|
||||||
|
#define _JSCRIPT_PRECOMP_H
|
||||||
|
|
||||||
|
#include <wine/config.h>
|
||||||
|
#include <wine/port.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#define WIN32_NO_STATUS
|
||||||
|
#define _INC_WINDOWS
|
||||||
|
#define COM_NO_WINDOWS_H
|
||||||
|
|
||||||
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include <objsafe.h>
|
||||||
|
|
||||||
|
#include <wine/debug.h>
|
||||||
|
|
||||||
|
#include "engine.h"
|
||||||
|
#include "parser.h"
|
||||||
|
#include "regexp.h"
|
||||||
|
|
||||||
|
#endif /* !_JSCRIPT_PRECOMP_H */
|
|
@ -31,7 +31,14 @@
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "regexp.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
/* FIXME: Better error handling */
|
/* FIXME: Better error handling */
|
||||||
#define ReportRegExpError(a,b,c)
|
#define ReportRegExpError(a,b,c)
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <windef.h>
|
||||||
|
|
||||||
#define JSCRIPT_MAJOR_VERSION 5
|
#define JSCRIPT_MAJOR_VERSION 5
|
||||||
#define JSCRIPT_MINOR_VERSION 8
|
#define JSCRIPT_MINOR_VERSION 8
|
||||||
#define JSCRIPT_BUILD_VERSION 16475
|
#define JSCRIPT_BUILD_VERSION 16475
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windef.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
/* @makedep: jscript.rgs */
|
/* @makedep: jscript.rgs */
|
||||||
|
|
|
@ -16,7 +16,15 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "wine/port.h"
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
#include "regexp.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
|
|
||||||
#include "jscript.h"
|
#include "jscript.h"
|
||||||
|
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
jsdisp_t dispex;
|
jsdisp_t dispex;
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ reactos/dll/win32/inseng # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/iphlpapi # Out of sync
|
reactos/dll/win32/iphlpapi # Out of sync
|
||||||
reactos/dll/win32/itircl # Synced to WineStaging-3.3
|
reactos/dll/win32/itircl # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/itss # Synced to WineStaging-3.3
|
reactos/dll/win32/itss # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/jscript # Synced to Wine-3.0
|
reactos/dll/win32/jscript # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/jsproxy # Synced to WineStaging-2.16
|
reactos/dll/win32/jsproxy # Synced to WineStaging-2.16
|
||||||
reactos/dll/win32/loadperf # Synced to WineStaging-2.9
|
reactos/dll/win32/loadperf # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/lz32 # Synced to WineStaging-2.9
|
reactos/dll/win32/lz32 # Synced to WineStaging-2.9
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue