| Index: test/mjsunit/regress/regress-2073.js
|
| diff --git a/test/mjsunit/regress/regress-147497.js b/test/mjsunit/regress/regress-2073.js
|
| similarity index 53%
|
| copy from test/mjsunit/regress/regress-147497.js
|
| copy to test/mjsunit/regress/regress-2073.js
|
| index 92e29d12589984b0cf34a91d7cac3479a04bfbaa..4e40b044c734eb4001f4c0d6dde450b7f692e3a1 100644
|
| --- a/test/mjsunit/regress/regress-147497.js
|
| +++ b/test/mjsunit/regress/regress-2073.js
|
| @@ -25,21 +25,75 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// Flags: --expose-debug-as debug
|
| +// Running this test with --trace_gc will show heap size growth due to
|
| +// leaking objects via embedded maps in optimized code.
|
|
|
| -Debug = debug.Debug;
|
| +var counter = 0;
|
|
|
| -function listener(event, exec_state, event_data, data) {
|
| - if (event == Debug.DebugEvent.Break) {
|
| - exec_state.prepareStep(Debug.StepAction.StepNext, 10);
|
| +function nextid() {
|
| + counter += 1;
|
| + return counter;
|
| +}
|
| +
|
| +function Scope() {
|
| + this.id = nextid();
|
| + this.parent = null;
|
| + this.left = null;
|
| + this.right = null;
|
| + this.head = null;
|
| + this.tail = null;
|
| + this.counter = 0;
|
| +}
|
| +
|
| +Scope.prototype = {
|
| + new: function() {
|
| + var Child,
|
| + child;
|
| + Child = function() {};
|
| + Child.prototype = this;
|
| + child = new Child();
|
| + child.id = nextid();
|
| + child.parent = this;
|
| + child.left = this.last;
|
| + child.right = null;
|
| + child.head = null;
|
| + child.tail = null;
|
| + child.counter = 0;
|
| + if (this.head) {
|
| + this.tail.right = child;
|
| + this.tail = child;
|
| + } else {
|
| + this.head = this.tail = child;
|
| + }
|
| + return child;
|
| + },
|
| +
|
| + destroy: function() {
|
| + if ($root == this) return;
|
| + var parent = this.parent;
|
| + if (parent.head == this) parent.head = this.right;
|
| + if (parent.tail == this) parent.tail = this.left;
|
| + if (this.left) this.left.right = this.right;
|
| + if (this.right) this.right.left = this.left;
|
| }
|
| };
|
|
|
| -Debug.setListener(listener);
|
| +function inc(scope) {
|
| + scope.counter = scope.counter + 1;
|
| +}
|
| +
|
| +var $root = new Scope();
|
| +
|
| +n = 100000;
|
| +m = 10;
|
|
|
| -var statement = "";
|
| -for (var i = 0; i < 1024; i++) statement += "z";
|
| -statement = 'with(0)' + statement + '=function foo(){}';
|
| +function doit() {
|
| + var a = $root.new();
|
| + var b = a.new();
|
| + inc(b);
|
| + if (i > m) $root.head.destroy();
|
| +}
|
|
|
| -debugger;
|
| -eval(statement);
|
| +for (var i = 0; i < n; i++) {
|
| + doit();
|
| +}
|
|
|