| 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 |