Ejemplo n.º 1
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilLocal <T> Local <T>(IHappilOperand <T> initialValue)
        {
            var local = new HappilLocal <T>(this);

            local.Assign(initialValue);
            return(local);
        }
Ejemplo n.º 2
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilOperand <TElement[]> NewArray <TElement>(IHappilOperand <int> length)
        {
            return(new HappilUnaryExpression <int, TElement[]>(
                       ownerMethod: null,
                       @operator: new UnaryOperators.OperatorNewArray <TElement>(),
                       operand: length));
        }
Ejemplo n.º 3
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <TReturn> Func <TArg1, TArg2, TReturn>(
            Expression <Func <T, Func <TArg1, TArg2, TReturn> > > member, IHappilOperand <TArg1> arg1, IHappilOperand <TArg2> arg2)
        {
            var method    = ValidateMemberIsMethodOfType(Helpers.ResolveMethodFromLambda(member));
            var @operator = new UnaryOperators.OperatorCall <T>(method, arg1, arg2);

            return(new HappilUnaryExpression <T, TReturn>(m_OwnerMethod, @operator, this));
        }
Ejemplo n.º 4
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <T> OrDefault(IHappilOperand <T> defaultValue)
        {
            return(new HappilBinaryExpression <T, T>(
                       OwnerMethod,
                       @operator: new BinaryOperators.OperatorNullCoalesce <T>(),
                       left: this,
                       right: defaultValue));
        }
Ejemplo n.º 5
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <TReturn> Func <TArg1, TArg2, TReturn>(
            Func <MethodInfo, bool> methodSelector,
            IHappilOperand <TArg1> arg1,
            IHappilOperand <TArg2> arg2)
        {
            var method = this.Members.SelectFuncs <TArg1, TArg2, TReturn>(methodSelector).Single();

            return(new HappilUnaryExpression <T, TReturn>(m_OwnerMethod, new UnaryOperators.OperatorCall <T>(method, arg1, arg2), this));
        }
Ejemplo n.º 6
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void RaiseEvent(IHappilMethodBodyBase m, IHappilOperand args)
        {
            using (CreateTypeTemplateScope())
            {
                m.If(m_BackingField.AsOperand <TypeTemplate.TEventHandler>() != m.Const <TypeTemplate.TEventHandler>(null)).Then(() => {
                    m_BackingField.AsOperand <TypeTemplate.TEventHandler>().Invoke(m.This <TypeTemplate.TBase>(), args);
                });
            }
        }
Ejemplo n.º 7
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilForeachDoSyntax <T> ForeachElementIn <T>(IHappilOperand <IEnumerable <T> > collection)
        {
            var element   = this.Local <T>();
            var statement = new ForeachStatement <T>(element);

            AddStatement(statement);
            statement.In(collection);

            return(statement);
        }
Ejemplo n.º 8
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void Void <TArg1, TArg2, TArg3>(
            Func <MethodInfo, bool> methodSelector,
            IHappilOperand <TArg1> arg1,
            IHappilOperand <TArg2> arg2,
            IHappilOperand <TArg3> arg3)
        {
            var method = this.Members.SelectVoids <TArg1, TArg2>(methodSelector).Single();

            StatementScope.Current.AddStatement(new CallStatement(this, method, arg1, arg2));
        }
Ejemplo n.º 9
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void Void <TArg1, TArg2, TArg3>(
            Expression <Func <T, Action <TArg1, TArg2, TArg3> > > member,
            IHappilOperand <TArg1> arg1,
            IHappilOperand <TArg2> arg2,
            IHappilOperand <TArg3> arg3)
        {
            var method = ValidateMemberIsMethodOfType(Helpers.ResolveMethodFromLambda(member));

            StatementScope.Current.AddStatement(new CallStatement(this, method, arg1, arg2, arg3));
        }
Ejemplo n.º 10
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilAssignable <TItem> Item <TIndex1, TIndex2, TItem>(IHappilOperand <TIndex1> indexArg1, IHappilOperand <TIndex2> indexArg2)
        {
            var indexerProperty = OperandType.GetProperty("Item", typeof(TItem), new[] { typeof(TIndex1), typeof(TIndex2) });

            if (indexerProperty == null)
            {
                throw new InvalidOperationException("Could not find indexer with specified types.");
            }

            return(new PropertyAccessOperand <TItem>(
                       target: this,
                       property: indexerProperty,
                       indexArguments: new IHappilOperand[] { indexArg1, indexArg2 }));
        }
Ejemplo n.º 11
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <T> Iif <T>(IHappilOperand <bool> condition, bool isTautology, IHappilOperand <T> onTrue, IHappilOperand <T> onFalse)
        {
            if (!isTautology)
            {
                return(new TernaryConditionalOperator <T>(condition, onTrue, onFalse));
            }
            else
            {
                var scope = StatementScope.Current;
                scope.Consume(condition);
                scope.Consume(onFalse);

                return((HappilOperand <T>)onTrue);
            }
        }
Ejemplo n.º 12
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilUnaryExpression(
            HappilMethod ownerMethod,
            IUnaryOperator <TOperand> @operator,
            IHappilOperand <TOperand> operand,
            UnaryOperatorPosition position = UnaryOperatorPosition.Prefix)
            : base(ownerMethod)
        {
            m_Operand  = operand;
            m_Operator = @operator;
            m_Position = position;

            var scope = StatementScope.Current;

            scope.Consume(operand as IHappilExpression);
            scope.RegisterExpressionStatement(this);
        }
