public MethodContext(ClassContext fileContext, string name) { ClassContext = fileContext; EmitContext = new EmitMethodContext(); Name = name; Symbols = fileContext.Symbols.Push(name); }
public bool CompileBody(bool isStatic) { if (Count == 0) { return(true); } TypeBuilder classBuilder = ClassContext.ClassSymbol.ClassBuilder; if (ClassContext.InitMemberValueMethod == null) { string initMemberValueMethodName = "__InitMemberValueMethod"; if (isStatic) { ClassContext.InitMemberValueMethod = classBuilder.DefineMethod(initMemberValueMethodName, MethodAttributes.Private | MethodAttributes.Static, typeof(void), new Type[] { }); } else { ClassContext.InitMemberValueMethod = classBuilder.DefineMethod(initMemberValueMethodName, MethodAttributes.Private, typeof(void), new Type[] { }); } } EmitMethodContext context = new EmitMethodContext(); context.ClassContext = ClassContext.EmitContext;; context.SetBuilder(ClassContext.InitMemberValueMethod); EmitStmtContext stmtContext = new EmitStmtContext(context); EmitExpContext expContext = new EmitExpContext(stmtContext); var il = ClassContext.InitMemberValueMethod.GetILGenerator(); foreach (var ppt in PropertyList) { ppt.GenerateBody(expContext); } il.Emit(OpCodes.Ret); return(true); }