]> git.sur5r.net Git - cc65/commitdiff
Added .DEFINEDMACRO psuedo function
authorJT <jeremiah.turner@gmail.com>
Mon, 11 May 2015 00:25:40 +0000 (20:25 -0400)
committerJT <jeremiah.turner@gmail.com>
Sat, 27 Jun 2015 05:39:11 +0000 (01:39 -0400)
Fixed typo/fomatting

Formatting fix

Refactor the code to test for a macro

Remove .FEATURE requirement for .DEFINEDMACRO

doc/ca65.sgml
src/ca65/expr.c
src/ca65/global.c
src/ca65/pseudo.c
src/ca65/scanner.c
src/ca65/token.h

index a40bcddff5822dc5bf2e5accce5529112a6d140e..4beb4e9137770b5e52a867050d5a20d89dff1c88 100644 (file)
@@ -2316,21 +2316,25 @@ Here's a list of all control commands and a description, what they do:
   </verb></tscreen>
 
 
-<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p>
+<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p>
 
   Builtin function. The function expects an identifier as argument in braces.
-  The argument is evaluated, and the function yields "true" if the identifier
-  is defined as an instruction mnemonic that is recognized by the assembler.
-  Example:
+  The argument is evaluated, and the function yields "true" if the identifier 
+  has already been defined as the name of a macro. Otherwise the function yields 
+  false. Example:
 
   <tscreen><verb>
-       .if     .not .ismnemonic(ina)
-               .macro ina
-                       clc
-                       adc #$01
-               .endmacro
-       .endif
-
+        .macro add foo
+                clc
+                adc foo
+        .endmacro
+                 
+       .if     .definedmacro(add)
+                add #$01
+        .else
+                clc
+                adc #$01
+        .endif
   </verb></tscreen>
 
 
@@ -3158,6 +3162,23 @@ Here's a list of all control commands and a description, what they do:
   the feature in more detail.
 
 
+<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p>
+
+  Builtin function. The function expects an identifier as argument in braces.
+  The argument is evaluated, and the function yields "true" if the identifier
+  is defined as an instruction mnemonic that is recognized by the assembler.
+  Example:
+
+  <tscreen><verb>
+       .if     .not .ismnemonic(ina)
+               .macro ina
+                       clc
+                       adc #$01
+               .endmacro
+       .endif
+  </verb></tscreen>
+
+
 <sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
 
   Switch on or off line continuations using the backslash character
index c4da328242b0bd9009c26db32af24cbbe50acc79..32653e9807f54bcfe0a841fb53fcb3fa16d98588 100644 (file)
@@ -435,13 +435,34 @@ static ExprNode* FuncIsMnemonic (void)
             /* Macros and symbols may NOT use the names of instructions, so just check for the instruction */
             Instr = FindInstruction (&CurTok.SVal);
         }
+    }
+    else {
+        Error ("Identifier expected.");
+    }
+    /* Skip the name */
+    NextTok();
+
+    return GenLiteralExpr (Instr > 0);
+}
+
+
+
+static ExprNode* FuncDefinedMacro (void)
+/* Handle the .DEFINEDMACRO builtin function */
+{
+    Macro* Mac = 0;
+
+    /* Check if the identifier is a macro */
+
+    if (CurTok.Tok == TOK_IDENT) {
+        Mac = FindMacro (&CurTok.SVal);
     } else {
         Error ("Identifier expected.");
     }
     /* Skip the name */
     NextTok ();
 
-    return GenLiteralExpr (Instr > 0);
+    return GenLiteralExpr (Mac != 0);
 }
 
 
@@ -1094,8 +1115,8 @@ static ExprNode* Factor (void)
             N = Function (FuncDefined);
             break;
 
-        case TOK_ISMNEMONIC:
-            N = Function (FuncIsMnemonic);
+        case TOK_DEFINEDMACRO:
+            N = Function (FuncDefinedMacro);
             break;
 
         case TOK_HIBYTE:
@@ -1106,6 +1127,10 @@ static ExprNode* Factor (void)
             N = Function (FuncHiWord);
             break;
 
+        case TOK_ISMNEMONIC:
+            N = Function (FuncIsMnemonic);
+            break;
+
         case TOK_LOBYTE:
             N = Function (FuncLoByte);
             break;
