Chromium Code Reviews| Index: vm/object.cc |
| =================================================================== |
| --- vm/object.cc (revision 4977) |
| +++ vm/object.cc (working copy) |
| @@ -570,13 +570,16 @@ |
| cls = Class::New<InternalByteArray>(); |
| object_store->set_internal_byte_array_class(cls); |
| - cls.set_name(String::Handle(core_lib.PrivateName("_InternalByteArray"))); |
| + String& public_class_name = String::Handle(); |
| + public_class_name = String::New("_InternalByteArray"); |
| + cls.set_name(String::Handle(core_lib.PrivateName(public_class_name))); |
| cls.set_script(script); |
| core_lib.AddClass(cls); |
| cls = Class::New<ExternalByteArray>(); |
| object_store->set_external_byte_array_class(cls); |
| - cls.set_name(String::Handle(core_lib.PrivateName("_ExternalByteArray"))); |
| + public_class_name = String::New("_ExternalByteArray"); |
| + cls.set_name(String::Handle(core_lib.PrivateName(public_class_name))); |
| cls.set_script(script); |
| core_lib.AddClass(cls); |
| @@ -4464,6 +4467,48 @@ |
| } |
| +RawField* Library::LookupLocalField(const String& name) const { |
| + Isolate* isolate = Isolate::Current(); |
| + Field& field = Field::Handle(isolate, Field::null()); |
| + Object& obj = Object::Handle(isolate, Object::null()); |
| + obj = LookupLocalObject(name); |
| + if (obj.IsNull()) { |
| + String& private_name = String::Handle(isolate, PrivateName(name)); |
| + obj = LookupLocalObject(private_name); |
| + } |
| + if (!obj.IsNull()) { |
| + if (obj.IsField()) { |
| + field ^= obj.raw(); |
| + return field.raw(); |
| + } |
| + } |
| + |
| + // No field found. |
| + return Field::null(); |
| +} |
| + |
| + |
| +RawFunction* Library::LookupLocalFunction(const String& name) const { |
| + Isolate* isolate = Isolate::Current(); |
| + Function& function = Function::Handle(isolate, Function::null()); |
| + Object& obj = Object::Handle(isolate, Object::null()); |
| + obj = LookupLocalObject(name); |
| + if (obj.IsNull()) { |
| + String& private_name = String::Handle(isolate, PrivateName(name)); |
| + obj = LookupLocalObject(private_name); |
| + } |
| + if (!obj.IsNull()) { |
| + if (obj.IsFunction()) { |
| + function ^= obj.raw(); |
| + return function.raw(); |
| + } |
| + } |
| + |
| + // No function found. |
| + return Function::null(); |
| +} |
| + |
| + |
| RawObject* Library::LookupObjectFiltered(const String& name, |
| const Library& filter_lib) const { |
| // First check if name is found in the local scope of the library. |
| @@ -4879,11 +4924,11 @@ |
| } |
| -RawString* Library::PrivateName(const char* name) { |
| - ASSERT(name[0] == '_'); |
| - ASSERT(strchr(name, '@') == NULL); |
| +RawString* Library::PrivateName(const String& name) const { |
| + // TODO(turnidge): Should check for prefix of "_", "get:_", or "set:_" here. |
|
Ivan Posva
2012/03/07 20:02:58
ASSERT(name.CharAt(0) == '_');
turnidge
2012/03/07 21:17:12
Done...
|
| + // ASSERT(strchr(name, '@') == NULL); |
| String& str = String::Handle(); |
| - str = String::New(name); |
| + str ^= name.raw(); |
| str = String::Concat(str, String::Handle(this->private_key())); |
| str = String::NewSymbol(str); |
| return str.raw(); |