]> git.sur5r.net Git - cc65/blobdiff - src/ca65/toklist.c
Finished implemenation of commands to delete macros. Added the new commands to
[cc65] / src / ca65 / toklist.c
index 343e64e404686652ee27cd48120e68e3a5e4b5be..44fbd77427953d6a31be8bf209de1ecf772fd435 100644 (file)
@@ -42,6 +42,7 @@
 /* ca65 */
 #include "error.h"
 #include "istack.h"
+#include "lineinfo.h"
 #include "nexttok.h"
 #include "scanner.h"
 #include "toklist.h"
 TokNode* NewTokNode (void)
 /* Create and return a token node with the current token value */
 {
-    TokNode* T;
 
     /* Allocate memory */
-    T = xmalloc (sizeof (TokNode));
+    TokNode* N = xmalloc (sizeof (TokNode));
 
     /* Initialize the token contents */
-    T->Next    = 0;
-    T->Tok     = Tok;
-    T->WS      = WS;
-    T->IVal    = IVal;
-    SB_Init (&T->SVal);
-    SB_Copy (&T->SVal, &SVal);
+    N->Next     = 0;
+    SB_Init (&N->T.SVal);
+    CopyToken (&N->T, &CurTok);
 
     /* Return the node */
-    return T;
+    return N;
 }
 
 
 
-void FreeTokNode (TokNode* T)
+void FreeTokNode (TokNode* N)
 /* Free the given token node */
 {
-    SB_Done (&T->SVal);
-    xfree (T);
+    SB_Done (&N->T.SVal);
+    xfree (N);
 }
 
 
 
-void TokSet (TokNode* T)
-/* Set the scanner token from the given token node */
+void TokSet (TokNode* N, unsigned LineInfoSlot)
+/* Set the scanner token from the given token node. The given line info slot
+ * is used to store the position of the token fed into the scanner.
+ */
 {
     /* Set the values */
-    Tok  = T->Tok;
-    WS   = T->WS;
-    IVal = T->IVal;
-    SB_Copy (&SVal, &T->SVal);
-    SB_Terminate (&SVal);
+    CopyToken (&CurTok, &N->T);
+    SB_Terminate (&CurTok.SVal);
+
+    /* Set the position */
+    GenLineInfo (LineInfoSlot, &CurTok.Pos);
 }
 
 
 
-enum TC TokCmp (const TokNode* T)
+enum TC TokCmp (const TokNode* N)
 /* Compare the token given as parameter against the current token */
 {
-    if (T->Tok != Tok) {
+    if (N->T.Tok != CurTok.Tok) {
        /* Different token */
        return tcDifferent;
     }
 
     /* If the token has string attribute, check it */
-    if (TokHasSVal (T->Tok)) {
-               if (SB_Compare (&SVal, &T->SVal) != 0) {
+    if (TokHasSVal (N->T.Tok)) {
+               if (SB_Compare (&CurTok.SVal, &N->T.SVal) != 0) {
            return tcSameToken;
        }
-    } else if (TokHasIVal (T->Tok)) {
-       if (T->IVal != IVal) {
+    } else if (TokHasIVal (N->T.Tok)) {
+       if (N->T.IVal != CurTok.IVal) {
            return tcSameToken;
        }
     }
@@ -182,7 +181,7 @@ enum token_t GetTokListTerm (enum token_t Term)
  * a closing brace, otherwise return Term.
  */
 {
-    if (Tok == TOK_LCURLY) {
+    if (CurTok.Tok == TOK_LCURLY) {
         NextTok ();
         return TOK_RCURLY;
     } else {
@@ -225,7 +224,7 @@ static int ReplayTokList (void* List)
     CHECK (L->Last != 0);
 
     /* Set the next token from the list */
-    TokSet (L->Last);
+    TokSet (L->Last, LI_SLOT_ASM);
 
     /* If a check function is defined, call it, so it may look at the token
      * just set and changed it as apropriate.