public void GenerateAssembly(string path)
 {
     _assemblyGen = new AssemblyGen("output", new CompilerOptions {
         OutputPath = path, SymbolInfo = true, TargetFrameworkName = "4.5", TargetFrameworkDisplayName = "4.5"
     });
     using (_assemblyGen.Namespace("Language"))
     {
         _currentProgram = _assemblyGen.Public.Class("Program");
         {
             Visit(_program);
         }
         var type = _currentProgram.GetCompletedType(true);
         _currentProgram = _assemblyGen.Public.Class("Runner");
         {
             CodeGen method = _currentProgram.Public.Static.Method(typeof(void), "Main");
             {
                 Operand obj = method.Local(_currentProgram.ExpressionFactory.New(type));
                 method.Invoke(obj, "main");
                 method.WriteLine("Press any key...");
                 method.Invoke(typeof(Console), "ReadKey");
             }
         }
     }
     _assemblyGen.Save();
 }
Esempio n. 2
0
        private static void CodeGen()
        {
            //Integer x = 0;
            var code     = ScriptParser.ParseProgram("source.fls");
            var assembly = new AssemblyGen("FluidTest", "1.0");

            code.Compile(assembly);
            assembly.Save("FluidTest.dll");
        }
Esempio n. 3
0
        public void GenerateCode()
        {
            _asm = new AssemblyGen(_moduleName);
            //LoadClasses(_root, _asm);
            LoadClassesExtends(_root, _asm);
            LoadClassesMethods(_root, _asm);
            _compilerLogger.PrintClassesMethods(_methodsTables);

            Generate(_root);

            _asm.Save();
        }
Esempio n. 4
0
        public void CreateComWrapper(string filePath, string dllPath, string p1, string p2)
        {
            AssemblyGen ag = new AssemblyGen(filePath);

            Assembly asm = Assembly.LoadFrom(dllPath);

            ag.Attribute(asm.GetType("WaveTech.Scutex.Model.LicenseAttribute"), p1, p2);

            ag.Attribute(typeof(System.Runtime.InteropServices.ComVisibleAttribute), true);
            ag.Attribute(typeof(System.Reflection.AssemblyVersionAttribute), "1.0.0.0");
            ag.Attribute(typeof(System.Reflection.AssemblyFileVersionAttribute), "1.0.0.0");
            ag.Attribute(typeof(System.Runtime.InteropServices.GuidAttribute), "DC7DE67E-EA7A-4D26-89FF-FECEF2937268");

            ag.Namespace("ScutexLicensingCCW");

            TypeGen ComWrapper = ag.Public.Class(_stringDataGeneratorProvider.GenerateRandomString(10, 50, false, false)).Attribute(typeof(System.Runtime.InteropServices.ClassInterfaceAttribute), System.Runtime.InteropServices.ClassInterfaceType.AutoDual);

            {
                CodeGen g1 = ComWrapper.Public.Constructor();

                CodeGen g2 = ComWrapper.Public.Method(typeof(int), "Validate").Parameter(typeof(int), "interactionMode");
                {
                    Operand licensingManager = g2.Local(Exp.New(asm.GetType("WaveTech.Scutex.Licensing.LicensingManager"), g2.This()));
                    Operand scutexLicensing  = g2.Local(asm.GetType("WaveTech.Scutex.Model.ScutexLicense"));

                    Operand value = g2.Local(asm.GetType("WaveTech.Scutex.Model.InteractionModes"));
                    g2.Assign(value, g2.Arg("interactionMode").Cast(asm.GetType("WaveTech.Scutex.Model.InteractionModes")));

                    g2.Assign(scutexLicensing, licensingManager.Invoke("Validate", value));

                    g2.Return(0);
                }

                CodeGen g3 = ComWrapper.Public.Method(typeof(int), "Register").Parameter(typeof(string), "licenseKey");
                {
                    Operand licensingManager = g3.Local(Exp.New(asm.GetType("WaveTech.Scutex.Licensing.LicensingManager"), g3.This()));
                    Operand scutexLicensing  = g3.Local(asm.GetType("WaveTech.Scutex.Model.ScutexLicense"));

                    g3.Assign(scutexLicensing, licensingManager.Invoke("Register", g3.Arg("licenseKey")));

                    g3.Return(0);
                }
            }

            ag.Save();
            asm = null;
        }
