package ast import ( "sync/atomic" "efprojects.com/kitten-ipc/kitcom/internal/tsgo/collections" ) // Symbol type Symbol struct { Flags SymbolFlags CheckFlags CheckFlags // Non-zero only in transient symbols created by Checker Name string Declarations []*Node ValueDeclaration *Node Members SymbolTable Exports SymbolTable id atomic.Uint64 Parent *Symbol ExportSymbol *Symbol AssignmentDeclarationMembers collections.Set[*Node] // Set of detected assignment declarations GlobalExports SymbolTable // Conditional global UMD exports } // SymbolTable type SymbolTable map[string]*Symbol const InternalSymbolNamePrefix = "\xFE" // Invalid UTF8 sequence, will never occur as IdentifierName const ( InternalSymbolNameCall = InternalSymbolNamePrefix + "call" // Call signatures InternalSymbolNameConstructor = InternalSymbolNamePrefix + "constructor" // Constructor implementations InternalSymbolNameNew = InternalSymbolNamePrefix + "new" // Constructor signatures InternalSymbolNameIndex = InternalSymbolNamePrefix + "index" // Index signatures InternalSymbolNameExportStar = InternalSymbolNamePrefix + "export" // Module export * declarations InternalSymbolNameGlobal = InternalSymbolNamePrefix + "global" // Global self-reference InternalSymbolNameMissing = InternalSymbolNamePrefix + "missing" // Indicates missing symbol InternalSymbolNameType = InternalSymbolNamePrefix + "type" // Anonymous type literal symbol InternalSymbolNameObject = InternalSymbolNamePrefix + "object" // Anonymous object literal declaration InternalSymbolNameJSXAttributes = InternalSymbolNamePrefix + "jsxAttributes" // Anonymous JSX attributes object literal declaration InternalSymbolNameClass = InternalSymbolNamePrefix + "class" // Unnamed class expression InternalSymbolNameFunction = InternalSymbolNamePrefix + "function" // Unnamed function expression InternalSymbolNameComputed = InternalSymbolNamePrefix + "computed" // Computed property name declaration with dynamic name InternalSymbolNameInstantiationExpression = InternalSymbolNamePrefix + "instantiationExpression" // Instantiation expressions InternalSymbolNameImportAttributes = InternalSymbolNamePrefix + "importAttributes" InternalSymbolNameExportEquals = "export=" // Export assignment symbol InternalSymbolNameDefault = "default" // Default export symbol (technically not wholly internal, but included here for usability) InternalSymbolNameThis = "this" InternalSymbolNameModuleExports = "module.exports" ) func SymbolName(symbol *Symbol) string { if symbol.ValueDeclaration != nil && IsPrivateIdentifierClassElementDeclaration(symbol.ValueDeclaration) { return symbol.ValueDeclaration.Name().Text() } return symbol.Name }