コード例 #1
0
ファイル: CFileHandler.cs プロジェクト: jonathanvdc/cin
        public async Task <IAssembly> CompileAsync(IProject Project, CompilationParameters Parameters)
        {
            var binder = await Parameters.BinderTask;
            var asm    = new SyntaxAssembly(Project.Name, new Version(), Parameters.Log,
                                            CBuildHelpers.Instance.CreatePrimitiveBinder32(binder), new TypeNamerBase());

            await ParseCompilationUnitsAsync(Project.GetSourceItems(), asm, Parameters);

            return(asm);
        }
コード例 #2
0
ファイル: CFileHandler.cs プロジェクト: jonathanvdc/cin
        public static CompilationUnit ParseCompilationUnit(ITokenStream TokenParser, SyntaxAssembly Assembly)
        {
            var syntaxParser = new CSyntaxParser(Assembly.Log);
            var unit         = Assembly.CreateCompilationUnit();
            var state        = unit.GetSyntaxState();

            IDeclarationSyntax[] decls;
            try
            {
                decls = syntaxParser.ParseAllDeclarations(TokenParser).ToArray();
            }
            catch (Exception ex)
            {
                Assembly.Log.LogError(new LogEntry(
                                          "error parsing source",
                                          "an error occurred while parsing source code.",
                                          TokenParser.PeekNoTrivia(TokenParser.CurrentPosition).TokenPeek.FullLocation));
                Assembly.Log.LogException(ex);
                throw;
            }


            foreach (var item in decls)
            {
                try
                {
                    item.Declare(state);
                }
                catch (Exception ex)
                {
                    Assembly.Log.LogError(new LogEntry(
                                              "error applying declaration",
                                              "an error occurred while applying a declaration.",
                                              item.GetSourceLocation()));
                    Assembly.Log.LogException(ex);
                    throw;
                }
            }

            return(unit);
        }
コード例 #3
0
ファイル: CFileHandler.cs プロジェクト: jonathanvdc/cin
 public static Task ParseCompilationUnitsAsync(List <IProjectSourceItem> SourceItems, SyntaxAssembly Assembly, CompilationParameters Parameters)
 {
     Task[] units = new Task[SourceItems.Count];
     for (int i = 0; i < units.Length; i++)
     {
         var item = SourceItems[i];
         units[i] = ParseCompilationUnitAsync(item, Assembly, Parameters);
     }
     return(Task.WhenAll(units));
 }
コード例 #4
0
ファイル: CFileHandler.cs プロジェクト: jonathanvdc/cin
 public static Task <CompilationUnit> ParseCompilationUnitAsync(IProjectSourceItem SourceItem, SyntaxAssembly Assembly, CompilationParameters Parameters)
 {
     Parameters.Log.LogEvent(new LogEntry("Status", "parsing " + SourceItem.SourceIdentifier));
     return(Task.Run(() =>
     {
         var code = GetSourceSafe(SourceItem, Parameters);
         if (code == null)
         {
             return null;
         }
         var parser = Preprocess(code, Parameters);
         var unit = ParseCompilationUnit(parser, Assembly);
         Parameters.Log.LogEvent(new LogEntry("Status", "parsed " + SourceItem.SourceIdentifier));
         return unit;
     }));
 }