internal TypeOfExpressionEmitter(TypeOfExpression typeOfExpression,
                                  ILGenerator ilGenerator,
                                  IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer)
 {
     _typeOfExpression = typeOfExpression;
 }
        internal ArgumentReferenceEmitter(IdentifierExpression identifierExpression, ParameterDefinition parameterDefinition, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
            : base(ilGenerator, instructionsIndexer) {

            _parameterDefinition = parameterDefinition;
            _identifierExpression = identifierExpression;
            Type = parameterDefinition.ParameterType.GetActualType();
        }
 private ThisExpressionEmitter(AstNode node, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor)
 {
     _astNode            = node;
     _visitor            = visitor;
     ILGenerator         = ilGenerator;
     InstructionsIndexer = instructionsIndexer;
 }
Example #4
0
        internal FieldReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                 Type target,
                                                 MemberInfo member,
                                                 ILGenerator ilGenerator,
                                                 IOpCodeIndexer instructionsIndexer,
                                                 IAstVisitor <ILGenerator, AstNode> visitor,
                                                 List <LocalBuilder> locals,
                                                 bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals)
        {
            FieldReference = MemberReference.Annotation <FieldReference>();
            IsByRef        = MemberReference.Parent is DirectionExpression;
            Type           = FieldReference.FieldType.GetActualType();
            FieldInfo      = FieldReference.GetActualField();
            NonPublic      = !((FieldInfo.Attributes & (_publicFieldAttributes)) == _publicFieldAttributes);

            if (isSetter)
            {
                _emitAction        = EmitStoreFieldReference;
                _emitPrivateAction = EmitPrivateStoreFieldReference;
            }
            else
            {
                _emitAction        = EmitLoadFieldReference;
                _emitPrivateAction = EmitPrivateLoadFieldReference;
            }
        }
        internal FieldReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                 Type target,
                                                 MemberInfo member,
                                                 ILGenerator ilGenerator,
                                                 IOpCodeIndexer instructionsIndexer,
                                                 IAstVisitor<ILGenerator, AstNode> visitor,
                                                 List<LocalBuilder> locals,
                                                 bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) {

            FieldReference = MemberReference.Annotation<FieldReference>();
            IsByRef = MemberReference.Parent is DirectionExpression;
            Type = FieldReference.FieldType.GetActualType();
            FieldInfo = FieldReference.GetActualField();
            NonPublic = !((FieldInfo.Attributes & (_publicFieldAttributes)) == _publicFieldAttributes);

            if (isSetter) {
                _emitAction = EmitStoreFieldReference;
                _emitPrivateAction = EmitPrivateStoreFieldReference;
            }
            else {
                _emitAction = EmitLoadFieldReference;
                _emitPrivateAction = EmitPrivateLoadFieldReference;
            }
        }
        public PropertyReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                  Type target,
                                                  MemberInfo member,
                                                  ILGenerator ilGenerator,
                                                  IOpCodeIndexer instructionsIndexer,
                                                  IAstVisitor<ILGenerator, AstNode> visitor,
                                                  List<LocalBuilder> locals,
                                                  bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) {

            var propertyInfo = Member as PropertyInfo;

            _isSetter = isSetter;
            _propertyDefinition = MemberReference.Annotation<Cecil.PropertyDefinition>();
            NonPublic = !_propertyDefinition.GetMethod.IsPublic;
            Type = _propertyDefinition.PropertyType.GetActualType();

            if (isSetter) {
                _propertyMethod = propertyInfo.GetSetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateStorePropertyReference;
            }
            else {
                _propertyMethod = propertyInfo.GetGetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateLoadPropertyReference;
            }
        }
        internal MemberReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                  ILGenerator ilGenerator,
                                                  IOpCodeIndexer instructionsIndexer,
                                                  IAstVisitor <ILGenerator, AstNode> visitor,
                                                  List <LocalBuilder> locals,
                                                  bool isSetter = false)
            : base(memberReferenceExpression, ilGenerator, instructionsIndexer, visitor, locals)
        {
            var targetTypeReference = Node.Target as TypeReferenceExpression;

            if (targetTypeReference != null)
            {
                Type = targetTypeReference.Type.GetActualType();
            }
            else if (Node.Target is TypeOfExpression)
            {
                Type = typeof(Type);
            }
            else
            {
                Type = Node.Target.Annotation <TypeInformation>()
                       .InferredType
                       .GetActualType();
            }

            Target    = Type;
            _isSetter = isSetter;
            Member    = Target.GetMember(Node.MemberName, ReflectionUtils.AllFlags)[0];
        }
        internal IndexerExpressionEmitter(IndexerExpression indexerExpression,
                                          ILGenerator ilGenerator,
                                          IOpCodeIndexer instructionIndexer,
                                          IAstVisitor <ILGenerator, AstNode> visitor,
                                          List <LocalBuilder> locals)
            : base(indexerExpression, ilGenerator, instructionIndexer, visitor, locals)
        {
            Type = indexerExpression.Target
                   .Annotation <TypeInformation>()
                   .InferredType
                   .GetActualType();

            if (Type.IsArray)
            {
                _typeToEmit = Type.GetElementType();

                if (Type.GetArrayRank() == 1)
                {
                    _indexerEmitter = EmitArrayIndexer;
                }
                else
                {
                    _indexerEmitter = EmitMultiDimensionalArrayIndexer;
                }
            }
            else
            {
                _indexerEmitter = EmitIdexerByMethod;
            }
        }
        public PropertyReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                  Type target,
                                                  MemberInfo member,
                                                  ILGenerator ilGenerator,
                                                  IOpCodeIndexer instructionsIndexer,
                                                  IAstVisitor <ILGenerator, AstNode> visitor,
                                                  List <LocalBuilder> locals,
                                                  bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals)
        {
            var propertyInfo = Member as PropertyInfo;

            _isSetter           = isSetter;
            _propertyDefinition = MemberReference.Annotation <Cecil.PropertyDefinition>();
            NonPublic           = !_propertyDefinition.GetMethod.IsPublic;
            Type = _propertyDefinition.PropertyType.GetActualType();

            if (isSetter)
            {
                _propertyMethod    = propertyInfo.GetSetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateStorePropertyReference;
            }
            else
            {
                _propertyMethod    = propertyInfo.GetGetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateLoadPropertyReference;
            }
        }
        internal ArrayInitializerEmitter(ArrayInitializerExpression arrayInitializerExpression,
                                         ILGenerator ilGenerator,
                                         IOpCodeIndexer instructionIndexer,
                                         IAstVisitor <ILGenerator, AstNode> visitor,
                                         List <LocalBuilder> locals)
            : base(arrayInitializerExpression, ilGenerator, instructionIndexer, visitor, locals)
        {
            _localBuilder = Locals[Locals.Count - 1];
            Type          = _localBuilder.LocalType;

            if (Type.IsArray)
            {
                _typeToEmit = Type.GetElementType();

                if (Type.GetArrayRank() > 1)
                {
                    _emitFunction = EmitMultiDimensionalArrayInitializer;
                }
                else
                {
                    _emitFunction = EmitArrayInitializer;
                }
            }
            else
            {
                _typeToEmit   = Type;
                _emitFunction = EmitNewObjectInitializer;
            }

            _isPrimitive       = _typeToEmit.IsPrimitive();
            _emitElementAction = _isPrimitive ?
                                 EmitPrimitiveElement :
                                 (Action <AstNode, int>)EmitElementRef;
        }
 internal PrimitiveEmitter(PrimitiveExpression primitiveExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer) {
     
     PrimitiveExpression = primitiveExpression;
     Type = PrimitiveExpression.Value.GetType();
     PrimitiveInstruction = InstructionsIndexer.GetInstruction(PrimitiveExpression);
 }
 internal EventReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                          Type target,
                                          MemberInfo member,
                                          ILGenerator ilGenerator,
                                          IOpCodeIndexer instructionsIndexer,
                                          IAstVisitor<ILGenerator, AstNode> visitor,
                                          List<LocalBuilder> locals)
     : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) { }
