Exemple #1
0
        public override mdr.DFunctionCode.JittedMethod EndJittedMethod(JSFunctionMetadata funcMetadata, mdr.DFunctionCode funcInst)
        {
            if (funcMetadata.Scope.IsEvalFunction)
            {
                _asm.Init.WriteLine("/***** eval result *****"); //We still want to see them in the output
            }
            var instMethodName = string.Format("{0}_inst", MethodName);

            _asm.Init.WriteLine("\t\t\t{");
            _asm.Init.WriteLine("\t\t\t\tauto funcMD = {0}; //{1}", FuncDefPath(funcMetadata), funcMetadata.FullName);
            _asm.Init.WriteLine("\t\t\t\tauto funcSignature = mdr::DFunctionSignature(gcnew array<mdr::ValueTypes> {{ {1} }});", instMethodName, string.Join(", ", funcInst.Signature.Types.Select(t => string.Format("mdr::ValueTypes::{0}", t)).ToArray()));
            _asm.Init.WriteLine("\t\t\t\tauto {0} = gcnew mjr::JSFunctionCode(funcMD, funcSignature);", instMethodName);
            _asm.Init.WriteLine("\t\t\t\t{0}->Method = gcnew mdr::DFunctionCode::JittedMethod(&{1});", instMethodName, MethodName);
            //_asm.InitCache.WriteLine("\t\t\t\t{0}->SignatureMask.Value = {1};", instMethodName, funcInst.SignatureMask.Value);
            //_asm.InitCache.WriteLine("\t\t\t\t{0}->Signature = mdr::DFunctionSignature(gcnew array<mdr::ValueTypes> {{ {1} }});", instMethodName, string.Join(", ", funcInst.Signature.Types.Select(t => string.Format("mdr::ValueTypes::{0}", t)).ToArray()));
            _asm.Init.WriteLine("\t\t\t\tfuncMD->Cache->Add({0});", instMethodName);
            _asm.Init.WriteLine("\t\t\t\tfor (auto i = 0; i < funcMD->Scope->Symbols->Count; ++i) funcMD->Scope->Symbols[i]->AssignFieldId();");
            _asm.Init.WriteLine("\t\t\t}");

            if (funcMetadata.Scope.IsEvalFunction)
            {
                _asm.Init.WriteLine("***** eval result *****/");
            }

            return(base.EndJittedMethod(funcMetadata, funcInst));
        }
        public virtual mdr.DFunctionCode.JittedMethod EndJittedMethod(JSFunctionMetadata funcMetadata, mdr.DFunctionCode funcInst)
        {
            var timer =
                JSRuntime.Instance.Configuration.ProfileFunctionTime
        ? JSRuntime.StartTimer(JSRuntime.Instance.Configuration.ProfileJitTime, "JS/Jit/Clr" + funcMetadata.Declaration)
        : JSRuntime.StartTimer(JSRuntime.Instance.Configuration.ProfileJitTime, "JS/Jit/Clr");
            Delegate md;

            try
            {
                md = EndMethod(typeof(mdr.DFunctionCode.JittedMethod));
            }
            finally
            {
                JSRuntime.StopTimer(timer);
            }

            return((mdr.DFunctionCode.JittedMethod)md);
        }