Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
42e90ca5
Commit
42e90ca5
authored
Mar 28, 2016
by
Jacek Caban
Committed by
Alexandre Julliard
Mar 29, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jscript: Moved arguments object destuction to interpreter.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
cb317ed5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
18 additions
and
10 deletions
+18
-10
engine.c
dlls/jscript/engine.c
+11
-1
engine.h
dlls/jscript/engine.h
+3
-1
function.c
dlls/jscript/function.c
+1
-5
global.c
dlls/jscript/global.c
+1
-1
jscript.c
dlls/jscript/jscript.c
+2
-2
No files found.
dlls/jscript/engine.c
View file @
42e90ca5
...
...
@@ -2381,6 +2381,13 @@ OP_LIST
static
void
release_call_frame
(
call_frame_t
*
frame
)
{
if
(
frame
->
arguments_obj
)
{
/* Reset arguments value to cut the reference cycle. Note that since all activation contexts have
* their own arguments property, it's impossible to use prototype's one during name lookup */
static
const
WCHAR
argumentsW
[]
=
{
'a'
,
'r'
,
'g'
,
'u'
,
'm'
,
'e'
,
'n'
,
't'
,
's'
,
0
};
jsdisp_propput_name
(
frame
->
variable_obj
,
argumentsW
,
jsval_undefined
());
jsdisp_release
(
frame
->
arguments_obj
);
}
if
(
frame
->
variable_obj
)
jsdisp_release
(
frame
->
variable_obj
);
if
(
frame
->
this_obj
)
...
...
@@ -2529,7 +2536,7 @@ static HRESULT bind_event_target(script_ctx_t *ctx, function_code_t *func, jsdis
}
HRESULT
exec_source
(
script_ctx_t
*
ctx
,
DWORD
flags
,
bytecode_t
*
bytecode
,
function_code_t
*
function
,
scope_chain_t
*
scope
,
IDispatch
*
this_obj
,
jsdisp_t
*
variable_obj
,
jsval_t
*
r
)
IDispatch
*
this_obj
,
jsdisp_t
*
variable_obj
,
js
disp_t
*
arguments_obj
,
js
val_t
*
r
)
{
call_frame_t
*
frame
;
unsigned
i
;
...
...
@@ -2597,6 +2604,9 @@ HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, functi
frame
->
this_obj
=
to_disp
(
ctx
->
global
);
IDispatch_AddRef
(
frame
->
this_obj
);
if
(
arguments_obj
)
frame
->
arguments_obj
=
jsdisp_addref
(
arguments_obj
);
frame
->
flags
=
flags
;
frame
->
variable_obj
=
jsdisp_addref
(
variable_obj
);
...
...
dlls/jscript/engine.h
View file @
42e90ca5
...
...
@@ -204,6 +204,7 @@ typedef struct _call_frame_t {
IDispatch
*
this_obj
;
jsdisp_t
*
variable_obj
;
jsdisp_t
*
arguments_obj
;
DWORD
flags
;
bytecode_t
*
bytecode
;
...
...
@@ -215,5 +216,6 @@ typedef struct _call_frame_t {
#define EXEC_GLOBAL 0x0001
#define EXEC_CONSTRUCTOR 0x0002
HRESULT
exec_source
(
script_ctx_t
*
,
DWORD
,
bytecode_t
*
,
function_code_t
*
,
scope_chain_t
*
,
IDispatch
*
,
jsdisp_t
*
,
jsval_t
*
)
DECLSPEC_HIDDEN
;
HRESULT
exec_source
(
script_ctx_t
*
,
DWORD
,
bytecode_t
*
,
function_code_t
*
,
scope_chain_t
*
,
IDispatch
*
,
jsdisp_t
*
,
jsdisp_t
*
,
jsval_t
*
)
DECLSPEC_HIDDEN
;
HRESULT
create_source_function
(
script_ctx_t
*
,
bytecode_t
*
,
function_code_t
*
,
scope_chain_t
*
,
jsdisp_t
**
)
DECLSPEC_HIDDEN
;
dlls/jscript/function.c
View file @
42e90ca5
...
...
@@ -245,16 +245,12 @@ static HRESULT invoke_source(script_ctx_t *ctx, FunctionInstance *function, IDis
exec_flags
|=
EXEC_CONSTRUCTOR
;
prev_args
=
function
->
arguments
;
function
->
arguments
=
arg_disp
;
hres
=
exec_source
(
ctx
,
exec_flags
,
function
->
code
,
function
->
func_code
,
scope
,
this_obj
,
var_disp
,
r
);
hres
=
exec_source
(
ctx
,
exec_flags
,
function
->
code
,
function
->
func_code
,
scope
,
this_obj
,
var_disp
,
arg_disp
,
r
);
function
->
arguments
=
prev_args
;
scope_release
(
scope
);
}
/* Reset arguments value to cut the reference cycle. Note that since all activation contexts have
* their own arguments property, it's impossible to use prototype's one during name lookup */
jsdisp_propput_name
(
var_disp
,
argumentsW
,
jsval_undefined
());
jsdisp_release
(
arg_disp
);
jsdisp_release
(
var_disp
);
return
hres
;
...
...
dlls/jscript/global.c
View file @
42e90ca5
...
...
@@ -227,7 +227,7 @@ static HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
if
(
frame
->
flags
&
EXEC_GLOBAL
)
exec_flags
|=
EXEC_GLOBAL
;
hres
=
exec_source
(
ctx
,
exec_flags
,
code
,
&
code
->
global_code
,
frame
->
scope
,
frame
->
this_obj
,
frame
->
variable_obj
,
r
);
frame
->
this_obj
,
frame
->
variable_obj
,
NULL
,
r
);
release_bytecode
(
code
);
return
hres
;
}
...
...
dlls/jscript/jscript.c
View file @
42e90ca5
...
...
@@ -107,7 +107,7 @@ static HRESULT exec_global_code(JScript *This, bytecode_t *code)
IActiveScriptSite_OnEnterScript
(
This
->
site
);
clear_ei
(
This
->
ctx
);
hres
=
exec_source
(
This
->
ctx
,
EXEC_GLOBAL
,
code
,
&
code
->
global_code
,
NULL
,
NULL
,
This
->
ctx
->
global
,
NULL
);
hres
=
exec_source
(
This
->
ctx
,
EXEC_GLOBAL
,
code
,
&
code
->
global_code
,
NULL
,
NULL
,
This
->
ctx
->
global
,
NULL
,
NULL
);
IActiveScriptSite_OnLeaveScript
(
This
->
site
);
return
hres
;
...
...
@@ -773,7 +773,7 @@ static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
IActiveScriptSite_OnEnterScript
(
This
->
site
);
clear_ei
(
This
->
ctx
);
hres
=
exec_source
(
This
->
ctx
,
EXEC_GLOBAL
,
code
,
&
code
->
global_code
,
NULL
,
NULL
,
This
->
ctx
->
global
,
&
r
);
hres
=
exec_source
(
This
->
ctx
,
EXEC_GLOBAL
,
code
,
&
code
->
global_code
,
NULL
,
NULL
,
This
->
ctx
->
global
,
NULL
,
&
r
);
if
(
SUCCEEDED
(
hres
))
{
if
(
pvarResult
)
hres
=
jsval_to_variant
(
r
,
pvarResult
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment