Re: ManagerClass - компилятор как компонент
От: xtrevius  
Дата: 20.12.10 17:17
Оценка: 50 (1)
Здравствуйте, VladD2, Вы писали:

VD>Этот компонент должен иметь внятный и компактный интерфейс, а так же скрывать все детали вроде увеличения размера стека.


Нужно что-то типа такого?

  Скрытый текст
public class CompilerManager
  {
      _options : CompilationOptions;
      public ManagerClass : ManagerClass;
      
      Run():void
      {
          def thread = System.Threading.Thread(
                        fun()
                        {
                            unless(this.ManagerClass==null) this.ManagerClass.Run()
                        },
                        10*1024*1024*System.IntPtr.Size);
          thread.Start();
          thread.Join();
      }
      
      public this()
      {
          _options = CompilationOptions();
          _options.LibraryPaths = [Environment.GetEnvironmentVariable("Nemerle")];
          this.ManagerClass = ManagerClass(_options);
      }
      
      public MacrosToLoad : list[string]
      {
          get { _options.MacrosToLoad }
          set { _options.MacrosToLoad = value}
      }
      
      public LibraryPaths : list[string]
      {
          get { _options.LibraryPaths }
          set { _options.LibraryPaths = value }
      }
      
      public ReferencedLibraries : list[string]
      {
          get { _options.ReferencedLibraries }
          set { _options.ReferencedLibraries = value }
      }
      
      public Compile(sources : list[string],targetIsExe:bool=false) : Assembly
      {
          Compile(sources,null,targetIsExe);
      }
      public Compile(sources : list[string],outputFile : string) : Assembly
      {   
          Compile(sources,outputFile,if(System.IO.Path.GetExtension(outputFile) == "exe") true else false);
      }
      
      public Compile(sources : list[string],outputFile : string,targetIsExe : bool) : Assembly
      {
          _options.Sources = sources;
          _options.TargetIsWinexe= targetIsExe;
          _options.TargetIsLibrary = !targetIsExe;
          if(!string.IsNullOrEmpty(outputFile))
          {
              _options.CompileToMemory = false;
              _options.OutputFileName = outputFile;
          }
          else
          {
              _options.CompileToMemory = true;
          }
          Run();
          this.ManagerClass.GeneratedAssembly
      }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.