NodesAnalyzeModule.cpp [plain text]
#include "config.h"
#include "Nodes.h"
#include "NodeConstructors.h"
#include "JSCJSValueInlines.h"
#include "JSModuleRecord.h"
#include "ModuleAnalyzer.h"
namespace JSC {
void ScopeNode::analyzeModule(ModuleAnalyzer& analyzer)
{
m_statements->analyzeModule(analyzer);
}
void SourceElements::analyzeModule(ModuleAnalyzer& analyzer)
{
for (StatementNode* statement = m_head; statement; statement = statement->next()) {
ASSERT(statement->isModuleDeclarationNode());
static_cast<ModuleDeclarationNode*>(statement)->analyzeModule(analyzer);
}
}
void ImportDeclarationNode::analyzeModule(ModuleAnalyzer& analyzer)
{
analyzer.moduleRecord()->appendRequestedModule(m_moduleName->moduleName());
for (auto* specifier : m_specifierList->specifiers()) {
analyzer.moduleRecord()->addImportEntry(JSModuleRecord::ImportEntry {
m_moduleName->moduleName(),
specifier->importedName(),
specifier->localName()
});
}
}
void ExportAllDeclarationNode::analyzeModule(ModuleAnalyzer& analyzer)
{
analyzer.moduleRecord()->appendRequestedModule(m_moduleName->moduleName());
analyzer.moduleRecord()->addStarExportEntry(m_moduleName->moduleName());
}
void ExportDefaultDeclarationNode::analyzeModule(ModuleAnalyzer& analyzer)
{
analyzer.declareExportAlias(m_localName, analyzer.vm().propertyNames->defaultKeyword);
}
void ExportLocalDeclarationNode::analyzeModule(ModuleAnalyzer&)
{
}
void ExportNamedDeclarationNode::analyzeModule(ModuleAnalyzer& analyzer)
{
if (m_moduleName)
analyzer.moduleRecord()->appendRequestedModule(m_moduleName->moduleName());
for (auto* specifier : m_specifierList->specifiers()) {
if (m_moduleName) {
analyzer.moduleRecord()->addExportEntry(JSModuleRecord::ExportEntry::createIndirect(specifier->exportedName(), specifier->localName(), m_moduleName->moduleName()));
continue;
}
if (specifier->localName() != specifier->exportedName())
analyzer.declareExportAlias(specifier->localName(), specifier->exportedName());
}
}
}