Ejemplo n.º 1
0
 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')");
 }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
            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();
                    }
                }
            }
Ejemplo n.º 5
0
 public static void UsingTick(this JsEnv jsEnv)
 {
     jsEnv.UsingFunc <Tick>();
 }