summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/TypedObject/jit-complex.js
blob: 616e027f359c487c9ef0bac9856f0340a6bf2e1c (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
// Test that we can optimize stuff like line.target.x without
// creating an intermediate object.

if (!this.hasOwnProperty("TypedObject"))
  quit();

setJitCompilerOption("ion.warmup.trigger", 30);

var PointType = new TypedObject.StructType({x: TypedObject.float64,
                                            y: TypedObject.float64});
var LineType = new TypedObject.StructType({source: PointType,
                                           target: PointType});

function manhattanDistance(line) {
  return (Math.abs(line.target.x - line.source.x) +
          Math.abs(line.target.y - line.source.y));
}

function foo() {
  var N = 100;
  var points = [];
  var obj;
  var s;

  var fromAToB = new LineType({source: {x: 22, y: 44},
                               target: {x: 66, y: 88}});

  for (var i = 0; i < N; i++) {
    assertEq(manhattanDistance(fromAToB), 88);
  }
}

foo();