当前位置: 首页>>代码示例>>C#>>正文


C# Emitter.EmitSaveField方法代码示例

本文整理汇总了C#中Emitter.EmitSaveField方法的典型用法代码示例。如果您正苦于以下问题:C# Emitter.EmitSaveField方法的具体用法?C# Emitter.EmitSaveField怎么用?C# Emitter.EmitSaveField使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Emitter的用法示例。


在下文中一共展示了Emitter.EmitSaveField方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Compile

        public override void Compile(Emitter.Emitter emitter)
        {
            try
              {
            Resolve(emitter);

            if (!emitter.TypeIsParent(IdentifierType, Expression.GetExpressionType(emitter)))
              Error(String.Format(Resources.errAssignTypeMismatch, Expression.GetExpressionType(emitter), IdentifierType));
              }
              catch(CompilerException ex)
              {
            ex.AffixToLexem(Lexem);
            throw;
              }

              switch (Kind)
              {

            case IdentifierKind.StaticField:  Expression.Compile(emitter);
                                          emitter.EmitSaveField(emitter.FindField(OwnerType, Name)); break;

            case IdentifierKind.Field:        if (ExpressionPrefix != null)
                                            ExpressionPrefix.Compile(emitter);
                                          else
                                            emitter.EmitLoadThis();
                                          Expression.Compile(emitter);
                                          emitter.EmitSaveField(emitter.FindField(OwnerType, Name)); break;

            case IdentifierKind.Variable:     Expression.Compile(emitter);
                                          emitter.EmitSaveVariable(emitter.CurrentMethod.Scope.Find(Name)); break;

            case IdentifierKind.Parameter:    Expression.Compile(emitter);
                                          emitter.EmitSaveParameter(emitter.CurrentMethod.Parameters[Name].Id); break;
              }
        }
开发者ID:menozz,项目名称:mirelle,代码行数:35,代码来源:IdentifierSetNode.cs

示例2: Compile

        public override void Compile(Emitter.Emitter emitter)
        {
            if(Expression != null)
              {
            try
            {
              emitter.CurrentMethod = emitter.CurrentType.Methods[(Static ? ".cctor" : ".init")][0];
            }
            catch
            {
              emitter.CurrentMethod = Static ? emitter.CreateStaticCtor(emitter.CurrentType, true) : emitter.CreateInitializer(emitter.CurrentType, true);
            }

            if (!Static)
              emitter.EmitLoadThis();

            Expression.Compile(emitter);
            emitter.EmitSaveField(this);

            emitter.CurrentMethod = null;
              }
        }
开发者ID:menozz,项目名称:mirelle,代码行数:22,代码来源:FieldNode.cs

示例3: SaveClosuredVariables

        /// <summary>
        /// Emit code for saving local variables into fields
        /// </summary>
        private void SaveClosuredVariables(Emitter.Emitter emitter, Utils.ScopeVariable variable)
        {
            foreach (var curr in Closures)
              {
            emitter.EmitLoadVariable(variable);

            // load variable
            var currVar = emitter.CurrentMethod.Scope.Find(curr.Key);
            emitter.EmitLoadVariable(currVar);

            // save into field
            var currField = emitter.FindField(PlannerID, "_" + curr.Key);
            emitter.EmitSaveField(currField);
              }
        }
开发者ID:menozz,项目名称:mirelle,代码行数:18,代码来源:SimulatePlannerNode.cs

示例4: CompileInitiation

        /// <summary>
        /// Generate code to setup the currently defined emitter
        /// </summary>
        /// <param name="emitter"></param>
        private void CompileInitiation(Emitter.Emitter emitter)
        {
            var emitterType = emitter.FindType(EmitterID);
              var tmpVar = emitter.CurrentMethod.Scope.Introduce(EmitterID, emitterType.Type);

              // tmp = new emitterN()
              emitter.EmitNewObj(emitter.FindMethod(EmitterID, ".ctor"));
              emitter.EmitSaveVariable(tmpVar);

              // step
              if (Step != null)
              {
            // validate step
            var stepType = Step.GetExpressionType(emitter);
            if (!stepType.IsAnyOf("int", "float"))
              Error(Resources.errEmitStepExpected);

            // tmp.Step = step
            emitter.EmitLoadVariable(tmpVar);
            Step.Compile(emitter);
            if (stepType == "int")
              emitter.EmitConvertToFloat();
            emitter.EmitSaveField(emitter.FindField(EmitterID, "step"));
              }

              // distribution
              if (Distribution != null)
              {
            // validate distr
            if (Distribution.GetExpressionType(emitter) != "distr")
              Error(Resources.errEmitDistributionExpected);

            // tmp.Distr = distr
            emitter.EmitLoadVariable(tmpVar);
            Distribution.Compile(emitter);
            emitter.EmitSaveField(emitter.FindField(EmitterID, "distr"));
              }

              // limit
              if (Limit != null)
              {
            // validate distr
            if (Limit.GetExpressionType(emitter) != "int")
              Error(Resources.errEmitLimitExpected);

            // tmp.Distr = distr
            emitter.EmitLoadVariable(tmpVar);
            Limit.Compile(emitter);
            emitter.EmitSaveField(emitter.FindField(EmitterID, "limit"));
              }

              SaveClosuredVariables(emitter, tmpVar);

              // register emitter in the system
              emitter.EmitLoadVariable(tmpVar);
              var registerMethod = emitter.AssemblyImport(typeof(Simulation).GetMethod("RegisterEmitter", new[] { typeof(EventEmitter) }));
              emitter.EmitCall(registerMethod);
        }
开发者ID:menozz,项目名称:mirelle,代码行数:62,代码来源:EmitNode.cs


注:本文中的Emitter.EmitSaveField方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。