;; /LeakTest <amount_of_times_to_call_function>
alias leaktest {
var %x = $$1, %error
var %js = (function(){return{"test":Array(3001).join("a")}})()
.comopen LeakTest MSScriptControl.ScriptControl
if (!$com(LeakTest)) || ($comerr) {
%Error = SCRIPTCONTROL_INIT_FAIL
}
elseif (!$com(LeakTest, language, 4, bstr, jscript)) || ($comerr) {
%Error = LANGUAGE_SET_FAIL
}
else {
while (%x) {
dec %x
;; Dispatches the result of the js function, but then immediately closes it
;; yet the memory isn't freed even if given time
if (!$com(LeakTest, eval, 1, bstr, %Js, dispatch* LeakTest/Test) || $comerr || !$com(LeakTest/Test)) {
%Error = failed to dispatch LeakTest/Test
goto error
}
.comclose LeakTest/Test
}
}
:error
if ($com(LeakTest/Test)) .comclose $v1
if ($com(LeakTest)) .comclose $v1
if ($error || %error) {
Echo -a ERROR: $v1
}
else {
echo -a Done!
}
}