158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org// Use of this source code is governed by a BSD-ayle license that can be 358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org// found in the LICENSE file. 458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org// Flags: --allow-natives-syntax --track-fields --expose-gc 658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgvar global = Function('return this')(); 858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgvar verbose = 0; 958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 1058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgfunction test(ctor_desc, use_desc, migr_desc) { 1158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var n = 5; 1258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var objects = []; 1358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var results = []; 1458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 1558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) { 1658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print(); 1758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("==========================================================="); 1858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("=== " + ctor_desc.name + 1958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org " | " + use_desc.name + " |--> " + migr_desc.name); 2058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("==========================================================="); 2158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 2258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 2358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // Clean ICs and transitions. 2458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org %NotifyContextDisposed(); 2558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org gc(); gc(); gc(); 2658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 2758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 2858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // create objects 2958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) { 3058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("-----------------------------"); 3158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("--- construct"); 3258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print(); 3358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 3458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org for (var i = 0; i < n; i++) { 3558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org objects[i] = ctor_desc.ctor.apply(ctor_desc, ctor_desc.args(i)); 3658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 3758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 3858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org try { 3958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // use them 4058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) { 4158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("-----------------------------"); 4258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("--- use 1"); 4358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print(); 4458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 4558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var use = use_desc.use1; 4658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org for (var i = 0; i < n; i++) { 4758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (i == 3) %OptimizeFunctionOnNextCall(use); 4858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org results[i] = use(objects[i], i); 4958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 5058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 5158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // trigger migrations 5258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) { 5358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("-----------------------------"); 5458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("--- trigger migration"); 5558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print(); 5658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 5758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var migr = migr_desc.migr; 5858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org for (var i = 0; i < n; i++) { 5958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (i == 3) %OptimizeFunctionOnNextCall(migr); 6058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr(objects[i], i); 6158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 6258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 6358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // use again 6458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) { 6558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("-----------------------------"); 6658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print("--- use 2"); 6758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org print(); 6858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 6958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var use = use_desc.use2 !== undefined ? use_desc.use2 : use_desc.use1; 7058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org for (var i = 0; i < n; i++) { 7158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (i == 3) %OptimizeFunctionOnNextCall(use); 7258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org results[i] = use(objects[i], i); 7358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose >= 2) print(results[i]); 7458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 7558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 7658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } catch (e) { 7758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (verbose) print("--- incompatible use: " + e); 7858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org } 7958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org return results; 8058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org} 8158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 8258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 8358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgvar ctors = [ 8458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 8558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "none-to-double", 8658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { return {a: v}; }, 8758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 8858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 8958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 9058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "double", 9158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = {}; o.a = v; return o; }, 9258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 9358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 9458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 9558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "none-to-smi", 9658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { return {a: v}; }, 9758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [i]; }, 9858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 9958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 10058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "smi", 10158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = {}; o.a = v; return o; }, 10258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [i]; }, 10358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 10458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 10558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "none-to-object", 10658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { return {a: v}; }, 10758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return ["s"]; }, 10858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 10958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 11058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "object", 11158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = {}; o.a = v; return o; }, 11258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return ["s"]; }, 11358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 11458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 11558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "{a:, b:, c:}", 11658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v1, v2, v3) { return {a: v1, b: v2, c: v3}; }, 11758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i, 1.6, 1.7]; }, 11858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 11958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 12058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "{a..h:}", 12158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = {}; o.h=o.g=o.f=o.e=o.d=o.c=o.b=o.a=v; return o; }, 12258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 12358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 12458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 12558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "1", 12658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = 1; o.a = v; return o; }, 12758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 12858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 12958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 13058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "f()", 13158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = function() { return v;}; o.a = v; return o; }, 13258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 13358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 13458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 13558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "f().bind", 13658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = function(a,b,c) { return a+b+c; }; o = o.bind(o, v, v+1, v+2.2); return o; }, 13758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 13858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 13958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 14058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "dictionary elements", 14158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var o = []; o[1] = v; o[200000] = v; return o; }, 14258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 14358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 14458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 14558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "json", 14658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { var json = '{"a":' + v + ',"b":' + v + '}'; return JSON.parse(json); }, 14758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 14858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 14958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 15058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "fast accessors", 15158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org accessor: { 15258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org get: function() { return this.a_; }, 15358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org set: function(value) {this.a_ = value; }, 15458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org configurable: true, 15558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 15658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { 15758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var o = {a_:v}; 15858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org Object.defineProperty(o, "a", this.accessor); 15958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org return o; 16058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 16158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 16258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 16358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 16458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "slow accessor", 16558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org accessor1: { value: this.a_, configurable: true }, 16658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org accessor2: { 16758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org get: function() { return this.a_; }, 16858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org set: function(value) {this.a_ = value; }, 16958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org configurable: true, 17058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 17158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { 17258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var o = {a_:v}; 17358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org Object.defineProperty(o, "a", this.accessor1); 17458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org Object.defineProperty(o, "a", this.accessor2); 17558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org return o; 17658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 17758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 17858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 17958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 18058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "slow", 18158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org proto: {}, 18258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { 18358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org var o = {__proto__: this.proto}; 18458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org o.a = v; 18558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org for (var i = 0; %HasFastProperties(o); i++) o["f"+i] = v; 18658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org return o; 18758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 18858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [1.5 + i]; }, 18958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 19058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 19158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "global", 19258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctor: function(v) { return global; }, 19358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org args: function(i) { return [i]; }, 19458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 19558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org]; 19658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 19758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 19858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 19958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgvar uses = [ 20058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 20158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "o.a+1.0", 20258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use1: function(o, i) { return o.a + 1.0; }, 20358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use2: function(o, i) { return o.a + 1.1; }, 20458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 20558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 20658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "o.b+1.0", 20758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use1: function(o, i) { return o.b + 1.0; }, 20858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use2: function(o, i) { return o.b + 1.1; }, 20958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 21058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 21158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "o[1]+1.0", 21258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use1: function(o, i) { return o[1] + 1.0; }, 21358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use2: function(o, i) { return o[1] + 1.1; }, 21458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 21558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 21658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "o[-1]+1.0", 21758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use1: function(o, i) { return o[-1] + 1.0; }, 21858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use2: function(o, i) { return o[-1] + 1.1; }, 21958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 22058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 22158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "()", 22258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use1: function(o, i) { return o() + 1.0; }, 22358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org use2: function(o, i) { return o() + 1.1; }, 22458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 22558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org]; 22658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 22758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 22858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 22958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgvar migrations = [ 23058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 23158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "to smi", 23258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i == 0) o.a = 1; }, 23358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 23458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 23558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "to double", 23658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i == 0) o.a = 1.1; }, 23758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 23858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 23958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "to object", 24058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i == 0) o.a = {}; }, 24158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 24258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 24358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "set prototype {}", 24458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { o.__proto__ = {}; }, 24558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 24658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 24758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "%FunctionSetPrototype", 24858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { %FunctionSetPrototype(o, null); }, 24958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 25058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 25158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "modify prototype", 25258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i == 0) o.__proto__.__proto1__ = [,,,5,,,]; }, 25358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 25458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 25558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "freeze prototype", 25658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i == 0) Object.freeze(o.__proto__); }, 25758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 25858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 25958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "delete and re-add property", 26058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { var v = o.a; delete o.a; o.a = v; }, 26158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 26258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 26358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "modify prototype", 26458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { if (i >= 0) o.__proto__ = {}; }, 26558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 26658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 26758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "set property callback", 26858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { 26958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org Object.defineProperty(o, "a", { 27058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org get: function() { return 1.5 + i; }, 27158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org set: function(value) {}, 27258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org configurable: true, 27358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }); 27458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 27558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 27658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 27758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "observe", 27858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { Object.observe(o, function(){}); }, 27958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 28058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 28158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "%EnableAccessChecks", 28258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { 28358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if (typeof (o) !== 'function') %EnableAccessChecks(o); 28458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 28558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 28658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 28758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "%DisableAccessChecks", 28858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { 28958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org if ((typeof (o) !== 'function') && (o !== global)) %DisableAccessChecks(o); 29058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 29158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 29258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { 29358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "seal", 29458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { Object.seal(o); }, 29558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 29658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org { // Must be the last in the sequence, because after the global object freeze 29758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org // the other modifications does not make sence. 29858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org name: "freeze", 29958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org migr: function(o, i) { Object.freeze(o); }, 30058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }, 30158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org]; 30258a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 30358a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 30458a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org 30558a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgmigrations.forEach(function(migr) { 30658a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org uses.forEach(function(use) { 30758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org ctors.forEach(function(ctor) { 30858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org test(ctor, use, migr); 30958a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }); 31058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org }); 31158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org}); 312