/* See Algorithm: set.Closure() in package doc */ func (this ItemList) Closure(lexPart *ast.LexPart, symbols *symbols.Symbols) ItemList { closure := this for i := 0; i < len(closure); i++ { expSym := closure[i].ExpectedSymbol() if regDefId, isRegDefId := expSym.(*ast.LexRegDefId); isRegDefId { if !this.ContainShift(expSym.String()) && !symbols.IsImport(regDefId.Id) { closure = closure.AddNoDuplicate(NewItem(regDefId.Id, lexPart, symbols).Emoves()...) } } } return closure }