Ejemplo n.º 13
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <T> Assign(IHappilOperand <T> value)
        {
            if (OperandType.IsValueType && value is IValueTypeInitializer && this is ICanEmitAddress)
            {
                ((IValueTypeInitializer)value).Target = this;
                return((HappilOperand <T>)value);
            }
            else
            {
                return(new HappilBinaryExpression <T, T>(
                           base.OwnerMethod,
                           @operator: new BinaryOperators.OperatorAssign <T>(),
                           left: this,
                           right: value));
            }
        }
Ejemplo n.º 14
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        internal protected void AddReturnStatement(IHappilOperand <TypeTemplate.TReturn> returnValue)
        {
            if (m_CurrentBodyDefinitionIndex > 0)
            {
                if (object.ReferenceEquals(m_ReturnValueLocal, null))
                {
                    m_ReturnValueLocal = this.Local <TypeTemplate.TReturn>();
                }

                m_ReturnValueLocal.Assign(returnValue.OrNullConstant());
            }
            else
            {
                //TODO: verify that current scope belongs to this method
                StatementScope.Current.AddStatement(new ReturnStatement <TypeTemplate.TReturn>(returnValue));
            }
        }
Ejemplo n.º 15
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        #region IHappilMethodBodyBase Members

        public IHappilIfBody If(IHappilOperand <bool> condition)
        {
            return(AddStatement(new IfStatement(condition)));
        }
Ejemplo n.º 16
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void Return(IHappilOperand <TypeTemplate.TReturn> operand)
        {
            AddReturnStatement(operand);
        }
Ejemplo n.º 17
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <TMethod> MakeDelegate <TTarget, TMethod>(IHappilOperand <TTarget> target, Expression <Func <TTarget, TMethod> > methodSelector)
        {
            var method = Helpers.ResolveMethodFromLambda(methodSelector);

            return(new HappilDelegate <TMethod>(target, method));
        }
Ejemplo n.º 18
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void RaiseEvent(string eventName, IHappilOperand <EventArgs> eventArgs)
        {
            var eventMember = m_HappilClass.FindMember <HappilEvent>(eventName);

            eventMember.RaiseEvent(this, eventArgs);
        }
Ejemplo n.º 19
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void Return(IHappilOperand <TypeTemplate.TReturn> operand)
        {
            m_OwnerMethod.AddReturnStatement(operand);
        }
Ejemplo n.º 20
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilForShortSyntax For(IHappilOperand <int> from, HappilConstant <int> to, int increment = 1)
        {
            return(new HappilForShortSyntax(m_OwnerMethod, from.CastTo <int>(), to, increment));
        }
Ejemplo n.º 21
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilSwitchSyntax <T> Switch <T>(IHappilOperand <T> value)
        {
            return(AddStatement(new SwitchStatement <T>(value)));
        }
Ejemplo n.º 22
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilLockSyntax Lock(IHappilOperand <object> syncRoot, int millisecondsTimeout)
        {
            return(AddStatement(new LockStatement(syncRoot, millisecondsTimeout)));
        }
Ejemplo n.º 23
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilUsingSyntax Using(IHappilOperand <IDisposable> disposable)
        {
            return(AddStatement(new UsingStatement(disposable)));
        }
Ejemplo n.º 24
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <TReturn> Func <TArg1, TReturn>(MethodInfo method, IHappilOperand <TArg1> arg1)
        {
            ValidateMemberIsMethodOfType(method);
            return(new HappilUnaryExpression <T, TReturn>(m_OwnerMethod, new UnaryOperators.OperatorCall <T>(method, arg1), this));
        }
Ejemplo n.º 25
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilForShortSyntax For(IHappilOperand <int> from, IHappilOperand <int> to, int increment = 1)
        {
            return(new HappilForShortSyntax(this, from.CastTo <int>(), to.CastTo <int>(), increment));
        }
Ejemplo n.º 26
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        private HappilOperand <T> CreateUnaryExpression <T>(IUnaryOperator <T> @operator, IHappilOperand <T> operand)
        {
            return(new HappilUnaryExpression <T, T>(
                       ownerMethod: null,
                       @operator: @operator,
                       operand: operand));
        }
Ejemplo n.º 27
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilOperand <T> Iif <T>(IHappilOperand <bool> condition, IHappilOperand <T> onTrue, IHappilOperand <T> onFalse)
        {
            return(new TernaryConditionalOperator <T>(condition, onTrue, onFalse));
        }
Ejemplo n.º 28
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public void Void <TArg1>(MethodInfo method, IHappilOperand <TArg1> arg1)
        {
            ValidateMemberIsMethodOfType(method);
            StatementScope.Current.AddStatement(new CallStatement(this, method, arg1));
        }
Ejemplo n.º 29
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilIfBody If(IHappilOperand <bool> condition, bool isTautology)
        {
            return(AddStatement(new IfStatement(condition, isTautology)));
        }
Ejemplo n.º 30
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilWhileSyntax While(IHappilOperand <bool> condition)
        {
            return(AddStatement(new WhileStatement(condition)));
        }