| Index: test/mjsunit/track-fields.js | 
| diff --git a/test/mjsunit/track-fields.js b/test/mjsunit/track-fields.js | 
| index ced006c4fbe31d702ca43bc7c35ec7a6ea7a01a5..8b0ec296239e46364a385e23b0d274097e8b4888 100644 | 
| --- a/test/mjsunit/track-fields.js | 
| +++ b/test/mjsunit/track-fields.js | 
| @@ -325,3 +325,83 @@ df3.first_double = 1.7; | 
| df3.second_function = some_function2; | 
| df1.first_double = 10; | 
| read_first_double(df1); | 
| + | 
| +// Test boilerplates with computed values. | 
| +function none_boilerplate(a) { | 
| +  return {"a_none":a}; | 
| +} | 
| +%OptimizeFunctionOnNextCall(none_boilerplate); | 
| +var none_double1 = none_boilerplate(1.7); | 
| +var none_double2 = none_boilerplate(1.9); | 
| +assertTrue(%HaveSameMap(none_double1, none_double2)); | 
| +assertEquals(1.7, none_double1.a_none); | 
| +assertEquals(1.9, none_double2.a_none); | 
| +none_double2.a_none = 3.5; | 
| +var none_double1 = none_boilerplate(1.7); | 
| +var none_double2 = none_boilerplate(3.5); | 
| + | 
| +function none_to_smi(a) { | 
| +  return {"a_smi":a}; | 
| +} | 
| + | 
| +var none_smi1 = none_to_smi(1); | 
| +var none_smi2 = none_to_smi(2); | 
| +%OptimizeFunctionOnNextCall(none_to_smi); | 
| +var none_smi3 = none_to_smi(3); | 
| +assertTrue(%HaveSameMap(none_smi1, none_smi2)); | 
| +assertTrue(%HaveSameMap(none_smi1, none_smi3)); | 
| +assertEquals(1, none_smi1.a_smi); | 
| +assertEquals(2, none_smi2.a_smi); | 
| +assertEquals(3, none_smi3.a_smi); | 
| + | 
| +function none_to_double(a) { | 
| +  return {"a_double":a}; | 
| +} | 
| + | 
| +var none_to_double1 = none_to_double(1.5); | 
| +var none_to_double2 = none_to_double(2.8); | 
| +%OptimizeFunctionOnNextCall(none_to_double); | 
| +var none_to_double3 = none_to_double(3.7); | 
| +assertTrue(%HaveSameMap(none_to_double1, none_to_double2)); | 
| +assertTrue(%HaveSameMap(none_to_double1, none_to_double3)); | 
| +assertEquals(1.5, none_to_double1.a_double); | 
| +assertEquals(2.8, none_to_double2.a_double); | 
| +assertEquals(3.7, none_to_double3.a_double); | 
| + | 
| +function none_to_object(a) { | 
| +  return {"an_object":a}; | 
| +} | 
| + | 
| +var none_to_object1 = none_to_object(true); | 
| +var none_to_object2 = none_to_object(false); | 
| +%OptimizeFunctionOnNextCall(none_to_object); | 
| +var none_to_object3 = none_to_object(3.7); | 
| +assertTrue(%HaveSameMap(none_to_object1, none_to_object2)); | 
| +assertTrue(%HaveSameMap(none_to_object1, none_to_object3)); | 
| +assertEquals(true, none_to_object1.an_object); | 
| +assertEquals(false, none_to_object2.an_object); | 
| +assertEquals(3.7, none_to_object3.an_object); | 
| + | 
| +function double_to_object(a) { | 
| +  var o = {"d_to_h":1.8}; | 
| +  o.d_to_h = a; | 
| +  return o; | 
| +} | 
| + | 
| +var dh1 = double_to_object(true); | 
| +var dh2 = double_to_object(false); | 
| +assertTrue(%HaveSameMap(dh1, dh2)); | 
| +assertEquals(true, dh1.d_to_h); | 
| +assertEquals(false, dh2.d_to_h); | 
| + | 
| +function smi_to_object(a) { | 
| +  var o = {"s_to_t":18}; | 
| +  o.s_to_t = a; | 
| +  return o; | 
| +} | 
| + | 
| +var st1 = smi_to_object(true); | 
| +var st2 = smi_to_object(false); | 
| +assertTrue(%HaveSameMap(st1, st2)); | 
| +assertEquals(true, st1.s_to_t); | 
| +assertEquals(false, st2.s_to_t); | 
|  |