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; }
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) { }
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; }
internal MethodReferenceReflectionEmitter(InvocationExpression invocationExpression, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor, List <LocalBuilder> locals) : base(invocationExpression, ilGenerator, instructionsIndexer, visitor, locals) { }
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) { }
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(); }
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) { }
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; }
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); }
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; } }
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 AbstractILEmitter(ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer) { ILGenerator = ilGenerator; InstructionsIndexer = instructionsIndexer; }
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(); }