Example #1
0
    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);
                }
            }
        }
Example #2
0
 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));
     }
 }