index 77ed66e7f5306d4fa4d1cb2c9f0ca9fb1d7105ee..e77b9201c36710b882e564532c9734a42ea09632 100644 (file)
@@ -83,3 +83,4 @@ unsigned char CComments          = 0;   /* Allow C like comments */
 unsigned char ForceRange         = 0;   /* Force values into expected range */
 unsigned char UnderlineInNumbers = 0;   /* Allow underlines in numbers */
 unsigned char AddrSize           = 0;   /* Allow .ADDRSIZE function */
+
index 6d27c05c419c79e6d9298e9d06aaada18ac2b9ea..4484e3c26229474066937cf1da9694a3dc0c9a96 100644 (file)
@@ -1989,6 +1989,7 @@ static CtrlDesc CtrlCmdTab [] = {
     { ccNone,           DoDebugInfo     },
     { ccNone,           DoDefine        },
     { ccNone,           DoUnexpected    },      /* .DEFINED */
+    { ccNone,           DoUnexpected    },      /* .DEFINEDMACRO */
     { ccNone,           DoDelMac        },
     { ccNone,           DoDestructor    },
     { ccNone,           DoDWord         },
index 30494b365335f5e156f251c68b262b0f88364b2a..97ed2c9d9014f0e440cc39ac8ecc23bd3507b4b1 100644 (file)
@@ -132,165 +132,166 @@ struct DotKeyword {
     const char* Key;                    /* MUST be first field */
     token_t     Tok;
 } DotKeywords [] = {
-    { ".A16",           TOK_A16         },
-    { ".A8",            TOK_A8          },
-    { ".ADDR",          TOK_ADDR        },
-    { ".ADDRSIZE",      TOK_ADDRSIZE    },
-    { ".ALIGN",         TOK_ALIGN       },
-    { ".AND",           TOK_BOOLAND     },
-    { ".ASCIIZ",        TOK_ASCIIZ      },
-    { ".ASSERT",        TOK_ASSERT      },
-    { ".AUTOIMPORT",    TOK_AUTOIMPORT  },
-    { ".BANK",          TOK_BANK        },
-    { ".BANKBYTE",      TOK_BANKBYTE    },
-    { ".BANKBYTES",     TOK_BANKBYTES   },
-    { ".BITAND",        TOK_AND         },
-    { ".BITNOT",        TOK_NOT         },
-    { ".BITOR",         TOK_OR          },
-    { ".BITXOR",        TOK_XOR         },
-    { ".BLANK",         TOK_BLANK       },
-    { ".BSS",           TOK_BSS         },
-    { ".BYT",           TOK_BYTE        },
-    { ".BYTE",          TOK_BYTE        },
-    { ".CASE",          TOK_CASE        },
-    { ".CHARMAP",       TOK_CHARMAP     },
-    { ".CODE",          TOK_CODE        },
-    { ".CONCAT",        TOK_CONCAT      },
-    { ".CONDES",        TOK_CONDES      },
-    { ".CONST",         TOK_CONST       },
-    { ".CONSTRUCTOR",   TOK_CONSTRUCTOR },
-    { ".CPU",           TOK_CPU         },
-    { ".DATA",          TOK_DATA        },
-    { ".DBG",           TOK_DBG         },
-    { ".DBYT",          TOK_DBYT        },
-    { ".DEBUGINFO",     TOK_DEBUGINFO   },
-    { ".DEF",           TOK_DEFINED     },
-    { ".DEFINE",        TOK_DEFINE      },
-    { ".DEFINED",       TOK_DEFINED     },
-    { ".DELMAC",        TOK_DELMAC      },
-    { ".DELMACRO",      TOK_DELMAC      },
-    { ".DESTRUCTOR",    TOK_DESTRUCTOR  },
-    { ".DWORD",         TOK_DWORD       },
-    { ".ELSE",          TOK_ELSE        },
-    { ".ELSEIF",        TOK_ELSEIF      },
-    { ".END",           TOK_END         },
-    { ".ENDENUM",       TOK_ENDENUM     },
-    { ".ENDIF",         TOK_ENDIF       },
-    { ".ENDMAC",        TOK_ENDMACRO    },
-    { ".ENDMACRO",      TOK_ENDMACRO    },
-    { ".ENDPROC",       TOK_ENDPROC     },
-    { ".ENDREP",        TOK_ENDREP      },
-    { ".ENDREPEAT",     TOK_ENDREP      },
-    { ".ENDSCOPE",      TOK_ENDSCOPE    },
-    { ".ENDSTRUCT",     TOK_ENDSTRUCT   },
-    { ".ENDUNION",      TOK_ENDUNION    },
-    { ".ENUM",          TOK_ENUM        },
-    { ".ERROR",         TOK_ERROR       },
-    { ".EXITMAC",       TOK_EXITMACRO   },
-    { ".EXITMACRO",     TOK_EXITMACRO   },
-    { ".EXPORT",        TOK_EXPORT      },
-    { ".EXPORTZP",      TOK_EXPORTZP    },
-    { ".FARADDR",       TOK_FARADDR     },
-    { ".FATAL",         TOK_FATAL       },
-    { ".FEATURE",       TOK_FEATURE     },
-    { ".FILEOPT",       TOK_FILEOPT     },
-    { ".FOPT",          TOK_FILEOPT     },
-    { ".FORCEIMPORT",   TOK_FORCEIMPORT },
-    { ".FORCEWORD",     TOK_FORCEWORD   },
-    { ".GLOBAL",        TOK_GLOBAL      },
-    { ".GLOBALZP",      TOK_GLOBALZP    },
-    { ".HIBYTE",        TOK_HIBYTE      },
-    { ".HIBYTES",       TOK_HIBYTES     },
-    { ".HIWORD",        TOK_HIWORD      },
-    { ".I16",           TOK_I16         },
-    { ".I8",            TOK_I8          },
-    { ".IDENT",         TOK_MAKEIDENT   },
-    { ".IF",            TOK_IF          },
-    { ".IFBLANK",       TOK_IFBLANK     },
-    { ".IFCONST",       TOK_IFCONST     },
-    { ".IFDEF",         TOK_IFDEF       },
-    { ".IFNBLANK",      TOK_IFNBLANK    },
-    { ".IFNCONST",      TOK_IFNCONST    },
-    { ".IFNDEF",        TOK_IFNDEF      },
-    { ".IFNREF",        TOK_IFNREF      },
-    { ".IFP02",         TOK_IFP02       },
-    { ".IFP816",        TOK_IFP816      },
-    { ".IFPC02",        TOK_IFPC02      },
-    { ".IFPSC02",       TOK_IFPSC02     },
-    { ".IFREF",         TOK_IFREF       },
-    { ".IMPORT",        TOK_IMPORT      },
-    { ".IMPORTZP",      TOK_IMPORTZP    },
-    { ".INCBIN",        TOK_INCBIN      },
-    { ".INCLUDE",       TOK_INCLUDE     },
-    { ".INTERRUPTOR",   TOK_INTERRUPTOR },
-    { ".ISMNEM",        TOK_ISMNEMONIC  },
-    { ".ISMNEMONIC",    TOK_ISMNEMONIC  },
-    { ".LEFT",          TOK_LEFT        },
-    { ".LINECONT",      TOK_LINECONT    },
-    { ".LIST",          TOK_LIST        },
-    { ".LISTBYTES",     TOK_LISTBYTES   },
-    { ".LOBYTE",        TOK_LOBYTE      },
-    { ".LOBYTES",       TOK_LOBYTES     },
-    { ".LOCAL",         TOK_LOCAL       },
-    { ".LOCALCHAR",     TOK_LOCALCHAR   },
-    { ".LOWORD",        TOK_LOWORD      },
-    { ".MAC",           TOK_MACRO       },
-    { ".MACPACK",       TOK_MACPACK     },
-    { ".MACRO",         TOK_MACRO       },
-    { ".MATCH",         TOK_MATCH       },
-    { ".MAX",           TOK_MAX         },
-    { ".MID",           TOK_MID         },
-    { ".MIN",           TOK_MIN         },
-    { ".MOD",           TOK_MOD         },
-    { ".NOT",           TOK_BOOLNOT     },
-    { ".NULL",          TOK_NULL        },
-    { ".OR",            TOK_BOOLOR      },
-    { ".ORG",           TOK_ORG         },
-    { ".OUT",           TOK_OUT         },
-    { ".P02",           TOK_P02         },
-    { ".P816",          TOK_P816        },
-    { ".PAGELEN",       TOK_PAGELENGTH  },
-    { ".PAGELENGTH",    TOK_PAGELENGTH  },
-    { ".PARAMCOUNT",    TOK_PARAMCOUNT  },
-    { ".PC02",          TOK_PC02        },
-    { ".POPCPU",        TOK_POPCPU      },
-    { ".POPSEG",        TOK_POPSEG      },
-    { ".PROC",          TOK_PROC        },
-    { ".PSC02",         TOK_PSC02       },
-    { ".PUSHCPU",       TOK_PUSHCPU     },
-    { ".PUSHSEG",       TOK_PUSHSEG     },
-    { ".REF",           TOK_REFERENCED  },
-    { ".REFERENCED",    TOK_REFERENCED  },
-    { ".RELOC",         TOK_RELOC       },
-    { ".REPEAT",        TOK_REPEAT      },
-    { ".RES",           TOK_RES         },
-    { ".RIGHT",         TOK_RIGHT       },
-    { ".RODATA",        TOK_RODATA      },
-    { ".SCOPE",         TOK_SCOPE       },
-    { ".SEGMENT",       TOK_SEGMENT     },
-    { ".SET",           TOK_SET         },
-    { ".SETCPU",        TOK_SETCPU      },
-    { ".SHL",           TOK_SHL         },
-    { ".SHR",           TOK_SHR         },
-    { ".SIZEOF",        TOK_SIZEOF      },
-    { ".SMART",         TOK_SMART       },
-    { ".SPRINTF",       TOK_SPRINTF     },
-    { ".STRAT",         TOK_STRAT       },
-    { ".STRING",        TOK_STRING      },
-    { ".STRLEN",        TOK_STRLEN      },
-    { ".STRUCT",        TOK_STRUCT      },
-    { ".TAG",           TOK_TAG         },
-    { ".TCOUNT",        TOK_TCOUNT      },
-    { ".TIME",          TOK_TIME        },
-    { ".UNDEF",         TOK_UNDEF       },
-    { ".UNDEFINE",      TOK_UNDEF       },
-    { ".UNION",         TOK_UNION       },
-    { ".VERSION",       TOK_VERSION     },
-    { ".WARNING",       TOK_WARNING     },
-    { ".WORD",          TOK_WORD        },
-    { ".XMATCH",        TOK_XMATCH      },
-    { ".XOR",           TOK_BOOLXOR     },
-    { ".ZEROPAGE",      TOK_ZEROPAGE    },
+    { ".A16",           TOK_A16                 },
+    { ".A8",            TOK_A8                  },
+    { ".ADDR",          TOK_ADDR                },
+    { ".ADDRSIZE",      TOK_ADDRSIZE            },
+    { ".ALIGN",         TOK_ALIGN               },
+    { ".AND",           TOK_BOOLAND             },
+    { ".ASCIIZ",        TOK_ASCIIZ              },
+    { ".ASSERT",        TOK_ASSERT              },
+    { ".AUTOIMPORT",    TOK_AUTOIMPORT          },
+    { ".BANK",          TOK_BANK                },
+    { ".BANKBYTE",      TOK_BANKBYTE            },
+    { ".BANKBYTES",     TOK_BANKBYTES           },
+    { ".BITAND",        TOK_AND                 },
+    { ".BITNOT",        TOK_NOT                 },
+    { ".BITOR",         TOK_OR                  },
+    { ".BITXOR",        TOK_XOR                 },
+    { ".BLANK",         TOK_BLANK               },
+    { ".BSS",           TOK_BSS                 },
+    { ".BYT",           TOK_BYTE                },
+    { ".BYTE",          TOK_BYTE                },
+    { ".CASE",          TOK_CASE                },
+    { ".CHARMAP",       TOK_CHARMAP             },
+    { ".CODE",          TOK_CODE                },
+    { ".CONCAT",        TOK_CONCAT              },
+    { ".CONDES",        TOK_CONDES              },
+    { ".CONST",         TOK_CONST               },
+    { ".CONSTRUCTOR",   TOK_CONSTRUCTOR         },
+    { ".CPU",           TOK_CPU                 },
+    { ".DATA",          TOK_DATA                },
+    { ".DBG",           TOK_DBG                 },
+    { ".DBYT",          TOK_DBYT                },
+    { ".DEBUGINFO",     TOK_DEBUGINFO           },
+    { ".DEF",           TOK_DEFINED             },
+    { ".DEFINE",        TOK_DEFINE              },
+    { ".DEFINED",       TOK_DEFINED             },
+    { ".DEFINEDMACRO",  TOK_DEFINEDMACRO        },
+    { ".DELMAC",        TOK_DELMAC              },
+    { ".DELMACRO",      TOK_DELMAC              },
+    { ".DESTRUCTOR",    TOK_DESTRUCTOR          },
+    { ".DWORD",         TOK_DWORD               },
+    { ".ELSE",          TOK_ELSE                },
+    { ".ELSEIF",        TOK_ELSEIF              },
+    { ".END",           TOK_END                 },
+    { ".ENDENUM",       TOK_ENDENUM             },
+    { ".ENDIF",         TOK_ENDIF               },
+    { ".ENDMAC",        TOK_ENDMACRO            },
+    { ".ENDMACRO",      TOK_ENDMACRO            },
+    { ".ENDPROC",       TOK_ENDPROC             },
+    { ".ENDREP",        TOK_ENDREP              },
+    { ".ENDREPEAT",     TOK_ENDREP              },
+    { ".ENDSCOPE",      TOK_ENDSCOPE            },
+    { ".ENDSTRUCT",     TOK_ENDSTRUCT           },
+    { ".ENDUNION",      TOK_ENDUNION            },
+    { ".ENUM",          TOK_ENUM                },
+    { ".ERROR",         TOK_ERROR               },
+    { ".EXITMAC",       TOK_EXITMACRO           },
+    { ".EXITMACRO",     TOK_EXITMACRO           },
+    { ".EXPORT",        TOK_EXPORT              },
+    { ".EXPORTZP",      TOK_EXPORTZP            },
+    { ".FARADDR",       TOK_FARADDR             },
+    { ".FATAL",         TOK_FATAL               },
+    { ".FEATURE",       TOK_FEATURE             },
+    { ".FILEOPT",       TOK_FILEOPT             },
+    { ".FOPT",          TOK_FILEOPT             },
+    { ".FORCEIMPORT",   TOK_FORCEIMPORT         },
+    { ".FORCEWORD",     TOK_FORCEWORD           },
+    { ".GLOBAL",        TOK_GLOBAL              },
+    { ".GLOBALZP",      TOK_GLOBALZP            },
+    { ".HIBYTE",        TOK_HIBYTE              },
+    { ".HIBYTES",       TOK_HIBYTES             },
+    { ".HIWORD",        TOK_HIWORD              },
+    { ".I16",           TOK_I16                 },
+    { ".I8",            TOK_I8                  },
+    { ".IDENT",         TOK_MAKEIDENT           },
+    { ".IF",            TOK_IF                  },
+    { ".IFBLANK",       TOK_IFBLANK             },
+    { ".IFCONST",       TOK_IFCONST             },
+    { ".IFDEF",         TOK_IFDEF               },
+    { ".IFNBLANK",      TOK_IFNBLANK            },
+    { ".IFNCONST",      TOK_IFNCONST            },
+    { ".IFNDEF",        TOK_IFNDEF              },
+    { ".IFNREF",        TOK_IFNREF              },
+    { ".IFP02",         TOK_IFP02               },
+    { ".IFP816",        TOK_IFP816              },
+    { ".IFPC02",        TOK_IFPC02              },
+    { ".IFPSC02",       TOK_IFPSC02             },
+    { ".IFREF",         TOK_IFREF               },
+    { ".IMPORT",        TOK_IMPORT              },
+    { ".IMPORTZP",      TOK_IMPORTZP            },
+    { ".INCBIN",        TOK_INCBIN              },
+    { ".INCLUDE",       TOK_INCLUDE             },
+    { ".INTERRUPTOR",   TOK_INTERRUPTOR         },
+    { ".ISMNEM",        TOK_ISMNEMONIC          },
+    { ".ISMNEMONIC",    TOK_ISMNEMONIC          },
+    { ".LEFT",          TOK_LEFT                },
+    { ".LINECONT",      TOK_LINECONT            },
+    { ".LIST",          TOK_LIST                },
+    { ".LISTBYTES",     TOK_LISTBYTES           },
+    { ".LOBYTE",        TOK_LOBYTE              },
+    { ".LOBYTES",       TOK_LOBYTES             },
+    { ".LOCAL",         TOK_LOCAL               },
+    { ".LOCALCHAR",     TOK_LOCALCHAR           },
+    { ".LOWORD",        TOK_LOWORD              },
+    { ".MAC",           TOK_MACRO               },
+    { ".MACPACK",       TOK_MACPACK             },
+    { ".MACRO",         TOK_MACRO               },
+    { ".MATCH",         TOK_MATCH               },
+    { ".MAX",           TOK_MAX                 },
+    { ".MID",           TOK_MID                 },
+    { ".MIN",           TOK_MIN                 },
+    { ".MOD",           TOK_MOD                 },
+    { ".NOT",           TOK_BOOLNOT             },
+    { ".NULL",          TOK_NULL                },
+    { ".OR",            TOK_BOOLOR              },
+    { ".ORG",           TOK_ORG                 },
+    { ".OUT",           TOK_OUT                 },
+    { ".P02",           TOK_P02                 },
+    { ".P816",          TOK_P816                },
+    { ".PAGELEN",       TOK_PAGELENGTH          },
+    { ".PAGELENGTH",    TOK_PAGELENGTH          },
+    { ".PARAMCOUNT",    TOK_PARAMCOUNT          },
+    { ".PC02",          TOK_PC02                },
+    { ".POPCPU",        TOK_POPCPU              },
+    { ".POPSEG",        TOK_POPSEG              },
+    { ".PROC",          TOK_PROC                },
+    { ".PSC02",         TOK_PSC02               },
+    { ".PUSHCPU",       TOK_PUSHCPU             },
+    { ".PUSHSEG",       TOK_PUSHSEG             },
+    { ".REF",           TOK_REFERENCED          },
+    { ".REFERENCED",    TOK_REFERENCED          },
+    { ".RELOC",         TOK_RELOC               },
+    { ".REPEAT",        TOK_REPEAT              },
+    { ".RES",           TOK_RES                 },
+    { ".RIGHT",         TOK_RIGHT               },
+    { ".RODATA",        TOK_RODATA              },
+    { ".SCOPE",         TOK_SCOPE               },
+    { ".SEGMENT",       TOK_SEGMENT             },
+    { ".SET",           TOK_SET                 },
+    { ".SETCPU",        TOK_SETCPU              },
+    { ".SHL",           TOK_SHL                 },
+    { ".SHR",           TOK_SHR                 },
+    { ".SIZEOF",        TOK_SIZEOF              },
+    { ".SMART",         TOK_SMART               },
+    { ".SPRINTF",       TOK_SPRINTF             },
+    { ".STRAT",         TOK_STRAT               },
+    { ".STRING",        TOK_STRING              },
+    { ".STRLEN",        TOK_STRLEN              },
+    { ".STRUCT",        TOK_STRUCT              },
+    { ".TAG",           TOK_TAG                 },
+    { ".TCOUNT",        TOK_TCOUNT              },
+    { ".TIME",          TOK_TIME                },
+    { ".UNDEF",         TOK_UNDEF               },
+    { ".UNDEFINE",      TOK_UNDEF               },
+    { ".UNION",         TOK_UNION               },
+    { ".VERSION",       TOK_VERSION             },
+    { ".WARNING",       TOK_WARNING             },
+    { ".WORD",          TOK_WORD                },
+    { ".XMATCH",        TOK_XMATCH              },
+    { ".XOR",           TOK_BOOLXOR             },
+    { ".ZEROPAGE",      TOK_ZEROPAGE            },
 };
 
 
index 5ffe424666c9407bb59c176a1c7a335b00c91a98..b0264f1548c7d48cf3aed005583c2726ba044374 100644 (file)
@@ -148,6 +148,7 @@ typedef enum token_t {
     TOK_DEBUGINFO,
     TOK_DEFINE,
     TOK_DEFINED,
+    TOK_DEFINEDMACRO,
     TOK_DELMAC,
     TOK_DESTRUCTOR,
     TOK_DWORD,