package symbols import ( "github.com/marzeq/qk/types" ) type SymbolKind int const ( SymbolKindVariable SymbolKind = iota SymbolKindFunction SymbolKindType SymbolKindModule ) type Symbol struct { Name string Kind SymbolKind Mutable bool Public bool Type types.Type // for SymbolKindVariable Signature *FunctionSignature // for SymbolKindFunction TypeInfo types.Type // for SymbolKindTypeAlias Module *Module // for SymbolKindModule } type FunctionSignature struct { Parameters []types.Type ReturnType types.Type Variadic bool } func NewVariable(name string, typ types.Type) *Symbol { return &Symbol{ Name: name, Kind: SymbolKindVariable, Type: typ, } } func NewFunction(name string, signature *FunctionSignature) *Symbol { return &Symbol{ Name: name, Kind: SymbolKindFunction, Signature: signature, } } func NewType(name string, typeInfo types.Type) *Symbol { return &Symbol{ Name: name, Kind: SymbolKindType, TypeInfo: typeInfo, } }