public void Parse(string sourceFile, string[] includeDirs = null, string[] additionalOptions = null, bool msCompati = true) { var file = _EntityBinder.File(sourceFile); if (_TranslationUnits.ContainsKey(file)) { return; } var ufile = new CXUnsavedFile(); var tu = new CXTranslationUnit(); var options = new List <string>(new string[] { "-std=c++14", "-ferror-limit=9999" }); if (includeDirs != null) { foreach (var dir in includeDirs) { options.Add(string.Concat("-I", dir, "")); } } if (additionalOptions != null) { options.AddRange(additionalOptions); } if (msCompati) { options.Add("-fms-extensions"); options.Add("-fms-compatibility"); } var erro = clang.parseTranslationUnit2(_Index, sourceFile, options.ToArray(), options.Count, out ufile, 0, 0, out tu); _CurrentTranslation = new Translation(tu, file); _CurrentTranslation.Diagnostics = Diagnostic.CreateFrom(tu); _TranslationUnits[file] = _CurrentTranslation; foreach (var d in _CurrentTranslation.Diagnostics) { _Output.AppendLine(d.ToString()); } // 本当はここでエラーチェックが好ましい var cursor = clang.getTranslationUnitCursor(tu); clang.visitChildren(cursor, _CursorVisitor, new CXClientData()); //foreach(var e in new List<Entity>(_CursorToEntity.Values)) { // Console.WriteLine(e.FullName); //} // TODO: 削除する var kinds = new List <CXCursorKind>(_UsedKinds); kinds.Sort(); foreach (var kind in kinds) { Console.WriteLine(kind); } }