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); }