X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=token.h;h=832301c1f8e493b8b6da1b6c0ffc75a9e4192176;hp=65b5b831a7dc1d5c126d28c8c7198009a0814dd4;hb=bdbf34766f4d074a5933eb1326fe4ce03d249e10;hpb=96a5cd69571096f11a3a2a40f6133374f0adc9bb diff --git a/token.h b/token.h index 65b5b83..832301c 100644 --- a/token.h +++ b/token.h @@ -1,7 +1,7 @@ // // RMAC - Reboot's Macro Assembler for all Atari computers // TOKEN.H - Token Handling -// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -34,6 +34,7 @@ // (Normally) non-printable tokens #define COLON ':' // : (grumble: GNUmacs hates ':') #define CONST 'a' // CONST +#define FCONST 'r' // Floating CONST #define ACONST 'A' // ACONST #define STRING 'b' // STRING
#define STRINGA8 'S' // Atari 800 internal STRING
@@ -62,6 +63,8 @@ #define DOTQ 'Q' // .q or .Q (essentially an alias for P) #define DOTS 'S' // .s or .S (FPU Single) #define ENDEXPR 'E' // End of expression +#define UNLT 0x81 // Unary '<' (low byte) +#define UNGT 0x82 // Unary '>' (high byte) // ^^ operators #define CR_DEFINED 'p' // ^^defined - is symbol defined? @@ -84,13 +87,16 @@ #define MULTX 64 // Multiple-character tokens #define DOT 128 // [bwlsBWSL] for what follows a '.' +// Macro to check for specific optimizations or override +#define CHECK_OPTS(x) (optim_flags[x] && !optimizeOff) + // Conditional assembly structures IFENT { IFENT * if_prev; // Ptr prev .if state block (or NULL) WORD if_state; // 0:enabled, 1:disabled }; -// Pointer to IFILE or IMACRO +// Pointer to IFILE or IMACRO or IREPT IUNION { IFILE * ifile; IMACRO * imacro; @@ -99,12 +105,12 @@ IUNION { // Ptr to IFILEs, IMACROs, and so on; back-ptr to previous input objects INOBJ { - WORD in_type; // 0=IFILE, 1=IMACRO ... + WORD in_type; // 0=IFILE, 1=IMACRO, 2=IREPT IFENT * in_ifent; // Pointer to .if context on entry INOBJ * in_link; // Pointer to previous INOBJ TOKEN * in_otok; // Old `tok' value TOKEN * in_etok; // Old `etok' value - IUNION inobj; // IFILE or IMACRO ... + IUNION inobj; // IFILE or IMACRO or IREPT }; // Information about a file @@ -128,21 +134,21 @@ TOKENSTREAM { // Information about a macro invocation IMACRO { IMACRO * im_link; // Pointer to ancient IMACROs - struct LineList * im_nextln; // Next line to include + LLIST * im_nextln; // Next line to include WORD im_nargs; // # of arguments supplied on invocation WORD im_siz; // Size suffix supplied on invocation LONG im_olduniq; // Old value of 'macuniq' SYM * im_macro; // Pointer to macro we're in char im_lnbuf[LNSIZ]; // Line buffer - uint32_t argBase; // Base in argPtrs[] for current macro TOKENSTREAM argument[20]; // Assume no more than 20 arguments in an invocation }; // Information about a .rept invocation IREPT { - LONG * ir_firstln; // Pointer to first line - LONG * ir_nextln; // Pointer to next line - VALUE ir_count; // Repeat count (decrements) + LLIST * ir_firstln; // Pointer to first line + LLIST * ir_nextln; // Pointer to next line + uint32_t ir_count; // Repeat count (decrements) + uint32_t lineno; // Repeat line number (Convert this to global instead of putting it here?) }; // Exported variables @@ -157,6 +163,7 @@ extern char tolowertab[]; extern INOBJ * cur_inobj; extern int mjump_align; extern char * string[]; +extern int optimizeOff; // Exported functions int include(int, char *); @@ -166,6 +173,7 @@ int TokenizeLine(void); int fpop(void); int d_goto(WORD); INOBJ * a_inobj(int); +void DumpToken(TOKEN); void DumpTokenBuffer(void); #endif // __TOKEN_H__