| Index: src/accessors.cc | 
| diff --git a/src/accessors.cc b/src/accessors.cc | 
| index 8048738b28e487b40971a7e302176a6248c7395c..f4fefff71329289cf3a2d4d2c92e9bc775a5f51f 100644 | 
| --- a/src/accessors.cc | 
| +++ b/src/accessors.cc | 
| @@ -802,4 +802,69 @@ const AccessorDescriptor Accessors::ObjectPrototype = { | 
| 0 | 
| }; | 
|  | 
| + | 
| +// | 
| +// Accessors::MakeModuleExport | 
| +// | 
| + | 
| +static v8::Handle<v8::Value> ModuleGetExport( | 
| +    v8::Local<v8::String> property, | 
| +    const v8::AccessorInfo& info) { | 
| +  JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 
| +  Context* context = Context::cast(instance->context()); | 
| +  ASSERT(context->IsModuleContext()); | 
| +  int slot = info.Data()->Int32Value(); | 
| +  Object* value = context->get(slot); | 
| +  if (value->IsTheHole()) { | 
| +    Handle<String> name = v8::Utils::OpenHandle(*property); | 
| +    Isolate* isolate = instance->GetIsolate(); | 
| +    isolate->ScheduleThrow( | 
| +        *isolate->factory()->NewReferenceError("not_defined", | 
| +                                               HandleVector(&name, 1))); | 
| +    return v8::Handle<v8::Value>(); | 
| +  } | 
| +  return v8::Utils::ToLocal(Handle<Object>(value)); | 
| +} | 
| + | 
| + | 
| +static void ModuleSetExport( | 
| +    v8::Local<v8::String> property, | 
| +    v8::Local<v8::Value> value, | 
| +    const v8::AccessorInfo& info) { | 
| +  JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 
| +  Context* context = Context::cast(instance->context()); | 
| +  ASSERT(context->IsModuleContext()); | 
| +  int slot = info.Data()->Int32Value(); | 
| +  Object* old_value = context->get(slot); | 
| +  if (old_value->IsTheHole()) { | 
| +    Handle<String> name = v8::Utils::OpenHandle(*property); | 
| +    Isolate* isolate = instance->GetIsolate(); | 
| +    isolate->ScheduleThrow( | 
| +        *isolate->factory()->NewReferenceError("not_defined", | 
| +                                               HandleVector(&name, 1))); | 
| +    return; | 
| +  } | 
| +  context->set(slot, *v8::Utils::OpenHandle(*value)); | 
| +} | 
| + | 
| + | 
| +Handle<AccessorInfo> Accessors::MakeModuleExport( | 
| +    Handle<String> name, | 
| +    int index, | 
| +    PropertyAttributes attributes) { | 
| +  Factory* factory = name->GetIsolate()->factory(); | 
| +  Handle<AccessorInfo> info = factory->NewAccessorInfo(); | 
| +  info->set_property_attributes(attributes); | 
| +  info->set_all_can_read(true); | 
| +  info->set_all_can_write(true); | 
| +  info->set_name(*name); | 
| +  info->set_data(Smi::FromInt(index)); | 
| +  v8::AccessorGetter getter = &ModuleGetExport; | 
| +  v8::AccessorSetter setter = &ModuleSetExport; | 
| +  info->set_getter(*v8::FromCData(getter)); | 
| +  if (!(attributes & ReadOnly)) info->set_setter(*v8::FromCData(setter)); | 
| +  return info; | 
| +} | 
| + | 
| + | 
| } }  // namespace v8::internal | 
|  |