public static void Init(JsEnv env) { if (isInit) { return; } isInit = true; jsEnv = env; jsEnv.UsingFunc <string, string, int, bool>(); jsEnv.UsingFunc <string, string, int, object[], object>(); jsEnv.Eval(@"require('hotfix')"); }
private ResultType Run <ResultType>(string code) { JsEnv jsEnv = new JsEnv(); jsEnv.UsingFunc <ResultType>(); jsEnv.Eval("global.CS = require('csharp'); global.PUERTS = require('puerts');"); Func <ResultType> func = jsEnv.Eval <Func <ResultType> >( string.Format("global.ret = {0}; function runner() {{ return global.ret; }}; runner;", code) ); for (var i = 0; i < PuertsPerformanceUtil.warmUpRepeatCount; i++) { func.Invoke(); } Measure .Method(() => { for (var i = 0; i < PuertsPerformanceUtil.repeatCount; i++) { func.Invoke(); } }) .WarmupCount(PuertsPerformanceUtil.warmUpCount) .MeasurementCount(PuertsPerformanceUtil.SampleCount) .Run(); return(func.Invoke()); }
public void RecursiveJSFunctionInvoke() { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.UsingFunc <int, int>(); int result = jsEnv.Eval <int>(@" const CS = require('csharp'); function fibonacci(num) { if (num == 0 || num == 1) { return num } return CS.Puerts.UnitTest.Util.InvokeJSFunctionIntInt(fibonacci, num - 1) + CS.Puerts.UnitTest.Util.InvokeJSFunctionIntInt(fibonacci, num - 2) } CS.Puerts.UnitTest.Util.InvokeJSFunctionIntInt(fibonacci, 6); "); Assert.AreEqual(8, result); }
public static void GenerateDTS(string saveTo, bool esmMode = false, ILoader loader = null) { if (Utils.filters == null) { Utils.filters = Configure.GetFilters(); configure = Configure.GetConfigureByTags(new List <string>() { "Puerts.BindingAttribute", "Puerts.BlittableCopyAttribute", "Puerts.TypingAttribute", }); genTypes = configure["Puerts.BindingAttribute"].Select(kv => kv.Key) .Where(o => o is Type) .Cast <Type>() .Where(t => !t.IsGenericTypeDefinition && !t.Name.StartsWith("<")) .Distinct() .ToList(); } var tsTypes = configure["Puerts.TypingAttribute"].Select(kv => kv.Key) .Where(o => o is Type) .Cast <Type>() .Where(t => !t.IsGenericTypeDefinition) .Concat(genTypes) .Distinct(); if (loader == null) { loader = new DefaultLoader(); } using (var jsEnv = new JsEnv(loader)) { jsEnv.UsingFunc <DTS.TypingGenInfo, bool, string>(); var typingRender = jsEnv.Eval <Func <DTS.TypingGenInfo, bool, string> >("require('puerts/templates/dts.tpl.cjs')"); using (StreamWriter textWriter = new StreamWriter(saveTo + "Typing/csharp/index.d.ts", false, Encoding.UTF8)) { string fileContext = typingRender(DTS.TypingGenInfo.FromTypes(tsTypes), esmMode); textWriter.Write(fileContext); textWriter.Flush(); } } }
public static void UsingTick(this JsEnv jsEnv) { jsEnv.UsingFunc <Tick>(); }