Example #1
0
        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;
              }
        }