Example #13
0
 internal DirectionExpressionEmitter(DirectionExpression directionExpression,
                                     ILGenerator ilGenerator,
                                     IOpCodeIndexer instructionIndexer,
                                     IAstVisitor <ILGenerator, AstNode> visitor,
                                     List <LocalBuilder> locals)
     : base(directionExpression, ilGenerator, instructionIndexer, visitor, locals)
 {
 }
 internal AbstractReflectionEmitter(ILGenerator ilGenerator,
                                    IOpCodeIndexer instructionsIndexer,
                                    IAstVisitor<ILGenerator, AstNode> visitor,
                                    List<LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer) {
     Visitor = visitor;
     Locals = locals;
 }
Example #15
0
 internal MethodReferenceReflectionEmitter(InvocationExpression invocationExpression,
                                           ILGenerator ilGenerator,
                                           IOpCodeIndexer instructionsIndexer,
                                           IAstVisitor <ILGenerator, AstNode> visitor,
                                           List <LocalBuilder> locals)
     : base(invocationExpression, ilGenerator, instructionsIndexer, visitor, locals)
 {
 }
Example #16
0
 internal AsExpressionEmitter(AsExpression asExpression,
                              ILGenerator ilGenerator,
                              IOpCodeIndexer instructionsIndexer,
                              IAstVisitor <ILGenerator, AstNode> visitor)
     : base(asExpression, ilGenerator, instructionsIndexer, visitor)
 {
     Type = asExpression.Type.GetActualType();
 }
 internal AssignmentExpressionEmitter(AssignmentExpression assignmentExpression,
                                      ILGenerator ilGenerator,
                                      IOpCodeIndexer instructionIndexer,
                                      IAstVisitor <ILGenerator, AstNode> visitor,
                                      List <LocalBuilder> locals)
     : base(assignmentExpression, ilGenerator, instructionIndexer, visitor, locals)
 {
 }
 internal CastExpressionEmitter(CastExpression castExpression,
                                ILGenerator ilGenerator,
                                IOpCodeIndexer instructionsIndexer,
                                IAstVisitor <ILGenerator, AstNode> visitor,
                                List <LocalBuilder> locals)
     : base(castExpression, ilGenerator, instructionsIndexer, visitor, locals)
 {
 }
