]> git.sur5r.net Git - cc65/blobdiff - src/ca65/lineinfo.h
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / src / ca65 / lineinfo.h
index 7aa4d1a2fc385f6789448efb4de7b2f6fa7e1961..41b44c0bcd39b871a8d19c8e36ec76ff661b6f22 100644 (file)
@@ -1,6 +1,6 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                               lineinfo.h                                 */
+/*                                lineinfo.h                                 */
 /*                                                                           */
 /*                     Source file line info management                      */
 /*                                                                           */
 /* common */
 #include "coll.h"
 #include "filepos.h"
+#include "hashtab.h"
 #include "lidefs.h"
 
 
 
 /*****************************************************************************/
-/*                                  Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 
-/* Predefined line info slots. These are allocated when initializing the
- * module. Beware: Some code relies on the fact that slot zero is the basic
- * standard line info. It is assumed to be always there.
- */
-enum {
-    LI_SLOT_ASM         = 0,            /* Normal assembler source */
-    LI_SLOT_EXT         = 1,            /* Externally supplied line info */
-};
-
-/* The LineInfo structure is shared between several fragments, so we need a
- * reference counter.
- */
+/* Opaque structure used to handle line information */
 typedef struct LineInfo LineInfo;
-struct LineInfo {
-    unsigned    Usage;                  /* Usage counter */
-    unsigned    Type;                   /* Type of line info */
-    unsigned    Index;                  /* Index */
-    FilePos     Pos;                    /* File position */
-};
 
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
@@ -82,63 +66,48 @@ struct LineInfo {
 void InitLineInfo (void);
 /* Initialize the line infos */
 
-unsigned AllocLineInfoSlot (unsigned Type, unsigned Count);
-/* Allocate a line info slot of the given type and return the slot index */
+void DoneLineInfo (void);
+/* Close down line infos */
 
-void FreeLineInfoSlot (unsigned Slot);
-/* Free the line info in the given slot. Note: Alloc/Free must be used in
- * FIFO order.
- */
+void EndLine (LineInfo* LI);
+/* End a line that is tracked by the given LineInfo structure */
 
-void GenLineInfo (unsigned Slot, const FilePos* Pos);
-/* Generate a new line info in the given slot */
+LineInfo* StartLine (const FilePos* Pos, unsigned Type, unsigned Count);
+/* Start line info for a new line */
 
-void ClearLineInfo (unsigned Slot);
-/* Clear the line info in the given slot */
+void NewAsmLine (void);
+/* Start a new assembler input line. Use this function when generating new
+ * line of LI_TYPE_ASM. It will check if line and/or file have actually
+ * changed, end the old and start the new line as necessary.
+ */
 
-void GetFullLineInfo (Collection* LineInfos, unsigned IncUsage);
-/* Return full line infos, that is line infos for all slots in LineInfos. The
- * function will clear LineInfos before usage and will increment the usage
- * counter by IncUsage for all line infos returned.
+LineInfo* GetAsmLineInfo (void);
+/* Return the line info for the current assembler file. The function will
+ * bump the reference counter before returning the line info.
  */
 
-LineInfo* UseLineInfo (LineInfo* LI);
-/* Increase the reference count of the given line info and return it. The
- * function will gracefully accept NULL pointers and do nothing in this case.
+void ReleaseLineInfo (LineInfo* LI);
+/* Decrease the reference count for a line info */
+
+void GetFullLineInfo (Collection* LineInfos);
+/* Return full line infos, that is line infos for currently active Slots. The
+ * infos will be added to the given collection, existing entries will be left
+ * intact. The reference count of all added entries will be increased.
  */
 
-LineInfo* ReleaseLineInfo (LineInfo* LI);
-/* Decrease the reference count of the given line info and return it. The
- * function will gracefully accept NULL pointers and do nothing in this case.
+void ReleaseFullLineInfo (Collection* LineInfos);
+/* Decrease the reference count for a collection full of LineInfos, then clear
+ * the collection.
  */
 
-#if defined(HAVE_INLINE)
-INLINE const FilePos* GetSourcePos (const LineInfo* LI)
+const FilePos* GetSourcePos (const LineInfo* LI);
 /* Return the source file position from the given line info */
-{
-    return &LI->Pos;
-}
-#else
-#  define GetSourcePos(LI)      (&(LI)->Pos)
-#endif
 
-#if defined(HAVE_INLINE)
-INLINE unsigned GetLineInfoType (const LineInfo* LI)
+unsigned GetLineInfoType (const LineInfo* LI);
 /* Return the type of a line info */
-{
-    return LI_GET_TYPE (LI->Type);
-}
-#else
-#  define GetLineInfoType(LI)     LI_GET_TYPE ((LI)->Type)
-#endif
 
 void WriteLineInfo (const Collection* LineInfos);
-/* Write a list of line infos to the object file. MakeLineInfoIndex has to
- * be called before!
- */
-
-void MakeLineInfoIndex (void);
-/* Index the line infos */
+/* Write a list of line infos to the object file. */
 
 void WriteLineInfos (void);
 /* Write a list of all line infos to the object file. */
@@ -150,3 +119,4 @@ void WriteLineInfos (void);
 
 
 
+