//////////////////////////////////////////////////////////////////////////////
        private void addSubexpression(Expression e, string context)
        {
            if (!e.isGround)
            {
                return;
            }

            string        key = e.ToString();
            SubExpression se  = null;

            if (subexpressionCounts.TryGetValue(key, out se))
            {
                se.add(currentStatement, context);
            }
            //targetE,context,statementId); contexts subexpressionCounts[key].contexts.Add(context);
            else
            {
                Expression ne = e.substitute(new ExpressionSubstitution());
                subexpressionCounts.Add(ne.ToString(), new SubExpression(ne, currentStatement, context));
                Debug.Assert(ne.ToString() == subexpressionCounts[ne.ToString()].expression.ToString());
            }
        }