Example #19
0
 internal AbstractReflectionEmitter(ILGenerator ilGenerator,
                                    IOpCodeIndexer instructionsIndexer,
                                    IAstVisitor <ILGenerator, AstNode> visitor,
                                    List <LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer)
 {
     Visitor = visitor;
     Locals  = locals;
 }
 internal ArrayCreationEmitter(ArrayCreateExpression arrayObjectCreateExpression,
                               ILGenerator ilGenerator,
                               IOpCodeIndexer instructionIndexer,
                               IAstVisitor <ILGenerator, AstNode> visitor,
                               List <LocalBuilder> locals)
     : base(arrayObjectCreateExpression, ilGenerator, instructionIndexer, visitor, locals)
 {
     Type = arrayObjectCreateExpression.GetArrayType();
 }
 internal MultipuleAssignmentEmitter(MemberReferenceExpression memberReferenceExpression,
                                     Expression assignor,
                                     ILGenerator ilGenerator,
                                     IOpCodeIndexer instructionsIndexer,
                                     IAstVisitor<ILGenerator, AstNode> visitor,
                                     List<LocalBuilder> locals)
     : base(memberReferenceExpression, ilGenerator, instructionsIndexer, visitor, locals) {
     _assignorExpression = assignor;
 }
 internal NewObjectEmitter(ObjectCreateExpression objectCreateExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor, List <LocalBuilder> locals)
 {
     _locals                 = locals;
     _visitor                = visitor;
     ILGenerator             = ilGenerator;
     InstructionsIndexer     = instructionsIndexer;
     _objectCreateExpression = objectCreateExpression;
     Type = _objectCreateExpression.Type.GetActualType();
 }
