| Index: vm/object.cc
 | 
| ===================================================================
 | 
| --- vm/object.cc	(revision 16591)
 | 
| +++ vm/object.cc	(working copy)
 | 
| @@ -64,6 +64,8 @@
 | 
|  Array* Object::empty_array_ = NULL;
 | 
|  Instance* Object::sentinel_ = NULL;
 | 
|  Instance* Object::transition_sentinel_ = NULL;
 | 
| +Bool* Object::bool_true_ = NULL;
 | 
| +Bool* Object::bool_false_ = NULL;
 | 
|  
 | 
|  RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL);
 | 
|  RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
 | 
| @@ -246,6 +248,8 @@
 | 
|    sentinel_ = reinterpret_cast<Instance*>(Dart::AllocateReadOnlyHandle());
 | 
|    transition_sentinel_ =
 | 
|        reinterpret_cast<Instance*>(Dart::AllocateReadOnlyHandle());
 | 
| +  bool_true_ = reinterpret_cast<Bool*>(Dart::AllocateReadOnlyHandle());
 | 
| +  bool_false_ = reinterpret_cast<Bool*>(Dart::AllocateReadOnlyHandle());
 | 
|  
 | 
|    Isolate* isolate = Isolate::Current();
 | 
|    Heap* heap = isolate->heap();
 | 
| @@ -427,6 +431,12 @@
 | 
|      InitializeObject(address, kArrayCid, Array::InstanceSize(0));
 | 
|      empty_array_->raw()->ptr()->length_ = Smi::New(0);
 | 
|    }
 | 
| +
 | 
| +  // Allocate and initialize singleton true and false boolean objects.
 | 
| +  cls = Class::New<Bool>();
 | 
| +  isolate->object_store()->set_bool_class(cls);
 | 
| +  *bool_true_ = Bool::New(true);
 | 
| +  *bool_false_ = Bool::New(false);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -897,13 +907,6 @@
 | 
|    type = Type::NewNonParameterizedType(cls);
 | 
|    object_store->set_dynamic_type(type);
 | 
|  
 | 
| -  // Allocate pre-initialized values.
 | 
| -  Bool& bool_value = Bool::Handle();
 | 
| -  bool_value = Bool::New(true);
 | 
| -  object_store->set_true_value(bool_value);
 | 
| -  bool_value = Bool::New(false);
 | 
| -  object_store->set_false_value(bool_value);
 | 
| -
 | 
|    // Setup some default native field classes which can be extended for
 | 
|    // specifying native fields in dart classes.
 | 
|    Library::InitNativeWrappersLibrary(isolate);
 | 
| @@ -1131,13 +1134,6 @@
 | 
|  
 | 
|    cls = Class::New<WeakProperty>();
 | 
|    object_store->set_weak_property_class(cls);
 | 
| -
 | 
| -  // Allocate pre-initialized values.
 | 
| -  Bool& bool_value = Bool::Handle();
 | 
| -  bool_value = Bool::New(true);
 | 
| -  object_store->set_true_value(bool_value);
 | 
| -  bool_value = Bool::New(false);
 | 
| -  object_store->set_false_value(bool_value);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -11287,16 +11283,6 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -RawBool* Bool::True() {
 | 
| -  return Isolate::Current()->object_store()->true_value();
 | 
| -}
 | 
| -
 | 
| -
 | 
| -RawBool* Bool::False() {
 | 
| -  return Isolate::Current()->object_store()->false_value();
 | 
| -}
 | 
| -
 | 
| -
 | 
|  RawBool* Bool::New(bool value) {
 | 
|    ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null());
 | 
|    Bool& result = Bool::Handle();
 | 
| @@ -11310,6 +11296,7 @@
 | 
|      result ^= raw;
 | 
|    }
 | 
|    result.set_value(value);
 | 
| +  result.SetCanonical();
 | 
|    return result.raw();
 | 
|  }
 | 
|  
 | 
| 
 |