Exemplo n.º 1
0
        public override void Evaluate()
        {
            var stub = SymbolTable.ReplacedByStubs.Contains(Target) ||
                       _function.DeclaringModule.ModuleType == ModuleType.Stub ||
                       Module.ModuleType == ModuleType.Specialized;

            using (Eval.OpenScope(_function.DeclaringModule, FunctionDefinition, out _)) {
                // Process annotations.
                var annotationType = Eval.GetTypeFromAnnotation(FunctionDefinition.ReturnAnnotation);
                if (!annotationType.IsUnknown())
                {
                    // Annotations are typically types while actually functions return
                    // instances unless specifically annotated to a type such as Type[T].
                    var instance = annotationType.CreateInstance(annotationType.Name, ArgumentSet.Empty);
                    _overload.SetReturnValue(instance, true);
                }
                else
                {
                    // Check if function is a generator
                    var suite     = FunctionDefinition.Body as SuiteStatement;
                    var yieldExpr = suite?.Statements.OfType <ExpressionStatement>().Select(s => s.Expression as YieldExpression).ExcludeDefault().FirstOrDefault();
                    if (yieldExpr != null)
                    {
                        // Function return is an iterator
                        var yieldValue  = Eval.GetValueFromExpression(yieldExpr.Expression) ?? Eval.UnknownType;
                        var returnValue = new PythonGenerator(Eval.Interpreter, yieldValue);
                        _overload.SetReturnValue(returnValue, true);
                    }
                }

                DeclareParameters(!stub);

                // Do process body of constructors since they may be declaring
                // variables that are later used to determine return type of other
                // methods and properties.
                var ctor = _function.Name.EqualsOrdinal("__init__") || _function.Name.EqualsOrdinal("__new__");
                if (ctor || annotationType.IsUnknown() || Module.ModuleType == ModuleType.User)
                {
                    // Return type from the annotation is sufficient for libraries and stubs, no need to walk the body.
                    FunctionDefinition.Body?.Walk(this);
                    // For libraries remove declared local function variables to free up some memory.
                    var optionsProvider = Eval.Services.GetService <IAnalysisOptionsProvider>();
                    if (Module.ModuleType != ModuleType.User && optionsProvider?.Options.KeepLibraryLocalVariables != true)
                    {
                        ((VariableCollection)Eval.CurrentScope.Variables).Clear();
                    }
                }
            }
            Result = _function;
        }
Exemplo n.º 2
0
        private IEnumerator ShowProcess()
        {
            TitleProcess titleProcess = this;

            yield return(new WaitForSeconds(0.5f));

            Thread thread = titleProcess.CopyProcess();

            thread.Start();
            yield return(new WaitWhile(() => thread.IsAlive));

            if (FizzleSettings.CommandArgs.ContainsKey("skiplogo"))
            {
                yield return(SceneManager.LoadSceneAsync(1));
            }
            else
            {
                titleProcess.subtitle = PythonGenerator.LoadYaml("~/Text/subtitle.yml");
                yield return(titleProcess.blackObj.FadeIn());

                yield return(new WaitForSeconds(4.0F));

                yield return(titleProcess.blackObj.FadeOut());

                DestroyImmediate(titleProcess.splashObj);
                titleProcess.loadingObj.transform.Find("loading tip").GetComponent <Text>().text = titleProcess.subtitle["loading-tip"].ToString();
                Image loadingImage = titleProcess.loadingObj.transform.Find("loading image").GetComponent <Image>();
                Text  loadingText  = titleProcess.loadingObj.transform.Find("loading text").GetComponent <Text>();
                yield return(new WaitForSeconds(0.5F));

                yield return(titleProcess.blackObj.FadeIn());

                yield return(new WaitForSeconds(4.0F));

                loadingText.text = titleProcess.subtitle["loading-text"].ToString();
                titleProcess.StartCoroutine(titleProcess.ShowAnimation(loadingImage));
                AsyncOperation result = SceneManager.LoadSceneAsync(1);
                result.allowSceneActivation = false;
                yield return(new WaitUntil(() => result.progress >= 0.85F));

                yield return(new WaitForSeconds(5.0F));

                yield return(titleProcess.blackObj.FadeOut());

                yield return(new WaitForSeconds(0.6F));

                result.allowSceneActivation = true;
            }
        }
        public Generator(Database database)
        {
            _database = database;

            _sqlGenerator             = new SqlGenerator(_database);
            _phpGenerator             = new PhpGenerator(_database);
            _typescriptGenerator      = new TypescriptGenerator(_database);
            _notificationSystem       = new NotificationSystem();
            _cSharpGenerator          = new CSharpGenerator(_database);
            _documentationGenerator   = new DocumentationGenerator(_database);
            _javaGenerator            = new JavaGenerator(_database);
            _pythonGenerator          = new PythonGenerator(_database);
            _generatorConfigGenerator = new GeneratorConfigGenerator(_database);
            _authenticationSystem     = new AuthenticationSystem(_database);
        }
