Beispiel #1
0
        protected ObjectDef EmitEqualityExpression(CParser.EqualityExpressionContext equalityExpression)
        {
            ObjectDef returnObjectDef = null;

            if (equalityExpression.relationalExpression() != null)
            {
                returnObjectDef = EmitRelationalExpression(equalityExpression.relationalExpression());
            }

            if (equalityExpression.relationalExpression() != null &&
                equalityExpression.equalityExpression() != null)
            {
                var equalityObj = EmitEqualityExpression(equalityExpression.equalityExpression());

                equalityObj.Load();
                returnObjectDef.Load();

                if (equalityExpression.Equal() != null)
                {
                    _generatorIL.Emit(OpCodes.Ceq);
                }
                else if (equalityExpression.NotEqual() != null)
                {
                    var zero = new ValueObjectDef(typeof(int), 0);

                    _generatorIL.Emit(OpCodes.Ceq);
                    zero.Load();
                    _generatorIL.Emit(OpCodes.Ceq);
                }

                returnObjectDef = LocalObjectDef.AllocateLocal(typeof(int));
            }

            return(returnObjectDef);
        }
Beispiel #2
0
        protected ObjectDef EmitVoid(ITree expressionNode)
        {
            var result = new ValueObjectDef(typeof(Nullable), null);

            return(result);
        }
Beispiel #3
0
        protected ObjectDef EmitBoolean(ITree expressionNode)
        {
            var result = new ValueObjectDef(typeof(bool), bool.Parse(expressionNode.ToString()));

            return(result);
        }
Beispiel #4
0
        protected ObjectDef EmitString(ITree expressionNode)
        {
            var result = new ValueObjectDef(typeof(string), expressionNode.ToString());

            return(result);
        }
Beispiel #5
0
        protected ObjectDef EmitDouble(ITree expressionNode)
        {
            var result = new ValueObjectDef(typeof(double), double.Parse(expressionNode.ToString()));

            return(result);
        }
Beispiel #6
0
        protected ObjectDef EmitInteger(ITree expressionNode)
        {
            var result = new ValueObjectDef(typeof(int), int.Parse(expressionNode.ToString()));

            return(result);
        }