Пример #1
0
        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);
        }
Пример #2
0
        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);
        }