Example #1
0
 protected virtual void EmitLocalVar(ILGenerator IL, List <ZCLocalVar> localList)
 {
     BuilderUtil.EmitLocalVar(this.GetContextProc(), this.ClassContext.IsStatic(), IL, localList);
     //localList.Reverse();
     //for (int i = 0; i < localList.Count; i++)
     //{
     //    ZCLocalVar varSymbol = localList[i];
     //    varSymbol.VarBuilder = IL.DeclareLocal(ZTypeUtil.GetTypeOrBuilder(varSymbol.GetZType()));
     //    varSymbol.VarBuilder.SetLocalSymInfo(varSymbol.ZName);
     //}
     //for (int i = 0; i < localList.Count; i++)
     //{
     //    ZCLocalVar varSymbol = localList[i];
     //    if(varSymbol.IsNestedClassInstance)
     //    {
     //        LocalBuilder lanmbdaLocalBuilder = this.GetContextProc().NestedInstance.VarBuilder;
     //        ConstructorBuilder newBuilder = this.GetContextProc().GetNestedClassContext().DefaultConstructorBuilder;
     //         IL.Emit(OpCodes.Newobj, newBuilder);
     //        EmitHelper.StormVar(IL, lanmbdaLocalBuilder);
     //        if(! this.ClassContext.IsStatic() )
     //        {
     //            ILGeneratorUtil.LoadLocal(IL, lanmbdaLocalBuilder);
     //            IL.Emit(OpCodes.Ldarg_0);
     //            EmitSymbolHelper.EmitStorm(IL, this.GetContextProc().GetNestedClassContext().MasterClassField);
     //        }
     //    }
     //}
 }
Example #2
0
        public void EmitBody()
        {
            var IL = this.NestedMethodContext.GetILGenerator();
            List <ZCLocalVar> localList = this.NestedMethodContext.LocalManager.LocalVarList;

            BuilderUtil.EmitLocalVar(NestedMethodContext, false, IL, localList);
            //EmitLocalVar(IL, localList);
            ActionExp.Emit();
            //if (!ZTypeUtil.IsVoid(this.RetZType))
            //{
            //    IL.Emit(OpCodes.Ldloc_0);
            //}
            if (this.RetSymbol == null)
            {
                if (!ZTypeUtil.IsVoid(this.ActionExp.RetType))
                {
                    IL.Emit(OpCodes.Pop);
                }
            }
            else
            {
                EmitHelper.StormVar(IL, this.RetSymbol.VarBuilder);
            }
            IL.Emit(OpCodes.Ret);
            //CreateNestedType();
        }