public override void Compile(Emitter.Emitter emitter) { if (!BuiltIn) { emitter.CurrentMethod = this; // special cases for constructors if(Name == ".ctor") { // invoke base constructor emitter.EmitLoadThis(); if(emitter.CurrentType.Parent != "") emitter.EmitCall(emitter.FindMethod(emitter.CurrentType.Parent, ".ctor")); else emitter.EmitCall(emitter.AssemblyImport(typeof(object).GetConstructor(new Type[] { } ))); // invoke initializer if (emitter.MethodNameExists(emitter.CurrentType.Name, ".init")) { emitter.EmitLoadThis(); emitter.EmitCall(emitter.FindMethod(emitter.CurrentType.Name, ".init")); } } Body.Compile(emitter); if (!Body.AllPathsReturn) { if (Type.Signature == "void") emitter.EmitReturn(); else Error(String.Format(Resources.errNotAllPathsReturn, Name)); } emitter.CurrentMethod = null; } }