60 lines
3.3 KiB
Go
60 lines
3.3 KiB
Go
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
|
|
}
|