Ejemplo n.º 1
0
        protected override Expression VisitConstant(ConstantExpression node)
        {
            ProtoExpression proto = node.Value switch
            {
                char value => new ProtoCharConstantExpression(value),
                sbyte value => new ProtoSByteConstantExpression(value),
                byte value => new ProtoByteConstantExpression(value),
                short value => new ProtoInt16ConstantExpression(value),
                ushort value => new ProtoUInt16ConstantExpression(value),
                int value => new ProtoInt32ConstantExpression(value),
                uint value => new ProtoUInt32ConstantExpression(value),
                long value => new ProtoInt64ConstantExpression(value),
                ulong value => new ProtoUInt64ConstantExpression(value),
                float value => new ProtoSingleConstantExpression(value),
                double value => new ProtoDoubleConstantExpression(value),
                decimal value => new ProtoDecimalConstantExpression(value),
                DateTime value => new ProtoDateTimeConstantExpression(value),
                string value => new ProtoStringConstantExpression(value),
                _ => throw new NotImplementedException(),
            };

            _protos.Push(proto);

            return(node);
        }
Ejemplo n.º 2
0
        public Expression Translate(ProtoExpression node)
        {
            _stack.Clear();

            Visit(node);

            return(_stack.Pop());
        }
Ejemplo n.º 3
0
        private ProtoExpression Visit(ProtoExpression node)
        {
            switch (node)
            {
            case ProtoConstantExpression constant:
                VisitConstant(constant);
                break;

            default:
                throw new NotSupportedException();
            }

            return(node);
        }