Exemple #1
0
        /// <summary>
        ///     Adds a default constructor to the target type.
        /// </summary>
        /// <param name="targetType">The type that will contain the default constructor.</param>
        /// <returns>The default constructor.</returns>
        public static MethodDefinition AddDefaultConstructor(this TypeDefinition targetType,
                                                             IPapyrusCilAssemblyBuilder libraryGenerator)
        {
            var parentType = typeof(object);

            return(AddDefaultConstructor(targetType, parentType, libraryGenerator));
        }
Exemple #2
0
        /// <summary>
        ///     Adds a default constructor to the target type.
        /// </summary>
        /// <param name="parentType">
        ///     The base class that contains the default constructor that will be used for constructor
        ///     chaining..
        /// </param>
        /// <param name="targetType">The type that will contain the default constructor.</param>
        /// <returns>The default constructor.</returns>
        public static MethodDefinition AddDefaultConstructor(this TypeDefinition targetType, Type parentType,
                                                             IPapyrusCilAssemblyBuilder libraryGenerator)
        {
            var module           = libraryGenerator.MainModule; // targetType.Module;
            var voidType         = module.Import(typeof(void));
            var methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig
                                   | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName;


            var flags             = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
            var objectConstructor = parentType.GetConstructor(flags, null, new Type[0], null);

            // Revert to the System.Object constructor
            // if the parent type does not have a default constructor
            if (objectConstructor == null)
            {
                objectConstructor = typeof(object).GetConstructor(new Type[0]);
            }

            var baseConstructor = module.Import(objectConstructor);

            // Define the default constructor
            var ctor = new MethodDefinition(".ctor", methodAttributes, voidType)
            {
                CallingConvention = MethodCallingConvention.StdCall,
                ImplAttributes    = MethodImplAttributes.IL | MethodImplAttributes.Managed
            };

            var IL = ctor.Body.Instructions;

            // Call the constructor for System.Object, and exit
            IL.Add(Instruction.Create(OpCodes.Ldarg_0));
            IL.Add(Instruction.Create(OpCodes.Call, baseConstructor));
            IL.Add(Instruction.Create(OpCodes.Ret));

            targetType.Methods.Add(ctor);

            return(ctor);
        }
Exemple #3
0
 public void Initialize(IPapyrusCilAssemblyBuilder builder)
 {
     this.builder = builder;
 }
Exemple #4
0
        private static void Main(string[] args)
        {
            Console.Title = "PapyrusDotNet";

            var inputDirectory       = @"C:\CreationKit\Data\Scripts\Source";
            var inputExtensionFilter = "*.pas";
            var inputSourceType      = "assembly";

            var parsed = new PapyrusDotNetArgs
            {
                InputFolder = inputDirectory,
                InputType   = "script"
            };

            try
            {
                // TODO: set the parsed = null; as default value.
                if (parsed == null)
                {
                    parsed = Args.Parse <PapyrusDotNetArgs>(args);
                }

                if (parsed.InputFolder != null)
                {
                    // Console.WriteLine("You entered string '{0}' and int '{1}'", parsed.StringArg, parsed.IntArg);
                    if (parsed.InputType.ToLower().Contains("script") || parsed.InputType.ToLower().Contains("psc"))
                    {
                        inputExtensionFilter = "*.psc";
                        inputSourceType      = "script";
                    }

                    inputDirectory = parsed.InputFolder;
                    if (inputDirectory.Contains("\""))
                    {
                        inputDirectory = inputDirectory.Replace("\"", "");
                    }
                    // Console.WriteLine("You entered string '{0}' and int '{1}'", parsed.InputFile, parsed.OutputFolder);
                }
                if (parsed.InputFolder == null)
                {
                    Console.WriteLine("No arguments were defined, using default.");
                    Console.WriteLine("Input: " + inputDirectory);
                    Console.WriteLine("Type: " + inputSourceType);
                    Console.WriteLine();
                    Console.WriteLine("If you are fine with this, press any key to continue.");
                    Console.WriteLine("Or hit CTRL+C to exit.");
                    Console.ReadKey();
                }
            }
            catch (ArgException ex)
            {
                Console.WriteLine("Crash on startup :(");
                Console.WriteLine("Exception thrown: " + ex);

                return;
            }


            var inputSourceFiles = Directory.GetFiles(inputDirectory, inputExtensionFilter, SearchOption.AllDirectories);

            coreAssemblyBuilder = new PapyrusCilAssemblyBuilder();

            coreAssemblyBuilder.BuildAssembly(inputSourceFiles);

            Console.ReadKey();
        }