Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Unified Diff: src/ast/modules.cc

Issue 2277273002: [modules] Partial support for (de-)serializing module descriptor entries. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast/modules.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/modules.cc
diff --git a/src/ast/modules.cc b/src/ast/modules.cc
index 1367942245c0e4b3206664f62b102f595f4878ef..f0cb18bc627be13d3fd251231f98dbf6b136431c 100644
--- a/src/ast/modules.cc
+++ b/src/ast/modules.cc
@@ -12,16 +12,11 @@ namespace internal {
void ModuleDescriptor::AddImport(
const AstRawString* import_name, const AstRawString* local_name,
const AstRawString* module_request, Scanner::Location loc, Zone* zone) {
- DCHECK_NOT_NULL(import_name);
- DCHECK_NOT_NULL(local_name);
- DCHECK_NOT_NULL(module_request);
Entry* entry = new (zone) Entry(loc);
entry->local_name = local_name;
entry->import_name = import_name;
entry->module_request = module_request;
- regular_imports_.insert(std::make_pair(entry->local_name, entry));
- // We don't care if there's already an entry for this local name, as in that
- // case we will report an error when declaring the variable.
+ AddRegularImport(entry);
}
@@ -33,28 +28,25 @@ void ModuleDescriptor::AddStarImport(
Entry* entry = new (zone) Entry(loc);
entry->local_name = local_name;
entry->module_request = module_request;
- special_imports_.Add(entry, zone);
+ AddSpecialImport(entry, zone);
}
void ModuleDescriptor::AddEmptyImport(
const AstRawString* module_request, Scanner::Location loc, Zone* zone) {
- DCHECK_NOT_NULL(module_request);
Entry* entry = new (zone) Entry(loc);
entry->module_request = module_request;
- special_imports_.Add(entry, zone);
+ AddSpecialImport(entry, zone);
}
void ModuleDescriptor::AddExport(
const AstRawString* local_name, const AstRawString* export_name,
Scanner::Location loc, Zone* zone) {
- DCHECK_NOT_NULL(local_name);
- DCHECK_NOT_NULL(export_name);
Entry* entry = new (zone) Entry(loc);
entry->export_name = export_name;
entry->local_name = local_name;
- regular_exports_.insert(std::make_pair(entry->local_name, entry));
+ AddRegularExport(entry);
}
@@ -63,21 +55,59 @@ void ModuleDescriptor::AddExport(
const AstRawString* module_request, Scanner::Location loc, Zone* zone) {
DCHECK_NOT_NULL(import_name);
DCHECK_NOT_NULL(export_name);
- DCHECK_NOT_NULL(module_request);
Entry* entry = new (zone) Entry(loc);
entry->export_name = export_name;
entry->import_name = import_name;
entry->module_request = module_request;
- special_exports_.Add(entry, zone);
+ AddSpecialExport(entry, zone);
}
void ModuleDescriptor::AddStarExport(
const AstRawString* module_request, Scanner::Location loc, Zone* zone) {
- DCHECK_NOT_NULL(module_request);
Entry* entry = new (zone) Entry(loc);
entry->module_request = module_request;
- special_exports_.Add(entry, zone);
+ AddSpecialExport(entry, zone);
+}
+
+namespace {
+
+Handle<Object> ToStringOrUndefined(Isolate* isolate, const AstRawString* s) {
+ return (s == nullptr)
+ ? Handle<Object>::cast(isolate->factory()->undefined_value())
+ : Handle<Object>::cast(s->string());
+}
+
+const AstRawString* FromStringOrUndefined(Isolate* isolate,
+ AstValueFactory* avfactory,
+ Handle<Object> object) {
+ if (object->IsUndefined(isolate)) return nullptr;
+ return avfactory->GetString(Handle<String>::cast(object));
+}
+
+} // namespace
+
+Handle<FixedArray> ModuleDescriptor::Entry::Serialize(Isolate* isolate) const {
+ Handle<FixedArray> result = isolate->factory()->NewFixedArray(4);
+ result->set(0, *ToStringOrUndefined(isolate, export_name));
+ result->set(1, *ToStringOrUndefined(isolate, local_name));
+ result->set(2, *ToStringOrUndefined(isolate, import_name));
+ result->set(3, *ToStringOrUndefined(isolate, module_request));
+ return result;
+}
+
+ModuleDescriptor::Entry* ModuleDescriptor::Entry::Deserialize(
+ Isolate* isolate, AstValueFactory* avfactory, Handle<FixedArray> data) {
+ Entry* entry = new (avfactory->zone()) Entry(Scanner::Location::invalid());
+ entry->export_name =
+ FromStringOrUndefined(isolate, avfactory, handle(data->get(0), isolate));
+ entry->local_name =
+ FromStringOrUndefined(isolate, avfactory, handle(data->get(1), isolate));
+ entry->import_name =
+ FromStringOrUndefined(isolate, avfactory, handle(data->get(2), isolate));
+ entry->module_request =
+ FromStringOrUndefined(isolate, avfactory, handle(data->get(3), isolate));
+ return entry;
}
void ModuleDescriptor::MakeIndirectExportsExplicit(Zone* zone) {
« no previous file with comments | « src/ast/modules.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698