Esempio n. 5
0
        static void RunCodeGen()
        {
            var code     = ScriptParser.ParseProgram("source.fls");
            var assembly = new AssemblyGen("FluidTest", "1.0");

            code.Compile(assembly);
            assembly.Save("FluidTest.dll");
            if (assembly.Context.TryGetType("Sample", out Type type))
            {
                if (type is IType)
                {
                    type = type.ReflectedType;
                }
                object obj   = Activator.CreateInstance(type);
                Any    value = new Any(obj);
                var    res   = value.Invoke("create");
                Console.WriteLine(res);
            }
        }
Esempio n. 6
0
        public void CreateAssembly(string p1, string p2)
        {
            AssemblyGen ag = new AssemblyGen(_path + @"\DemoHost.exe");

            Assembly asm = Assembly.LoadFrom(_path + @"\WaveTech.Scutex.Licensing.dll");

            ag.Attribute(asm.GetType("WaveTech.Scutex.Model.LicenseAttribute"), p1, p2);

            TypeGen DemoHost = ag.Public.Class("DemoHost");

            {
                CodeGen g = DemoHost.Public.Static.Method(typeof(void), "Main");
                {
                    g.WriteLine("====================================================");
                    g.WriteLine("|                      SCUTEX                      |");
                    g.WriteLine("|         DEMO HOST FOR TRIAL DIALOG TESTING       |");
                    g.WriteLine("====================================================");
                    g.WriteLine("");
                    g.WriteLine("");
                    g.WriteLine("Your trial dialog or form should display in a few seconds...");

                    Operand licensingManager = g.Local(Exp.New(asm.GetType("WaveTech.Scutex.Licensing.LicensingManager")));

                    Operand value = g.Local(asm.GetType("WaveTech.Scutex.Model.InteractionModes"));

                    Operand value2 = g.Local(typeof(System.Int32));
                    g.Assign(value2, 1);

                    g.Assign(value, value2.Cast(asm.GetType("WaveTech.Scutex.Model.InteractionModes")));

                    Operand scutexLicensing = g.Local(asm.GetType("WaveTech.Scutex.Model.ScutexLicense"));

                    g.Assign(scutexLicensing, licensingManager.Invoke("Validate", value));

                    g.Return();
                }
            }

            ag.Save();
            asm = null;
        }
Esempio n. 7
0
        internal void Start()
        {
            assembly.Context.Register("Console", typeof(Console));
            // code.Compile(assembly);
            valueField = typeGen.DefineField("value", typeof(object), FieldAttributes.Private);
            valueField.SetCustomAttribute(typeof(DebuggerBrowsableAttribute), typeof(DebuggerBrowsableAttribute).GetInstanceCtor(typeof(DebuggerBrowsableState)), DebuggerBrowsableState.Never);
            // ctor
            var ctorParams = new ParameterInfo[] { new ParameterInfo("val", 0, typeof(object)) };
            ConstructorGenerator ctorGen = typeGen.DefineCtor(ctorParams, MethodAttributes.Public);

            ctorGen.SyntaxBody = new BlockStatement(new NodeList <Statement>
            {
                Expression.Assign(Expression.Member("value"), Expression.Parameter(ctorParams[0]))
            });

            EmitOpImplicit(typeGen);
            EmitOpAddition(typeGen);
            EmitToStringMethod();
            typeGen.CreateType();
            assembly.Save("FluidScript.Runtime.dll");
        }
