예제 #1
0
        void DrawSourceFileEntry(SourceFileEntry entry, float labelWidth, float indentWidth, bool isChild = false)
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Space(indentWidth);
            var label = new GUIContent(entry.FileName, entry.Path);

            EditorGUILayout.LabelField(label, GUILayout.Width(labelWidth));

            if (FileAndFolderEntryFactory.Exists(entry.Path))
            {
                GUILayout.Space(SQUARE_BUTTON_SPACE_WIDTH);
            }
            else
            {
                Style.WarningIcon("File is missing");
            }

            if (isChild)
            {
                GUILayout.Space(ENUM_POPUP_WIDTH);
            }
            else
            {
                EditorGUILayout.LabelField(entry.Add.ToString(), GUILayout.Width(ENUM_POPUP_WIDTH));
            }

            EditorGUILayout.LabelField(entry.CompilerFlags);
            EditorGUILayout.EndHorizontal();
            GUILayout.Space(2);
        }
예제 #2
0
        public void PrintCompileUnits()
        {
            Message("Reading {0}, version {1}.{2}.", File.FileName, File.MajorVersion,
                    File.MinorVersion);

            for (int i = 0; i < File.CompileUnitCount; i++)
            {
                if (CompileUnits.Count > 0)
                {
                    if (!CompileUnits.ContainsKey(i + 1))
                    {
                        continue;
                    }
                }

                CompileUnitEntry unit = File.GetCompileUnit(i + 1);
                SourceFileEntry  file = unit.SourceFile;

                Message("Compile unit {0}: ({1}) {2}", unit.Index, file.Index, file.FileName);

                foreach (SourceFileEntry include in unit.IncludeFiles)
                {
                    Message("  Include: ({0}) {1}", include.Index, include.FileName);
                }
            }
        }
예제 #3
0
 public static void MarkSequencePoint(ILGenerator ig, Location loc)
 {
     if (symwriter != null)
     {
         SourceFileEntry file   = loc.SourceFile.SourceFileEntry;
         int             offset = GetILOffset(ig);
         symwriter.MarkSequencePoint(offset, file, loc.Row, loc.Column, false);
     }
 }
예제 #4
0
 protected void ReadSourceFiles()
 {
     for (int i = 0; i < File.SourceCount; i++)
     {
         SourceFileEntry source = File.GetSourceFile(i + 1);
         if (source == null)
         {
             throw new MonoSymbolFileException("Cannot get source file {0}.", i + 1);
         }
         Debug("  [{0}] - {1}", source, source.FileName);
     }
     Debug("Checked {0} source files.", File.SourceCount);
 }
예제 #5
0
        Document GetDocument(SourceFileEntry file)
        {
            Document doc = m_documents [file.FileName] as Document;

            if (doc != null)
            {
                return(doc);
            }

            doc = new Document(file.FileName);

            m_documents [file.FileName] = doc;
            return(doc);
        }
예제 #6
0
        public SourceFileEntry CreateSymbolInfo(MonoSymbolFile symwriter, List <KeyValuePair <string, string> > pathMap)
        {
            if (hidden_lines != null)
            {
                hidden_lines.Sort();
            }

            file = new SourceFileEntry(symwriter, GetFullPathName(pathMap), OriginalFullPathName, algGuid, checksum);
            if (AutoGenerated)
            {
                file.SetAutoGenerated();
            }

            return(file);
        }
예제 #7
0
        public SourceFileEntry CreateSymbolInfo(MonoSymbolFile symwriter)
        {
            if (hidden_lines != null)
            {
                hidden_lines.Sort();
            }

            file = new SourceFileEntry(symwriter, FullPathName, algGuid, checksum);
            if (AutoGenerated)
            {
                file.SetAutoGenerated();
            }

            return(file);
        }
예제 #8
0
 public virtual void DefineSymbolInfo(MonoSymbolWriter symwriter)
 {
     if (guid != null)
     {
         file = symwriter.DefineDocument(FullPathName, guid, checksum);
     }
     else
     {
         file = symwriter.DefineDocument(FullPathName);
         if (AutoGenerated)
         {
             file.SetAutoGenerated();
         }
     }
 }
예제 #9
0
        Document GetDocument(SourceFileEntry file)
        {
            var file_name = file.FileName;

            Document document;

            if (documents.TryGetValue(file_name, out document))
            {
                return(document);
            }

            document = new Document(file_name);
            documents.Add(file_name, document);

            return(document);
        }