Example #23
0
 internal MultipuleAssignmentEmitter(MemberReferenceExpression memberReferenceExpression,
                                     Expression assignor,
                                     ILGenerator ilGenerator,
                                     IOpCodeIndexer instructionsIndexer,
                                     IAstVisitor <ILGenerator, AstNode> visitor,
                                     List <LocalBuilder> locals)
     : base(memberReferenceExpression, ilGenerator, instructionsIndexer, visitor, locals)
 {
     _assignorExpression = assignor;
 }
 internal EventReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                          Type target,
                                          MemberInfo member,
                                          ILGenerator ilGenerator,
                                          IOpCodeIndexer instructionsIndexer,
                                          IAstVisitor <ILGenerator, AstNode> visitor,
                                          List <LocalBuilder> locals)
     : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals)
 {
 }
Example #25
0
 internal AnonymousTypeEmitter(AnonymousTypeCreateExpression anonymousTypeCreateExpression,
                               ILGenerator ilGenerator,
                               IOpCodeIndexer instructionIndexer,
                               IAstVisitor <ILGenerator, AstNode> visitor,
                               List <LocalBuilder> locals)
     : base(anonymousTypeCreateExpression, ilGenerator, instructionIndexer, visitor, locals)
 {
     Type = anonymousTypeCreateExpression.Annotation <TypeInformation>()
            .InferredType
            .GetActualType();
 }
 internal AbstractDepthFirstVisitorEmitter(TAstNode node,
                                           ILGenerator ilGenerator,
                                           IOpCodeIndexer instructionsIndexer,
                                           IAstVisitor <ILGenerator, AstNode> visitor,
                                           List <LocalBuilder> locals = null)
 {
     Node                = node;
     Visitor             = visitor;
     Locals              = locals;
     ILGenerator         = ilGenerator;
     InstructionsIndexer = instructionsIndexer;
 }
 internal AbstractMemberReferenceEmitter(MemberReferenceExpression memberReferenceExpression,
                                         Type target,
                                         MemberInfo member,
                                         ILGenerator ilGenerator,
                                         IOpCodeIndexer instructionsIndexer,
                                         IAstVisitor<ILGenerator, AstNode> visitor,
                                         List<LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer, visitor, locals) {
     Target = target;
     Member = member;
     MemberReference = memberReferenceExpression;
 }
Example #28
0
        internal UnaryExpressionEmitter(UnaryOperatorExpression unaryOperatorExpression,
                                        ILGenerator ilGenerator,
                                        IOpCodeIndexer instructionIndexer,
                                        IAstVisitor <ILGenerator, AstNode> visitor,
                                        List <LocalBuilder> locals)
            : base(unaryOperatorExpression, ilGenerator, instructionIndexer, visitor, locals)
        {
            var typeInformation = Node.Annotation <TypeInformation>() ??
                                  Node.Expression.Annotation <TypeInformation>();

            Type = typeInformation.InferredType.GetActualType();
            _unaryNumericPromotionDecision = UnaryNumericPromotionDecision.Decide(Type, unaryOperatorExpression.Operator);
        }