Esempio n. 8
0
            /// <summary>
            /// Iterate over all loaded mods and emit new types
            /// </summary>
            void Awake()
            {
                // Generate overloaded PQSMod types
                AssemblyGen assembly = new AssemblyGen(Guid.NewGuid().ToString(),
                                                       new CompilerOptions {
                    OutputPath = Path.GetTempFileName()
                });

                List <Type> modTypes = GetModTypes();

                foreach (Type modType in modTypes)
                {
                    if (typeof(PQSMod).IsAssignableFrom(modType))
                    {
                        // Get the ModLoader type we want to extend
                        Type loaderType = modTypes.FirstOrDefault(t =>
                                                                  t.BaseType != null && t.BaseType.FullName != null &&
                                                                  t.BaseType.FullName.StartsWith("Kopernicus.Configuration.ModLoader.ModLoader") &&
                                                                  t.BaseType.GetGenericArguments()[0] == modType);
                        if (loaderType == null)
                        {
                            continue;
                        }

                        // Generate the Mod Type
                        TypeGen modGen = assembly.Public.Class($"{modType.Name}Regional", modType);
                        {
                            FieldGen multiplierMap  = modGen.Public.Field(typeof(MapSO), "multiplierMap");
                            FieldGen splitChannels  = modGen.Public.Field(typeof(Boolean), "splitChannels");
                            FieldGen multiplier     = modGen.Private.Field(typeof(Color), "multiplier");
                            FieldGen preBuildColor  = modGen.Private.Field(typeof(Color), "preBuildColor");
                            FieldGen preBuildHeight = modGen.Private.Field(typeof(Double), "preBuildHeight");

                            // OnVertexBuildHeight
                            CodeGen onVertexBuild = modGen.Public.Override.Method(typeof(void), "OnVertexBuild")
                                                    .Parameter(typeof(PQS.VertexBuildData), "data");
                            {
                                ContextualOperand data = onVertexBuild.Arg("data");
                                onVertexBuild.Assign(multiplier, onVertexBuild.Local(multiplierMap.Invoke(
                                                                                         "GetPixelColor", new TypeMapper(),
                                                                                         data.Field("u"), data.Field("v"))));
                                onVertexBuild.If(!splitChannels);
                                {
                                    onVertexBuild.Assign(multiplier.Field("a", new TypeMapper()),
                                                         multiplier.Field("r", new TypeMapper()));
                                }
                                onVertexBuild.End();
                                onVertexBuild.Assign(preBuildColor, data.Field("vertColor"));
                                onVertexBuild.Assign(preBuildHeight, data.Field("vertHeight"));
                                onVertexBuild.Invoke(onVertexBuild.Base(), "OnVertexBuild", data);
                                onVertexBuild.Assign(data.Field("vertColor"),
                                                     assembly.StaticFactory.Invoke(typeof(Color), "Lerp", preBuildColor,
                                                                                   data.Field("vertColor"), multiplier.Field("a", new TypeMapper())));
                                onVertexBuild.Assign(data.Field("vertHeight"),
                                                     assembly.StaticFactory.Invoke(typeof(UtilMath), "Lerp", preBuildHeight,
                                                                                   data.Field("vertHeight"), multiplier.Field("r", new TypeMapper())));
                            }

                            // OnVertexBuildHeight
                            CodeGen onVertexBuildHeight = modGen.Public.Override.Method(typeof(void), "OnVertexBuildHeight")
                                                          .Parameter(typeof(PQS.VertexBuildData), "data");
                            {
                                ContextualOperand data = onVertexBuildHeight.Arg("data");
                                onVertexBuildHeight.Assign(multiplier, onVertexBuildHeight.Local(multiplierMap.Invoke(
                                                                                                     "GetPixelColor", new TypeMapper(),
                                                                                                     data.Field("u"), data.Field("v"))));
                                onVertexBuildHeight.If(!splitChannels);
                                {
                                    onVertexBuildHeight.Assign(multiplier.Field("a", new TypeMapper()),
                                                               multiplier.Field("r", new TypeMapper()));
                                }
                                onVertexBuildHeight.End();
                                onVertexBuildHeight.Assign(preBuildColor, data.Field("vertColor"));
                                onVertexBuildHeight.Assign(preBuildHeight, data.Field("vertHeight"));
                                onVertexBuildHeight.Invoke(onVertexBuildHeight.Base(), "OnVertexBuildHeight", data);
                                onVertexBuildHeight.Assign(data.Field("vertColor"),
                                                           assembly.StaticFactory.Invoke(typeof(Color), "Lerp", preBuildColor,
                                                                                         data.Field("vertColor"), multiplier.Field("a", new TypeMapper())));
                                onVertexBuildHeight.Assign(data.Field("vertHeight"),
                                                           assembly.StaticFactory.Invoke(typeof(UtilMath), "Lerp", preBuildHeight,
                                                                                         data.Field("vertHeight"), multiplier.Field("r", new TypeMapper())));
                            }
                        }

                        // Generate the Loader Type
                        Type    modLoader = typeof(ModLoader <>).MakeGenericType(modGen);
                        TypeGen loaderGen =
                            assembly.Public.Class($"{modType.Name.Replace("PQSMod_", "").Replace("PQS", "")}Regional",
                                                  modLoader);
                        {
                            PropertyGen multiplierMap = loaderGen.Public.Property(typeof(MapSOParserRGB <MapSO>), "multiplierMap")
                                                        .Attribute(typeof(ParserTarget), "multiplierMap");
                            {
                                CodeGen getter = multiplierMap.Getter();
                                {
                                    getter.Return(getter.Base().Property("Mod").Field("multiplierMap"));
                                }
                                CodeGen setter = multiplierMap.Setter();
                                {
                                    setter.Assign(setter.Base().Property("Mod").Field("multiplierMap"),
                                                  setter.PropertyValue());
                                }
                            }

                            PropertyGen splitChannels = loaderGen.Public.Property(typeof(NumericParser <Boolean>), "splitChannels")
                                                        .Attribute(typeof(ParserTarget), "splitChannels");
                            {
                                CodeGen getter = splitChannels.Getter();
                                {
                                    getter.Return(getter.Base().Property("Mod").Field("splitChannels"));
                                }
                                CodeGen setter = splitChannels.Setter();
                                {
                                    setter.Assign(setter.Base().Property("Mod").Field("splitChannels"),
                                                  setter.PropertyValue());
                                }
                            }

                            FieldGen loader = loaderGen.Public.Field(loaderType, "loader")
                                              .BeginAttribute(typeof(ParserTarget), "Mod").SetField("AllowMerge", true).End();

                            CodeGen create_PQS = loaderGen.Public.Override.Method(typeof(void), "Create")
                                                 .Parameter(typeof(PQS), "pqsVersion");
                            {
                                ContextualOperand pqsVersion = create_PQS.Arg("pqsVersion");
                                create_PQS.Invoke(create_PQS.Base(), "Create", pqsVersion);
                                create_PQS.Assign(loader, assembly.ExpressionFactory.New(loaderType));
                                create_PQS.Invoke(loader, "Create", create_PQS.Base().Property("Mod"), pqsVersion);
                            }
                            CodeGen create_Mod_PQS = loaderGen.Public.Override.Method(typeof(void), "Create")
                                                     .Parameter(modGen, "_mod")
                                                     .Parameter(typeof(PQS), "pqsVersion");
                            {
                                ContextualOperand _mod       = create_Mod_PQS.Arg("_mod");
                                ContextualOperand pqsVersion = create_Mod_PQS.Arg("pqsVersion");
                                create_Mod_PQS.Invoke(create_Mod_PQS.Base(), "Create", _mod, pqsVersion);
                                create_Mod_PQS.Assign(loader, assembly.ExpressionFactory.New(loaderType));
                                create_Mod_PQS.Invoke(loader, "Create", create_Mod_PQS.Base().Property("Mod"), pqsVersion);
                            }
                        }
                    }
                }
                assembly.Save();

                // Hacking into my own mod. Oh well.
                modTypes.AddRange(assembly.GetAssembly().GetTypes());
                typeof(Parser).GetField("_modTypes", BindingFlags.NonPublic | BindingFlags.Static)
                ?.SetValue(null, modTypes);
            }