package sema import ( "github.com/marzeq/qk/parser" "github.com/marzeq/qk/types" ) type aliasState int const ( aliasUnseen aliasState = iota aliasResolving aliasResolved ) type aliasInfo struct { node *parser.TypeAliasNode state aliasState } func (a *Analyser) resolveAlias(info *aliasInfo, node parser.Node) types.Type { switch info.state { case aliasResolving: a.errorf(node, "circular type alias detected") return types.ErrorType{} case aliasResolved: return info.node.Symbol.TypeInfo } info.state = aliasResolving resolved := a.resolveTypeNode(info.node.Type) info.node.Symbol.TypeInfo = resolved info.state = aliasResolved return resolved }