internal void Add(string expression, XmlNamespaceManager names, object item, bool forceExternal) { bool flag = false; OpcodeBlock newBlock = new OpcodeBlock(); newBlock.Append(new NoOpOpcode(OpcodeID.QueryTree)); if (!forceExternal) { try { MultipleResultOpcode opcode; ValueDataType none = ValueDataType.None; newBlock.Append(QueryMatcher.CompileForInternalEngine(expression, names, QueryCompilerFlags.InverseQuery, out none)); if (!this.match) { opcode = new QueryMultipleResultOpcode(); } else { opcode = new MatchMultipleResultOpcode(); } opcode.AddItem(item); newBlock.Append(opcode); flag = true; newBlock = new OpcodeBlock(this.elim.Add(item, newBlock.First)); base.subExprVars = this.elim.VariableCount; } catch (QueryCompileException) { } } if (!flag) { newBlock.Append(QueryMatcher.CompileForExternalEngine(expression, names, item, this.match)); } QueryTreeBuilder builder = new QueryTreeBuilder(); base.query = builder.Build(base.query, newBlock); this.lastLookup[item] = builder.LastOpcode; }