]> git.sur5r.net Git - cc65/blobdiff - src/ca65/token.h
Finished implemenation of commands to delete macros. Added the new commands to
[cc65] / src / ca65 / token.h
index 21992e153900f089518880170ff5e046edbd9955..ad22b885cd6fea9dc98e6735814dea6be79320c7 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2007      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 2007-2011, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -39,7 +39,9 @@
 
 
 /* common */
+#include "filepos.h"
 #include "inline.h"
+#include "strbuf.h"
 
 
 
@@ -50,7 +52,7 @@
 
 
 /* Tokens */
-typedef enum Token {
+typedef enum token_t {
     TOK_NONE,          /* Start value, invalid */
     TOK_EOF,                   /* End of input file */
     TOK_SEP,           /* Separator (usually newline) */
@@ -71,7 +73,7 @@ typedef enum Token {
     TOK_ULABEL,                /* :++ or :-- */
 
     TOK_EQ,            /* = */
-    TOK_NE,            /* <> */
+    TOK_NE,            /* <> */
     TOK_LT,            /* < */
     TOK_GT,            /* > */
     TOK_LE,            /* <= */
@@ -83,12 +85,12 @@ typedef enum Token {
     TOK_BOOLNOT,       /* .not */
 
     TOK_PLUS,          /* + */
-    TOK_MINUS,         /* - */
+    TOK_MINUS,         /* - */
     TOK_MUL,           /* * */
     TOK_STAR = TOK_MUL,        /* Alias */
     TOK_DIV,           /* / */
     TOK_MOD,           /* ! */
-    TOK_OR,            /* | */
+    TOK_OR,            /* | */
     TOK_XOR,           /* ^ */
     TOK_BANK = TOK_XOR, /* Alias */
     TOK_AND,           /* & */
@@ -145,6 +147,7 @@ typedef enum Token {
     TOK_DEBUGINFO,
     TOK_DEFINE,
     TOK_DEFINED,
+    TOK_DELMAC,
     TOK_DESTRUCTOR,
     TOK_DWORD,
     TOK_ELSE,
@@ -164,6 +167,7 @@ typedef enum Token {
     TOK_EXPORT,
     TOK_EXPORTZP,
     TOK_FARADDR,
+    TOK_FATAL,
     TOK_FEATURE,
     TOK_FILEOPT,
     TOK_FORCEIMPORT,
@@ -217,9 +221,11 @@ typedef enum Token {
     TOK_PAGELENGTH,
     TOK_PARAMCOUNT,
     TOK_PC02,
+    TOK_POPCPU,
     TOK_POPSEG,
     TOK_PROC,
     TOK_PSC02,
+    TOK_PUSHCPU,
     TOK_PUSHSEG,
     TOK_REFERENCED,
     TOK_RELOC,
@@ -242,6 +248,7 @@ typedef enum Token {
     TOK_TAG,
     TOK_TCOUNT,
     TOK_TIME,
+    TOK_UNDEF,
     TOK_UNION,
     TOK_VERSION,
     TOK_WARNING,
@@ -251,7 +258,28 @@ typedef enum Token {
     TOK_LASTPSEUDO     = TOK_ZEROPAGE,
 
     TOK_COUNT                  /* Count of tokens */
-} Token;
+} token_t;
+
+
+
+/* Complete token including attributes and flags */
+typedef struct Token Token;
+struct Token {
+    token_t     Tok;            /* The actual token value */
+    int         WS;             /* Flag for "whitespace before token" */
+    long        IVal;           /* Integer attribute value */
+    StrBuf      SVal;           /* String attribute value */
+    FilePos     Pos;            /* Position from which token was read */
+};
+
+/* Initializer value for a token */
+#define STATIC_TOKEN_INITIALIZER {      \
+    TOK_NONE,                           \
+    0,                                  \
+    0,                                  \
+    STATIC_STRBUF_INITIALIZER,          \
+    STATIC_FILEPOS_INITIALIZER          \
+}
 
 
 
@@ -261,22 +289,27 @@ typedef enum Token {
 
 
 
-int TokHasSVal (Token Tok);
+int TokHasSVal (token_t Tok);
 /* Return true if the given token has an attached SVal */
 
-int TokHasIVal (Token Tok);
+int TokHasIVal (token_t Tok);
 /* Return true if the given token has an attached IVal */
 
 #if defined(HAVE_INLINE)
-INLINE int TokIsSep (enum Token T)
+INLINE int TokIsSep (enum token_t T)
 /* Return true if this is a separator token */
 {
     return (T == TOK_SEP || T == TOK_EOF);
 }
 #else
-#  define TokIsSep(T)   (T == TOK_SEP || T == TOK_EOF)
+#  define TokIsSep(T)   ((T) == TOK_SEP || (T) == TOK_EOF)
 #endif
 
+void CopyToken (Token* Dst, const Token* Src);
+/* Copy a token. The current value of Dst.SVal is free'd, so Dst must be
+ * initialized.
+ */
+
 
 
 /* End of token.h */