示例#1
0
        private void AddReferencedVariable(MemberElement previous)
        {
            if ((previous != null))
            {
                return;
            }

            if ((_myVariableType != null) || MyOptions.IsOwnerType(this.MemberOwnerType) == true)
            {
                ExpressionInfo info = (ExpressionInfo)MyServices.GetService(typeof(ExpressionInfo));
                info.AddReferencedVariable(MyName);
            }
        }
示例#2
0
        private void EmitFirst(FleeILGenerator ilg)
        {
            if ((MyPrevious != null))
            {
                return;
            }

            bool isVariable = (_myVariableType != null);

            if (isVariable == true)
            {
                // Load variables
                EmitLoadVariables(ilg);
            }
            else if (MyOptions.IsOwnerType(this.MemberOwnerType) == true & this.IsStatic == false)
            {
                this.EmitLoadOwner(ilg);
            }
        }
示例#3
0
        public override void Emit(FleeILGenerator ilg, IServiceProvider services)
        {
            base.Emit(ilg, services);

            ExpressionElement[] elements = _myArguments.ToArray();

            // If we are an on-demand function, then emit that and exit
            if ((_myOnDemandFunctionReturnType != null))
            {
                this.EmitOnDemandFunction(elements, ilg, services);
                return;
            }

            bool isOwnerMember = MyOptions.IsOwnerType(this.Method.ReflectedType);

            // Load the owner if required
            if (MyPrevious == null && isOwnerMember == true && this.IsStatic == false)
            {
                this.EmitLoadOwner(ilg);
            }

            this.EmitFunctionCall(this.NextRequiresAddress, ilg, services);
        }