예제 #10
0
        SourceFile GetSourceFile(Document document)
        {
            string     url  = document.Url;
            SourceFile file = m_documents [url] as SourceFile;

            if (file != null)
            {
                return(file);
            }

            SourceFileEntry  entry     = m_writer.DefineDocument(url);
            CompileUnitEntry comp_unit = m_writer.DefineCompilationUnit(entry);

            file = new SourceFile(comp_unit, entry);
            m_documents [url] = file;
            return(file);
        }
예제 #11
0
        private Document GetDocument(SourceFileEntry file)
        {
            string   file_name = file.FileName;
            Document document;
            Document result;

            if (this.documents.TryGetValue(file_name, out document))
            {
                result = document;
            }
            else
            {
                document = new Document(file_name);
                this.documents.Add(file_name, document);
                result = document;
            }
            return(result);
        }
예제 #12
0
        protected void CheckCompileUnit(CompileUnitEntry unit)
        {
            SourceFileEntry file  = unit.SourceFile;
            SourceFileEntry file2 = File.GetSourceFile(file.Index);

            if ((file2 == null) || (file != file2))
            {
                throw new MonoSymbolFileException(
                          "Invalid source file reference in compile unit {0}.", unit.Index);
            }

            Debug("  Compile unit {0}: {1} {2} {3}", unit.Index, file, file2, file == file2);

            if (unit.Namespaces == null)
            {
                throw new MonoSymbolFileException(
                          "Invalid name space table in compile unit {0}.", unit.Index);
            }
        }
예제 #13
0
        public SourceFileEntry CreateSymbolInfo(MonoSymbolWriter symwriter)
        {
            if (hidden_lines != null)
            {
                hidden_lines.Sort();
            }

            if (guid != null)
            {
                file = symwriter.DefineDocument(FullPathName, guid, checksum);
            }
            else
            {
                file = symwriter.DefineDocument(FullPathName);
                if (AutoGenerated)
                {
                    file.SetAutoGenerated();
                }
            }

            return(file);
        }
예제 #14
0
 public int AddSource(SourceFileEntry source)
 {
     sources.Add (source);
     return sources.Count;
 }
예제 #15
0
파일: Driver.cs 프로젝트: iniside/CryCIL
 public SourceFile(CompileUnitEntry comp_unit, SourceFileEntry entry)
 {
     this.comp_unit = comp_unit;
     this.entry     = entry;
 }
예제 #16
0
 public SourceFileEntry DefineDocument(string url)
 {
     SourceFileEntry entry = new SourceFileEntry (file, url);
     sources.Add (entry);
     return entry;
 }
예제 #17
0
 public SourceFileEntry DefineDocument(string url, byte[] guid, byte[] checksum)
 {
     SourceFileEntry entry = new SourceFileEntry (file, url, guid, checksum);
     sources.Add (entry);
     return entry;
 }
예제 #18
0
        public void MarkSequencePoint(int offset, SourceFileEntry file, int line, int column,
					       bool is_hidden)
        {
            if (current_method == null)
                return;

            current_method.MarkSequencePoint (offset, file, line, column, is_hidden);
        }
예제 #19
0
        public void BeginSourceFile(string filename)
        {
            SourceFileEntry file = DefineDocument(filename, null, null);

            current_source = DefineCompilationUnit(file);
        }
예제 #20
0
 public void MarkSequencePoint(int offset, SourceFileEntry file, int line, int column, bool is_hidden)
 {
     MarkSequencePoint (offset, file, line, column, -1, -1, is_hidden);
 }
예제 #21
0
        public void MarkSequencePoint(int offset, SourceFileEntry file, int line, int column, int end_line, int end_column, bool is_hidden)
        {
            int file_idx = file != null ? file.Index : 0;
            var lne = new LineNumberEntry (file_idx, line, column, end_line, end_column, offset, is_hidden);

            if (method_lines.Count > 0) {
                var prev = method_lines[method_lines.Count - 1];

                //
                // Same offset cannot be used for multiple lines
                //
                if (prev.Offset == offset) {
                    //
                    // Use the new location because debugger will adjust
                    // the breakpoint to next line with sequence point
                    //
                    if (LineNumberEntry.LocationComparer.Default.Compare (lne, prev) > 0)
                        method_lines[method_lines.Count - 1] = lne;

                    return;
                }
            }

            method_lines.Add (lne);
        }
