Ejemplo n.º 1
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(_left);
     ctx.Compile(_right);
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(OpCodes.Ceq);
 }
Ejemplo n.º 2
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(_arrayInstance);
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(OpCodes.Ldlen);//native int
     ctx.Generator.Emit(OpCodes.Conv_I4);
 }
Ejemplo n.º 3
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(_left);
     ctx.Compile(_right);
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(GetOpCode(CollectionHelper.Contains(_unsigned, _left.ExpressionType)));
 }
Ejemplo n.º 4
0
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            var forceNonVirtualCall = _forceNonVirtualCall;

            if (_instance != null)
            {
                ctx.Compile(_instance);
                if (_instance.ExpressionType.IsValueType)
                {
                    forceNonVirtualCall = true;
                }
            }

            foreach (var argument in _arguments)
            {
                ctx.Compile(argument);
            }

            ctx.MarkSequencePointFor(expressionId);

            if (!forceNonVirtualCall && _methodInfo.IsVirtual && !_methodInfo.IsFinal)
            {
                ctx.Generator.Emit(OpCodes.Callvirt, _methodInfo.GetBaseDefinition());
            }
            else
            {
                ctx.Generator.Emit(OpCodes.Call, _methodInfo);
            }
        }
Ejemplo n.º 5
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(_count);
     EmitHelper.ConvertToNativeInt(ctx, _count.ExpressionType);
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(OpCodes.Newarr, _elementType);
 }
Ejemplo n.º 6
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     if (!ctx.IsInScope <CatchScope>())
     {
         throw new InvalidOperationException("Unable to rethrow - not in catch block.");
     }
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(OpCodes.Rethrow);
 }
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     if (_instance != null)
     {
         ctx.Compile(_instance);
     }
     ctx.Compile(_value);
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit((_instance != null) ? OpCodes.Stfld : OpCodes.Stsfld, _fieldInfo);
 }
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            ctx.Compile(_arrayInstance);

            ctx.Compile(_index);
            EmitHelper.ConvertToNativeInt(ctx, _index.ExpressionType);

            ctx.MarkSequencePointFor(expressionId);

            EmitArrayAccess(ctx);
        }
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            var data = ctx.GetLoopData();

            if (data == null)
            {
                throw new InvalidOperationException("Continue expression can be used only inside loop");
            }
            ctx.MarkSequencePointFor(expressionId);
            data.ContinueLabel.EmitGoto(OpCodes.Br, ValidateJump);
        }
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            var local = ctx.DeclareLocal(_variable);

            if (_initialValue != null)
            {
                ctx.Compile(_initialValue);

                ctx.MarkSequencePointFor(expressionId);
                LocalWriteExpression.EmitWriteLocal(ctx, local);
            }
        }
Ejemplo n.º 11
0
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            ValidateReturnType(ctx);
            ValidateScope(ctx);

            if (_value != null)
            {
                ctx.Compile(_value);
            }

            ctx.MarkSequencePointFor(expressionId);
            ctx.Generator.Emit(OpCodes.Ret);
        }
Ejemplo n.º 12
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ValidateParameter(ctx);
     ctx.MarkSequencePointFor(expressionId);
     if (_loadAddress)
     {
         EmitArgumentAddress(ctx);
     }
     else
     {
         EmitArgumentValue(ctx);
     }
 }
Ejemplo n.º 13
0
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            ctx.MarkSequencePointFor(expressionId);
            var local = ctx.GetLocal(_variable);

            if (_loadAddress)
            {
                EmitLocalAddress(ctx, local);
            }
            else
            {
                EmitLocalValue(ctx, local);
            }
        }
Ejemplo n.º 14
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     foreach (var argument in _arguments)
     {
         ctx.Compile(argument);
     }
     ctx.MarkSequencePointFor(expressionId);
     if (_constructorInfo == null)
     {
         EmitStructInit(ctx);
     }
     else
     {
         ctx.Generator.Emit(OpCodes.Newobj, _constructorInfo);
     }
 }
Ejemplo n.º 15
0
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            if (_instance != null)
            {
                ctx.Compile(_instance);
            }

            ctx.MarkSequencePointFor(expressionId);

            if (_loadAddress)
            {
                ctx.Generator.Emit((_instance != null) ? OpCodes.Ldflda : OpCodes.Ldsflda, _fieldInfo);
            }
            else
            {
                ctx.Generator.Emit((_instance != null) ? OpCodes.Ldfld : OpCodes.Ldsfld, _fieldInfo);
            }
        }
Ejemplo n.º 16
0
        internal override void Compile(IBuildContext ctx, int expressionId)
        {
            ctx.Compile(_left);
            ctx.Compile(_right);
            ctx.MarkSequencePointFor(expressionId);

            if (!_overflowCheck || CollectionHelper.Contains(_overflowIgnorant, _left.ExpressionType))
            {
                ctx.Generator.Emit(OpCodes.Add);
            }
            else if (CollectionHelper.Contains(_overflowUnsigned, _left.ExpressionType) && CollectionHelper.Contains(_overflowUnsigned, _right.ExpressionType))
            {
                ctx.Generator.Emit(OpCodes.Add_Ovf_Un);
            }
            else
            {
                ctx.Generator.Emit(OpCodes.Add_Ovf);
            }
        }
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(_value);
     ctx.MarkSequencePointFor(expressionId);
     EmitWriteLocal(ctx, ctx.GetLocal(_variable));
 }
Ejemplo n.º 18
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.MarkSequencePointFor(expressionId);
     ctx.Generator.Emit(OpCodes.Ldnull);
 }
Ejemplo n.º 19
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.Compile(Expression);
     ctx.MarkSequencePointFor(expressionId);
     _conversionMethod(ctx);
 }
Ejemplo n.º 20
0
 internal override void Compile(IBuildContext ctx, int expressionId)
 {
     ctx.MarkSequencePointFor(expressionId);
     _action(ctx);
 }