| // 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(); |