private void AST_HandleImport(SymbolStack <FrontendSymbol> symbols, SourceData src, ES_AstImportStatement import) { using var nmNameString = import.NamespaceName.ToPooledChars(); var namespaceData = GetNamespace(src, import.NamespaceName.NodeBounds, nmNameString); if (namespaceData is null) { return; } if (import.ImportedNames is null || import.ImportedNames.Length == 0) { foreach (var type in namespaceData.Types) { if (!symbols.AddSymbol(type.Address->Name.TypeName, FrontendSymbol.NewVariable(type))) { var err = ES_FrontendErrors.GenDuplicateSymbolDef( type.Address->Name.TypeNameString, src, import.NamespaceName.NodeBounds ); errorList.Add(err); } } foreach (var funcKVP in namespaceData.Functions) { if (!symbols.AddSymbol(funcKVP.Key, FrontendSymbol.NewFunction(funcKVP.Value))) { var err = ES_FrontendErrors.GenDuplicateSymbolDef( funcKVP.Value.Address->Name.TypeNameString, src, import.NamespaceName.NodeBounds ); errorList.Add(err); } } }
private void ImportNamespaceSymbols(SymbolStack <FrontendSymbol> symbols, ES_NamespaceData namespaceData) { foreach (var type in namespaceData.Types) { symbols.AddSymbol(type.Address->Name.TypeName, FrontendSymbol.NewType(type)); } foreach (var funcKVP in namespaceData.Functions) { symbols.AddSymbol(funcKVP.Key, FrontendSymbol.NewFunction(funcKVP.Value)); } }