Exemplo n.º 4
0
        internal static List <KeyValuePair <string, string> > LoadSceneInfo(string path, out string levelId)
        {
            FizzleJson fizzleJson1 = PythonGenerator.LoadYaml(path + "/level-info.yml");

            Directory.SetCurrentDirectory(new DirectoryInfo(CommonTools.ConvertPath(path)).FullName);
            levelId = fizzleJson1["level-id"].ToString();
            if (levelId == "official")
            {
                levelId = "official0";
            }
            FizzleJson fizzleJson2 = fizzleJson1["level-mapping"];
            List <KeyValuePair <string, string> > keyValuePairList2 = new List <KeyValuePair <string, string> >(fizzleJson2.Count());

            keyValuePairList2.AddRange(InternalLoadSceneInfo(fizzleJson2).CreateEnumerable());
            return(keyValuePairList2);
        }
Exemplo n.º 5
0
        public override async Task EvaluateAsync(CancellationToken cancellationToken = default)
        {
            if (SymbolTable.ReplacedByStubs.Contains(Target))
            {
                return;
            }

            cancellationToken.ThrowIfCancellationRequested();
            // Process annotations.
            var annotationType = await Eval.GetTypeFromAnnotationAsync(FunctionDefinition.ReturnAnnotation, cancellationToken);

            if (!annotationType.IsUnknown())
            {
                // Annotations are typically types while actually functions return
                // instances unless specifically annotated to a type such as Type[T].
                var instance = annotationType.CreateInstance(annotationType.Name, Eval.GetLoc(FunctionDefinition), ArgumentSet.Empty);
                _overload.SetReturnValue(instance, true);
            }
            else
            {
                // Check if function is a generator
                var suite     = FunctionDefinition.Body as SuiteStatement;
                var yieldExpr = suite?.Statements.OfType <ExpressionStatement>().Select(s => s.Expression as YieldExpression).ExcludeDefault().FirstOrDefault();
                if (yieldExpr != null)
                {
                    // Function return is an iterator
                    var yieldValue = await Eval.GetValueFromExpressionAsync(yieldExpr.Expression, cancellationToken) ?? Eval.UnknownType;

                    var returnValue = new PythonGenerator(Eval.Interpreter, yieldValue);
                    _overload.SetReturnValue(returnValue, true);
                }
            }

            using (Eval.OpenScope(FunctionDefinition, out _)) {
                await DeclareParametersAsync(cancellationToken);

                if (annotationType.IsUnknown() || Module.ModuleType == ModuleType.User)
                {
                    // Return type from the annotation is sufficient for libraries
                    // and stubs, no need to walk the body.
                    if (FunctionDefinition.Body != null && Module.ModuleType != ModuleType.Specialized)
                    {
                        await FunctionDefinition.Body.WalkAsync(this, cancellationToken);
                    }
                }
            }
        }