예제 #22
0
 public CompileUnitEntry DefineCompilationUnit(SourceFileEntry source)
 {
     CompileUnitEntry entry = new CompileUnitEntry (file, source);
     comp_units.Add (entry);
     return entry;
 }
예제 #23
0
파일: MdbReader.cs 프로젝트: ttRevan/cecil
        Document GetDocument(SourceFileEntry file)
        {
            var file_name = file.FileName;

            Document document;
            if (documents.TryGetValue (file_name, out document))
                return document;

            document = new Document (file_name);
            documents.Add (file_name, document);

            return document;
        }
예제 #24
0
        public void PrintLineNumberTables()
        {
            Message("Reading {0}, version {1}.{2}.", File.FileName, File.MajorVersion,
                    File.MinorVersion);

            for (int i = 0; i < File.MethodCount; i++)
            {
                if (LineNumberTables.Count > 0)
                {
                    if (!LineNumberTables.ContainsKey(i + 1))
                    {
                        continue;
                    }
                }

                MethodEntry method = File.GetMethod(i + 1);
                if (method == null)
                {
                    throw new MonoSymbolFileException("Cannot get method {0}.", i + 1);
                }

                Cecil.MethodDefinition mdef = (Cecil.MethodDefinition)Assembly.MainModule.LookupToken(
                    new Cecil.MetadataToken(Cecil.TokenType.Method, method.Token & 0xffffff));
                if ((mdef == null) || (mdef.Body == null))
                {
                    throw new MonoSymbolFileException("Method {0} (token {1:x}) not found in assembly.",
                                                      method.Index, method.Token);
                }

                string name = String.Format("{0} ({1})", method.Index, GetMethodName(mdef));
                Message("Method {0} - {1}", method.Index, GetMethodName(mdef));

                LineNumberTable lnt = method.GetLineNumberTable();
                if (lnt == null)
                {
                    throw new MonoSymbolFileException("Cannot get LNT from method {0}.", name);
                }

                if (lnt.LineNumbers == null)
                {
                    throw new MonoSymbolFileException("Cannot get LNT from method {0}.", name);
                }

                Dictionary <int, bool> seen_files = new Dictionary <int, bool> ();

                LineNumberEntry start, end;
                if (lnt.GetMethodBounds(out start, out end))
                {
                    Message("  Bounds: {0} {1}", start, end);
                }
                foreach (LineNumberEntry line in lnt.LineNumbers)
                {
                    if (!line.IsHidden && !seen_files.ContainsKey(line.File))
                    {
                        SourceFileEntry file = File.GetSourceFile(line.File);
                        Message("  File {0}{2}: {1}", file.Index, file.FileName,
                                file.AutoGenerated ? " (auto-generated)" : "");
                        seen_files.Add(line.File, true);
                    }

                    string range = "";
                    if (line.SourceRange != null)
                    {
                        SourceRangeEntry sre = (SourceRangeEntry)line.SourceRange;
                        range = String.Format(" - {0} {1} {2} {3}", sre.StartLine, sre.EndLine,
                                              sre.StartColumn, sre.EndColumn);
                    }

                    Message("    Line {0}:{1}:{2:x}{3}{4}", line.File, line.Row, line.Offset,
                            line.IsHidden ? " (hidden)" : "", range);
                }
            }
        }
예제 #25
0
        public SourceFileEntry GetSourceFile(int index)
        {
            if ((index < 1) || (index > ot.SourceCount))
                throw new ArgumentException ();
            if (reader == null)
                throw new InvalidOperationException ();

            lock (this) {
                SourceFileEntry source;
                if (source_file_hash.TryGetValue (index, out source))
                    return source;

                long old_pos = reader.BaseStream.Position;

                reader.BaseStream.Position = ot.SourceTableOffset +
                    SourceFileEntry.Size * (index - 1);
                source = new SourceFileEntry (this, reader);
                source_file_hash.Add (index, source);

                reader.BaseStream.Position = old_pos;
                return source;
            }
        }
예제 #26
0
파일: Driver.cs 프로젝트: halukmy/CryMono
 public SourceFile(CompileUnitEntry comp_unit, SourceFileEntry entry)
 {
     this.comp_unit = comp_unit;
     this.entry = entry;
 }