Example #29
0
        internal ConditionalExpressionEmitter(ConditionalExpression conditionalExpression,
                                              ILGenerator ilGenerator,
                                              IOpCodeIndexer instructionIndexer,
                                              IAstVisitor <ILGenerator, AstNode> visitor,
                                              List <LocalBuilder> locals)
            : base(conditionalExpression, ilGenerator, instructionIndexer, visitor, locals)
        {
            _conditionLabel = ILGenerator.DefineLabel();

            Type = conditionalExpression.Annotation <TypeInformation>()
                   .InferredType
                   .GetActualType();
        }
 internal AbstractMemberReferenceEmitter(MemberReferenceExpression memberReferenceExpression,
                                         Type target,
                                         MemberInfo member,
                                         ILGenerator ilGenerator,
                                         IOpCodeIndexer instructionsIndexer,
                                         IAstVisitor <ILGenerator, AstNode> visitor,
                                         List <LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer, visitor, locals)
 {
     Target          = target;
     Member          = member;
     MemberReference = memberReferenceExpression;
 }
        internal BinaryExpressionEmitter(BinaryOperatorExpression binaryOperatorExpression,
                                         ILGenerator ilGenerator,
                                         IOpCodeIndexer instructionIndexer,
                                         IAstVisitor <ILGenerator, AstNode> visitor,
                                         List <LocalBuilder> locals)
            : base(binaryOperatorExpression, ilGenerator, instructionIndexer, visitor, locals)
        {
            var leftTypeInformation  = Node.Left.Annotation <TypeInformation>();
            var rightTypeInformation = Node.Right.Annotation <TypeInformation>();

            if (leftTypeInformation != null && rightTypeInformation != null)
            {
                _leftType           = leftTypeInformation.InferredType.GetActualType();
                _rightType          = rightTypeInformation.InferredType.GetActualType();
                _promotionDecisions = BinaryNumericPromotionDecision.Decide(_leftType, _rightType);
                Type        = Node.GetBinaryOperationType(_promotionDecisions, _leftType);
                _emitAction = EmitBinaryExpression;
            }
            else
            {
                _emitAction = EmitTernaryConditionalExpression;
            }
        }
Example #32
0
 internal ConstructorEmitterVisitor(ConstructorDeclaration constructorDeclaration, IOpCodeIndexer instructionsIndexer)
 {
     _instructionsIndexer = instructionsIndexer;
     _constructorEmitter  = new ConstructorEmitter(this, instructionsIndexer, _locals);
     _root = constructorDeclaration;
 }
 internal NullReferenceEmitter(NullReferenceExpression nullReferenceExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer) {
     Type = null;
     _nullReferenceExpression = nullReferenceExpression;
 }
 internal TypeOfExpressionEmitter(TypeOfExpression typeOfExpression,
                                  ILGenerator ilGenerator,
                                  IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer) {
     _typeOfExpression = typeOfExpression;
 }
Example #35
0
 internal AbstractILEmitter(ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
 {
     ILGenerator         = ilGenerator;
     InstructionsIndexer = instructionsIndexer;
 }
 internal PrimitiveEmitter(PrimitiveExpression primitiveExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer)
 {
     PrimitiveExpression = primitiveExpression;
     Type = PrimitiveExpression.Value.GetType();
     PrimitiveInstruction = InstructionsIndexer.GetInstruction(PrimitiveExpression);
 }
Example #37
0
 internal DefaultValueEmitter(DefaultValueExpression defaultValueExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer)
 {
     _defaultValueExpression = defaultValueExpression;
 }
Example #38
0
 internal ArgumentReferenceEmitter(IdentifierExpression identifierExpression, ParameterDefinition parameterDefinition, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer)
 {
     _parameterDefinition  = parameterDefinition;
     _identifierExpression = identifierExpression;
     Type = parameterDefinition.ParameterType.GetActualType();
 }
 internal DefaultValueEmitter(DefaultValueExpression defaultValueExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer)
     : base(ilGenerator, instructionsIndexer) {
     _defaultValueExpression = defaultValueExpression;
 }
 internal LocalReferenceEmitter(IdentifierExpression identifierExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, List<LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer) {
     _identifierExpression = identifierExpression;
     _locals = locals;
 }
 internal ThisExpressionEmitter(ConstructorDeclaration constructorDeclaration, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor)
     : this(constructorDeclaration as AstNode, ilGenerator, instructionsIndexer, visitor)
 {
     Type = constructorDeclaration.Annotation <MethodReference>()
            .GetActualMethod <ConstructorInfo>()
            .DeclaringType;
 }
 internal ThisExpressionEmitter(ThisReferenceExpression thisReferenceExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor)
     : this(thisReferenceExpression as AstNode, ilGenerator, instructionsIndexer, visitor)
 {
     Type = thisReferenceExpression.Annotation <TypeInformation>().InferredType.GetActualType();
 }
 internal AbstractILEmitter(ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer) {
     ILGenerator = ilGenerator;
     InstructionsIndexer = instructionsIndexer;
 }