Exemplo n.º 6
0
        public void GenerateExampleApiSuccess()
        {
            ServiceInfo  service;
            const string fileName = "Facility.CodeGen.Python.UnitTests.ConformanceApi.fsd";
            var          parser   = new FsdParser();
            var          stream   = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName);

            Assert.IsNotNull(stream);
            using (var reader = new StreamReader(stream !))
                service = parser.ParseDefinition(new ServiceDefinitionText(Path.GetFileName(fileName), reader.ReadToEnd()));

            var generator = new PythonGenerator
            {
                GeneratorName = "PythonGeneratorTests",
            };

            generator.GenerateOutput(service);
        }
Exemplo n.º 7
0
        public static void Main()
        {
            // Python エンジンを生成
            ScriptEngine engine = Python.CreateEngine();



            // 其の壱 : スクリプトを丸々実行する
            //==================================================

            {
                Console.WriteLine("[ 其の壱 : スクリプトを丸々実行する ]\n");

                // スコープとソースを生成
                ScriptScope  scope1  = engine.CreateScope();
                ScriptSource source1 = engine.CreateScriptSourceFromFile("script1.py");

                // スクリプトの実行
                source1.Execute(scope1);

                Console.WriteLine("\n\n");
            }

            //==================================================



            // 其の弐 : 変数の受け渡し
            //==================================================

            {
                Console.WriteLine("[ 其の弐(壱) : IronPythonで定義された変数をC#で取得する ]\n");

                // スコープとソースを生成
                ScriptScope  scope2_1  = engine.CreateScope();
                ScriptSource source2_1 = engine.CreateScriptSourceFromFile("script2-1.py");

                // スクリプトの実行(読み込み)
                source2_1.Execute(scope2_1);

                // グローバル変数の読み出し
                Console.WriteLine("number = " + scope2_1.GetVariable("number"));
                Console.WriteLine("string = " + scope2_1.GetVariable("string"));
                Console.WriteLine("boolean = " + scope2_1.GetVariable("boolean"));

                Console.WriteLine("\n\n");
            }

            {
                Console.WriteLine("[ 其の弐(弐) : C#で設定された変数をIronPythonで使用する ]\n");

                // スコープとソースを生成
                ScriptScope  scope2_2  = engine.CreateScope();
                ScriptSource source2_2 = engine.CreateScriptSourceFromFile("script2-2.py");

                // グローバル変数の設定
                scope2_2.SetVariable("number", 3.1415925);
                scope2_2.SetVariable("string", "This is a iron python script.");
                scope2_2.SetVariable("boolean", true);

                // スクリプトの実行
                source2_2.Execute(scope2_2);

                Console.WriteLine("\n\n");
            }

            //==================================================



            // 其の参 : 関数の受け渡し
            //==================================================

            {
                Console.WriteLine("[ 其の参(壱) : IronPythonで定義された関数をC#で使用する ]\n");

                // スコープとソースを生成
                ScriptScope  scope3_1  = engine.CreateScope();
                ScriptSource source3_1 = engine.CreateScriptSourceFromFile("script3-1.py");

                // スクリプトの実行(読み込み)
                source3_1.Execute(scope3_1);

                // 戻り値の持たない関数の実行
                Action print_something = scope3_1.GetVariable("print_something");
                print_something();

                // 戻り値をもつ関数の実行
                Func <string> return_something = scope3_1.GetVariable("return_something");
                Console.WriteLine(return_something());

                Console.WriteLine("\n\n");
            }

            {
                Console.WriteLine("[ 其の参(弐) : C#で定義された関数をIronPythonで使用する ]\n");

                // スコープとソースを生成
                ScriptScope  scope3_2  = engine.CreateScope();
                ScriptSource source3_2 = engine.CreateScriptSourceFromFile("script3-2.py");

                // 戻り値の持たない関数の設定
                scope3_2.SetVariable("print_something", new Action(PrintSomething));

                // 戻り値をもつ関数の設定
                scope3_2.SetVariable("return_something", new Func <string>(ReturnSomething));

                // スクリプトの実行
                source3_2.Execute(scope3_2);

                Console.WriteLine("\n\n");
            }

            //==================================================



            // 其の肆 : C#で作成されたインスタンスをIronPythonで使用する
            //==================================================

            {
                Console.WriteLine("[ 其の肆 : C#で作成されたインスタンスをIronPythonで使用する ]\n");

                // スコープとソースを生成
                ScriptScope  scope4  = engine.CreateScope();
                ScriptSource source4 = engine.CreateScriptSourceFromFile("script4.py");

                // SomeObjectクラスのインスタンスの作成
                SomeObject obj = new SomeObject();

                // グローバル変数の設定
                scope4.SetVariable("some_object", obj);

                // スクリプトの実行
                source4.Execute(scope4);

                // インスタンスのメンバ変数の値を確認
                Console.WriteLine(obj.Message);

                Console.WriteLine("\n\n");
            }

            //==================================================



            // 其の伍 : コルーチンを使う
            //==================================================

            {
                Console.WriteLine("[ 其の伍 : コルーチンを使う ]\n");

                // スコープとソースを生成
                ScriptScope  scope5  = engine.CreateScope();
                ScriptSource source5 = engine.CreateScriptSourceFromFile("script5.py");

                // スクリプトの実行
                source5.Execute(scope5);

                // コルーチンの読み出し・実行
                Func <PythonGenerator> coroutine = scope5.GetVariable("coroutine");
                PythonGenerator        generator = coroutine();
                generator.next();
                generator.next();
                generator.next();

                Console.WriteLine("\n\n");
            }

            //==================================================
        }
