]> git.sur5r.net Git - cc65/blobdiff - src/cc65/asmcode.c
Fixed _textcolor definition.
[cc65] / src / cc65 / asmcode.c
index f81d3ebb83850b3f3f208ac18ca42a52fd38e74e..ee50d6faafd626112898065e5e08ec85fe12d122 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                                asmcode.c                                 */
+/*                                 asmcode.c                                 */
 /*                                                                           */
-/*         Assembler output code handling for the cc65 C compiler           */
+/*          Assembler output code handling for the cc65 C compiler           */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 2000-2009, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -38,7 +38,6 @@
 
 /* cc65 */
 #include "asmcode.h"
-#include "codeopt.h"
 #include "codeseg.h"
 #include "dataseg.h"
 #include "segments.h"
@@ -48,7 +47,7 @@
 
 
 /*****************************************************************************/
-/*                                  Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
@@ -62,6 +61,20 @@ void GetCodePos (CodeMark* M)
 
 
 
+void RemoveCodeRange (const CodeMark* Start, const CodeMark* End)
+/* Remove all code between two code markers */
+{
+    /* Nothing to do if the range is empty */
+    if (Start->Pos == End->Pos) {
+        return;
+    }
+
+    /* Delete the range */
+    CS_DelCodeRange (CS->Code, Start->Pos, End->Pos-1);
+}
+
+
+
 void RemoveCode (const CodeMark* M)
 /* Remove all code after the given code marker */
 {
@@ -73,8 +86,8 @@ void RemoveCode (const CodeMark* M)
 
 void MoveCode (const CodeMark* Start, const CodeMark* End, const CodeMark* Target)
 /* Move the code between Start (inclusive) and End (exclusive) to
- * (before) Target. The code marks aren't updated.
- */
+** (before) Target. The code marks aren't updated.
+*/
 {
     CS_MoveEntries (CS->Code, Start->Pos, End->Pos - Start->Pos, Target->Pos);
 }
@@ -96,31 +109,24 @@ int CodeRangeIsEmpty (const CodeMark* Start, const CodeMark* End)
 
 
 
-void WriteOutput (FILE* F)
-/* Write the final output to a file */
+void WriteAsmOutput (void)
+/* Write the final assembler output to the output file */
 {
     SymTable* SymTab;
     SymEntry* Entry;
 
     /* Output the global data segment */
     CHECK (!HaveGlobalCode ());
-    OutputSegments (CS, F);
+    OutputSegments (CS);
 
     /* Output all global or referenced functions */
     SymTab = GetGlobalSymTab ();
     Entry  = SymTab->SymHead;
     while (Entry) {
-               if (IsTypeFunc (Entry->Type)            &&
-                   SymIsDef (Entry)                    &&
-                   (Entry->Flags & (SC_REF | SC_EXTERN)) != 0) {
-                   /* Function which is defined and referenced or extern */
-                   CS_MergeLabels (Entry->V.F.Seg->Code);
-                   RunOpt (Entry->V.F.Seg->Code);
-                   OutputSegments (Entry->V.F.Seg, F);
-               }
-               Entry = Entry->NextSym;
+        if (SymIsOutputFunc (Entry)) {
+            /* Function which is defined and referenced or extern */
+            OutputSegments (Entry->V.F.Seg);
+        }
+        Entry = Entry->NextSym;
     }
 }
-
-
-