| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2012 the V8 project authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 #include "src/modules.h" |  | 
| 6 |  | 
| 7 #include "src/ast-value-factory.h" |  | 
| 8 |  | 
| 9 namespace v8 { |  | 
| 10 namespace internal { |  | 
| 11 |  | 
| 12 |  | 
| 13 void ModuleDescriptor::AddLocalExport(const AstRawString* export_name, |  | 
| 14                                       const AstRawString* local_name, |  | 
| 15                                       Zone* zone, bool* ok) { |  | 
| 16   DCHECK(!IsFrozen()); |  | 
| 17   void* key = const_cast<AstRawString*>(export_name); |  | 
| 18 |  | 
| 19   ZoneAllocationPolicy allocator(zone); |  | 
| 20 |  | 
| 21   if (exports_ == nullptr) { |  | 
| 22     exports_ = new (zone->New(sizeof(ZoneHashMap))) |  | 
| 23         ZoneHashMap(ZoneHashMap::PointersMatch, |  | 
| 24                     ZoneHashMap::kDefaultHashMapCapacity, allocator); |  | 
| 25   } |  | 
| 26 |  | 
| 27   ZoneHashMap::Entry* p = |  | 
| 28       exports_->LookupOrInsert(key, export_name->hash(), allocator); |  | 
| 29   DCHECK_NOT_NULL(p); |  | 
| 30   if (p->value != nullptr) { |  | 
| 31     // Duplicate export. |  | 
| 32     *ok = false; |  | 
| 33     return; |  | 
| 34   } |  | 
| 35 |  | 
| 36   p->value = const_cast<AstRawString*>(local_name); |  | 
| 37 } |  | 
| 38 |  | 
| 39 |  | 
| 40 void ModuleDescriptor::AddModuleRequest(const AstRawString* module_specifier, |  | 
| 41                                         Zone* zone) { |  | 
| 42   // TODO(adamk): Avoid this O(N) operation on each insert by storing |  | 
| 43   // a HashMap, or by de-duping after parsing. |  | 
| 44   if (requested_modules_.Contains(module_specifier)) return; |  | 
| 45   requested_modules_.Add(module_specifier, zone); |  | 
| 46 } |  | 
| 47 |  | 
| 48 |  | 
| 49 const AstRawString* ModuleDescriptor::LookupLocalExport( |  | 
| 50     const AstRawString* export_name, Zone* zone) { |  | 
| 51   if (exports_ == nullptr) return nullptr; |  | 
| 52   ZoneHashMap::Entry* entry = exports_->Lookup( |  | 
| 53       const_cast<AstRawString*>(export_name), export_name->hash()); |  | 
| 54   if (entry == nullptr) return nullptr; |  | 
| 55   DCHECK_NOT_NULL(entry->value); |  | 
| 56   return static_cast<const AstRawString*>(entry->value); |  | 
| 57 } |  | 
| 58 }  // namespace internal |  | 
| 59 }  // namespace v8 |  | 
| OLD | NEW | 
|---|