|
Source
Fix For Arguments Object Not Freed
From function doCall (Function.c, line 338)
if( (Func_UsesArguments|Func_UsesItsName) & this-flags )
{
VarRead *orig_args;
VarRead *args;
if( Func_UsesItsName & this-flags )
{
o_c = varCreateMember(FuncVar,call,call-Global-caller_entry,
VUndefined);
assert( NULL != o_c );
varSetAttributes(o_c,0);
if( oldcaller!=NULL )
{
varAssign(o_c,call,oldcaller);
varSetAttributes(o_c,jseDontEnum | jseDontDelete);
VAR_REMOVE_USER(oldcaller,call);
}
else
{
varDeleteMember(FuncVar,call,call-Global-caller_entry);
}
}
assert( arg_obj!=NULL );
orig_args = varGetDirectMember(arg_obj,call-Global-
old_arguments_entry);
args = varGetDirectMember(FuncVar,call-Global-arguments_entry);
assert( NULL != args );
varSetAttributes(args,0);
if( orig_args!=NULL )
{
varAssign(args,call,orig_args);
varSetAttributes(args,jseDontDelete | jseDontEnum);
}
else
{
varDeleteMember(FuncVar,call,call-Global-arguments_entry);
}
assert( arg_obj!=NULL );
VAR_REMOVE_USER(arg_obj,call);
}
|