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)); } }
public override bool Walk(ClassDefinition node) { _stack.Enter(SymbolKind.Class); WalkIfNotLibraryMode(node.Body); var children = _stack.Exit(); _stack.AddSymbol(new HierarchicalSymbol( node.Name, SymbolKind.Class, node.GetSpan(_ast), node.NameExpression.GetSpan(_ast), children, FunctionKind.Class, ExistInAllVariable(node.Name) )); return(false); }
public override bool Walk(ClassDefinition node) { _stack.Enter(SymbolKind.Class); node.Body?.Walk(this); var children = _stack.Exit(); _stack.AddSymbol(new HierarchicalSymbol( node.Name, SymbolKind.Class, node.GetSpan(_ast), node.NameExpression.GetSpan(_ast), children, FunctionKind.Class )); return(false); }