Exemplo n.º 8
0
        public static void PerformModelGenerate(TargetLanguage targetLanguage, TargetDatabaseConnector targetDatabaseConnector, string connectionString, string directory, string @namespace)
        {
            IModelGenerator generator = default;

            switch (targetLanguage)
            {
            case TargetLanguage.CSharp:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new CSharpGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new CSharpGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new CSharpGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new CSharpGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new CSharpGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.VisualBasic:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new VisualBasicGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new VisualBasicGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new VisualBasicGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new VisualBasicGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new VisualBasicGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.TypeScript:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new TypeScriptGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new TypeScriptGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new TypeScriptGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new TypeScriptGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new TypeScriptGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.PHP:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new PHPGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new PHPGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new PHPGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new PHPGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new PHPGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.Python:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new PythonGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new PythonGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new PythonGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new PythonGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new PythonGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.Python37:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new Python37Generator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new Python37Generator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new Python37Generator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new Python37Generator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new Python37Generator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.Java:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new JavaGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new JavaGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new JavaGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new JavaGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new JavaGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.CPP:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new CPPGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new CPPGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new CPPGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new CPPGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new CPPGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;

            case TargetLanguage.Golang:
                switch (targetDatabaseConnector)
                {
                case TargetDatabaseConnector.SQLServer:
                    generator = new GolangGenerator <SqlConnection, SqlParameter>(connectionString, directory, @namespace, x => $"[{x}]");
                    break;

                case TargetDatabaseConnector.Oracle:
                    generator = new GolangGenerator <OracleConnection, OracleParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.MySQL:
                    generator = new GolangGenerator <MySqlConnection, MySqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.PostgreSQL:
                    generator = new GolangGenerator <NpgsqlConnection, NpgsqlParameter>(connectionString, directory, @namespace);
                    break;

                case TargetDatabaseConnector.SQLite:
                    generator = new GolangGenerator <SQLiteConnection, SQLiteParameter>(connectionString, directory, @namespace);
                    break;
                }
                break;
            }
            generator.Generate();
        }