private CompiledNode CompileNode(UnCompiledNode <T> nodeIn, int tailLength) { long node; if (DedupHash != null && (DoShareNonSingletonNodes || nodeIn.NumArcs <= 1) && tailLength <= ShareMaxTailLength) { if (nodeIn.NumArcs == 0) { node = Fst.AddNode(nodeIn); } else { node = DedupHash.Add(nodeIn); } } else { node = Fst.AddNode(nodeIn); } Debug.Assert(node != -2); nodeIn.Clear(); CompiledNode fn = new CompiledNode(); fn.Node = node; return(fn); }
internal override System.Linq.Expressions.Expression TryCompile(bool selfCompile, bool forAssign, Type expectedType, List <CodeNode> dynamicValues) { var ft = _left.TryCompile(false, false, null, dynamicValues); var st = _right.TryCompile(false, false, null, dynamicValues); if (ft == st) // null == null { return(null); } if (ft == null && st != null) { _right = new CompiledNode(_right, st, JITHelpers._items.GetValue(dynamicValues) as CodeNode[]); return(null); } if (ft != null && st == null) { _left = new CompiledNode(_left, ft, JITHelpers._items.GetValue(dynamicValues) as CodeNode[]); return(null); } if (ft.Type == st.Type) { return(System.Linq.Expressions.Expression.Add(ft, st)); } return(null); }