| |
| // Test various ways of converting an unboxed object to native. |
| |
| function Foo(a, b) { |
| this.a = a; |
| this.b = b; |
| } |
| |
| var proxyObj = { |
| get: function(recipient, name) { |
| return recipient[name] + 2; |
| } |
| }; |
| |
| function f() { |
| var a = []; |
| for (var i = 0; i < 50; i++) |
| a.push(new Foo(i, i + 1)); |
| |
| var prop = "a"; |
| |
| i = 0; |
| for (; i < 5; i++) |
| a[i].c = i; |
| for (; i < 10; i++) |
| Object.defineProperty(a[i], 'c', {value: i}); |
| for (; i < 15; i++) |
| a[i] = new Proxy(a[i], proxyObj); |
| for (; i < 20; i++) |
| a[i].a = 3.5; |
| for (; i < 25; i++) |
| delete a[i].b; |
| for (; i < 30; i++) |
| a[prop] = 4; |
| |
| var total = 0; |
| for (i = 0; i < a.length; i++) { |
| if ('a' in a[i]) |
| total += a[i].a; |
| if ('b' in a[i]) |
| total += a[i].b; |
| if ('c' in a[i]) |
| total += a[i].c; |
| } |
| assertEq(total, 2382.5); |
| } |
| f(); |