Exemplo n.º 1
0
        private static ICompileStage<object> Generate(CompilerSettings settings, params Type[] components)
        {
            ICompileStage<object> ret = null;
            object last = null;

            foreach(var type in components)
            {
                var stage = Activator.CreateInstance(type, settings);
                if (ret == null)
                    ret = (ICompileStage<object>)stage;
                else
                {
                    var mi = last.GetType().GetMethod("Next");
                    mi.Invoke(last, new object[] { stage });
                }
                

                last = stage;
            }

            return ret;
        }
Exemplo n.º 2
0
        private static ICompileStage<object> GetCompiler(CompilerSettings settings)
        {
            #region old
            //var instructionEmitter = GetEmitter(settings);
            /*var generator = new LinearIRGenerator(settings);
            var setupStack = new SetupStackParameters(settings);
            var constanthandler = new ConstantProcessor(settings);
            var argSanitizer = new ArgumentSanitizer(settings);
            var argLifter = new ArgumentLifter(settings);
            var stackAllocator = new StackAllocator(settings);
            var paramLifter = new ParameterLifter(settings);
            var memoryAssExpander = new MemoryAssignmentExpander(settings);

            var instructionEmitter = new Compiler.Assembler.Amd64.Emitter();
            var binaryconverter = new BinaryConverter<Amd64Operation>(settings, instructionEmitter);
            var externalResolver = settings.ExecutableType == ExecutableType.PortableExecutable ? new WindowsResolver<Amd64Operation>(settings, instructionEmitter) : null;
            var orderer = new SectionOrderer(settings);
            var addresser = new Addresser(settings);
            var physAddress = new PhysicalAddresser(settings);
            var exeWriter = settings.ExecutableType == ExecutableType.PortableExecutable ? new PeWriter(settings) : null;

            generator.Next(setupStack);
            setupStack.Next(constanthandler);
            constanthandler.Next(argSanitizer);
            argSanitizer.Next(argLifter);
            argLifter.Next(stackAllocator);
            stackAllocator.Next(paramLifter);
            paramLifter.Next(memoryAssExpander);
            memoryAssExpander.Next(new IRPrinter(settings));
            
            binaryconverter.Next(externalResolver);

            var before = externalResolver;
            var after = orderer;*/

            /*if(settings.ExecutableType == ExecutableType.PortableExecutable)
            {
                var rsrcEmitter = new ResourceSectionEmitter(settings);

                before.Next(rsrcEmitter);
                rsrcEmitter.Next(after);
            }*/
            /*before.Next(after);

            orderer.Next(addresser);
            addresser.Next(physAddress);
            physAddress.Next(exeWriter);

            return generator;*/
            #endregion

            return Generate(settings,
                typeof(LinearIRGenerator),
                typeof(SetupStackParameters),
                typeof(ConstantProcessor),
                typeof(ArgumentSanitizer),
                typeof(ArgumentLifter),
                typeof(StackAllocator),
                typeof(ParameterLifter),
                typeof(MemoryAssignmentExpander),
                typeof(LivelinessGraphGenerator),
                typeof(IRPrinter));
        }
Exemplo n.º 3
0
        /*private static InstructionEmitter GetEmitter<T>(CompilerSettings settings)
        {
            switch (settings.ISA)
            {
                case ISA.x86_64:
                case ISA.x86:
                    return new Amd64Emitter();
                default:
                    return null;
            }
        }*/

        static void Main(string[] args)
        {
            /*var prog = new Program.Program();

            var parser = new Parser.Parser();
            parser.ParseFile(prog, "b.exe");

            Console.WriteLine();*/

            var settings = new CompilerSettings()
            {
                Is64Bit = true,
                ExecutableType = ExecutableType.PortableExecutable,
                ISA = ISA.x86,
                Output = "aout.exe"
            };

            var compiler = GetCompiler(settings);
            compiler.Process(null);            
        }