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; }
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); }
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); }
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); } } } }
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); }
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"); } //================================================== }
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(); }