summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Memory-trackingAllocationSites-01.js
blob: 46c0e1c34b5e25daf85ed2db27a44301312963b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Test that we can track allocation sites by setting
// Debugger.Memory.prototype.trackingAllocationSites to true and then get the
// allocation site via Debugger.Object.prototype.allocationSite.

const root = newGlobal({newCompartment: true});

const dbg = new Debugger();
const wrappedRoot = dbg.addDebuggee(root);

assertEq(dbg.memory.trackingAllocationSites, false);
dbg.memory.trackingAllocationSites = true;
assertEq(dbg.memory.trackingAllocationSites, true);

root.eval("(" + function immediate() {
  this.tests = [
    { name: "object literal",  object: ({}),                  line: Error().lineNumber },
    { name: "array literal",   object: [],                    line: Error().lineNumber },
    { name: "regexp literal",  object: /(two|2)\s*problems/,  line: Error().lineNumber },
    { name: "new constructor", object: new function Ctor(){}, line: Error().lineNumber },
    { name: "new Object",      object: new Object(),          line: Error().lineNumber },
    { name: "new Array",       object: new Array(),           line: Error().lineNumber },
    { name: "new Date",        object: new Date(),            line: Error().lineNumber }
  ];
} + "());");

dbg.memory.trackingAllocationSites = false;
assertEq(dbg.memory.trackingAllocationSites, false);

for (let { name, object, line } of root.tests) {
  print("Entering test: " + name);

  let wrappedObject = wrappedRoot.makeDebuggeeValue(object);
  let allocationSite = wrappedObject.allocationSite;
  print("Allocation site: " + allocationSite);

  assertEq(allocationSite.line, line);
}