Add new feature "leading_dot_in_identifiers".
git-svn-id: svn://svn.cc65.org/cc65/trunk@1156 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -146,7 +146,7 @@ void ErrorMsg (const FilePos* Pos, unsigned ErrNum, va_list ap)
|
|||||||
"Character constant expected",
|
"Character constant expected",
|
||||||
"Constant expression expected",
|
"Constant expression expected",
|
||||||
"Identifier expected",
|
"Identifier expected",
|
||||||
"`.endmacro' expected",
|
"`.ENDMACRO' expected",
|
||||||
"Option key expected",
|
"Option key expected",
|
||||||
"`=' expected",
|
"`=' expected",
|
||||||
"Command is only valid in 65816 mode",
|
"Command is only valid in 65816 mode",
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000 Ullrich von Bassewitz */
|
/* (C) 2000-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@musoftware.de */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@@ -55,6 +55,7 @@ static const char* FeatureKeys[FEAT_COUNT] = {
|
|||||||
"loose_char_term",
|
"loose_char_term",
|
||||||
"at_in_identifiers",
|
"at_in_identifiers",
|
||||||
"dollar_in_identifiers",
|
"dollar_in_identifiers",
|
||||||
|
"leading_dot_in_identifiers",
|
||||||
"pc_assignment",
|
"pc_assignment",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -98,15 +99,16 @@ feature_t SetFeature (const char* Key)
|
|||||||
|
|
||||||
/* Set the flags */
|
/* Set the flags */
|
||||||
switch (Feature) {
|
switch (Feature) {
|
||||||
case FEAT_DOLLAR_IS_PC: DollarIsPC = 1; break;
|
case FEAT_DOLLAR_IS_PC: DollarIsPC = 1; break;
|
||||||
case FEAT_LABELS_WITHOUT_COLONS: NoColonLabels = 1; break;
|
case FEAT_LABELS_WITHOUT_COLONS: NoColonLabels = 1; break;
|
||||||
case FEAT_LOOSE_STRING_TERM: LooseStringTerm= 1; break;
|
case FEAT_LOOSE_STRING_TERM: LooseStringTerm = 1; break;
|
||||||
case FEAT_LOOSE_CHAR_TERM: LooseCharTerm = 1; break;
|
case FEAT_LOOSE_CHAR_TERM: LooseCharTerm = 1; break;
|
||||||
case FEAT_AT_IN_IDENTIFIERS: AtInIdents = 1; break;
|
case FEAT_AT_IN_IDENTIFIERS: AtInIdents = 1; break;
|
||||||
case FEAT_DOLLAR_IN_IDENTIFIERS: DollarInIdents = 1; break;
|
case FEAT_DOLLAR_IN_IDENTIFIERS: DollarInIdents = 1; break;
|
||||||
case FEAT_PC_ASSIGNMENT: PCAssignment = 1; break;
|
case FEAT_LEADING_DOT_IN_IDENTIFIERS: LeadingDotInIdents= 1; break;
|
||||||
default: /* Keep gcc silent */ break;
|
case FEAT_PC_ASSIGNMENT: PCAssignment = 1; break;
|
||||||
}
|
default: /* Keep gcc silent */ break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the value found */
|
/* Return the value found */
|
||||||
return Feature;
|
return Feature;
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000 Ullrich von Bassewitz */
|
/* (C) 2000-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@musoftware.de */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@@ -52,6 +52,7 @@ typedef enum {
|
|||||||
FEAT_LOOSE_CHAR_TERM,
|
FEAT_LOOSE_CHAR_TERM,
|
||||||
FEAT_AT_IN_IDENTIFIERS,
|
FEAT_AT_IN_IDENTIFIERS,
|
||||||
FEAT_DOLLAR_IN_IDENTIFIERS,
|
FEAT_DOLLAR_IN_IDENTIFIERS,
|
||||||
|
FEAT_LEADING_DOT_IN_IDENTIFIERS,
|
||||||
FEAT_PC_ASSIGNMENT,
|
FEAT_PC_ASSIGNMENT,
|
||||||
|
|
||||||
/* Special value: Number of features available */
|
/* Special value: Number of features available */
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
/* (C) 1998-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@musoftware.de */
|
||||||
@@ -44,31 +44,32 @@
|
|||||||
|
|
||||||
|
|
||||||
/* File names */
|
/* File names */
|
||||||
const char* InFile = 0; /* Name of input file */
|
const char* InFile = 0; /* Name of input file */
|
||||||
const char* OutFile = 0; /* Name of output file */
|
const char* OutFile = 0; /* Name of output file */
|
||||||
const char* ListFile = 0; /* Name of listing file */
|
const char* ListFile = 0; /* Name of listing file */
|
||||||
|
|
||||||
/* Default extensions */
|
/* Default extensions */
|
||||||
const char ObjExt[] = ".o"; /* Default object extension */
|
const char ObjExt[] = ".o";/* Default object extension */
|
||||||
const char ListExt[] = ".lst"; /* Default listing extension */
|
const char ListExt[] = ".lst"; /* Default listing extension */
|
||||||
|
|
||||||
char LocalStart = '@'; /* This char starts local symbols */
|
char LocalStart = '@'; /* This char starts local symbols */
|
||||||
|
|
||||||
unsigned char IgnoreCase = 0; /* Ignore case on identifiers? */
|
unsigned char IgnoreCase = 0; /* Ignore case on identifiers? */
|
||||||
unsigned char AutoImport = 0; /* Mark unresolveds as import */
|
unsigned char AutoImport = 0; /* Mark unresolveds as import */
|
||||||
unsigned char SmartMode = 0; /* Smart mode */
|
unsigned char SmartMode = 0; /* Smart mode */
|
||||||
unsigned char DbgSyms = 0; /* Add debug symbols */
|
unsigned char DbgSyms = 0; /* Add debug symbols */
|
||||||
unsigned char Listing = 0; /* Create listing file */
|
unsigned char Listing = 0; /* Create listing file */
|
||||||
unsigned char LineCont = 0; /* Allow line continuation */
|
unsigned char LineCont = 0; /* Allow line continuation */
|
||||||
|
|
||||||
/* Emulation features */
|
/* Emulation features */
|
||||||
unsigned char DollarIsPC = 0; /* Allow the $ symbol as current PC */
|
unsigned char DollarIsPC = 0; /* Allow the $ symbol as current PC */
|
||||||
unsigned char NoColonLabels = 0; /* Allow labels without a colon */
|
unsigned char NoColonLabels = 0; /* Allow labels without a colon */
|
||||||
unsigned char LooseStringTerm = 0; /* Allow ' as string terminator */
|
unsigned char LooseStringTerm = 0; /* Allow ' as string terminator */
|
||||||
unsigned char LooseCharTerm = 0; /* Allow " for char constants */
|
unsigned char LooseCharTerm = 0; /* Allow " for char constants */
|
||||||
unsigned char AtInIdents = 0; /* Allow '@' in identifiers */
|
unsigned char AtInIdents = 0; /* Allow '@' in identifiers */
|
||||||
unsigned char DollarInIdents = 0; /* Allow '$' in identifiers */
|
unsigned char DollarInIdents = 0; /* Allow '$' in identifiers */
|
||||||
unsigned char PCAssignment = 0; /* Allow "* = $XXX" or "$ = $XXX" */
|
unsigned char LeadingDotInIdents = 0; /* Allow '.' to start an identifier */
|
||||||
|
unsigned char PCAssignment = 0; /* Allow "* = $XXX" or "$ = $XXX" */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
/* (C) 1998-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@musoftware.de */
|
||||||
@@ -39,37 +39,38 @@
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Data */
|
/* Data */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* File names */
|
/* File names */
|
||||||
extern const char* InFile; /* Name of input file */
|
extern const char* InFile; /* Name of input file */
|
||||||
extern const char* OutFile; /* Name of output file */
|
extern const char* OutFile; /* Name of output file */
|
||||||
extern const char* ListFile; /* Name of listing file */
|
extern const char* ListFile; /* Name of listing file */
|
||||||
|
|
||||||
/* Default extensions */
|
/* Default extensions */
|
||||||
extern const char ObjExt[]; /* Default object extension */
|
extern const char ObjExt[]; /* Default object extension */
|
||||||
extern const char ListExt[]; /* Default listing extension */
|
extern const char ListExt[]; /* Default listing extension */
|
||||||
|
|
||||||
extern char LocalStart; /* This char starts local symbols */
|
extern char LocalStart; /* This char starts local symbols */
|
||||||
|
|
||||||
extern unsigned char IgnoreCase; /* Ignore case on identifiers? */
|
extern unsigned char IgnoreCase; /* Ignore case on identifiers? */
|
||||||
extern unsigned char AutoImport; /* Mark unresolveds as import */
|
extern unsigned char AutoImport; /* Mark unresolveds as import */
|
||||||
extern unsigned char SmartMode; /* Smart mode */
|
extern unsigned char SmartMode; /* Smart mode */
|
||||||
extern unsigned char DbgSyms; /* Add debug symbols */
|
extern unsigned char DbgSyms; /* Add debug symbols */
|
||||||
extern unsigned char Listing; /* Create listing file */
|
extern unsigned char Listing; /* Create listing file */
|
||||||
extern unsigned char LineCont; /* Allow line continuation */
|
extern unsigned char LineCont; /* Allow line continuation */
|
||||||
|
|
||||||
/* Emulation features */
|
/* Emulation features */
|
||||||
extern unsigned char DollarIsPC; /* Allow the $ symbol as current PC */
|
extern unsigned char DollarIsPC; /* Allow the $ symbol as current PC */
|
||||||
extern unsigned char NoColonLabels; /* Allow labels without a colon */
|
extern unsigned char NoColonLabels; /* Allow labels without a colon */
|
||||||
extern unsigned char LooseStringTerm;/* Allow ' as string terminator */
|
extern unsigned char LooseStringTerm; /* Allow ' as string terminator */
|
||||||
extern unsigned char LooseCharTerm; /* Allow " for char constants */
|
extern unsigned char LooseCharTerm; /* Allow " for char constants */
|
||||||
extern unsigned char AtInIdents; /* Allow '@' in identifiers */
|
extern unsigned char AtInIdents; /* Allow '@' in identifiers */
|
||||||
extern unsigned char DollarInIdents; /* Allow '$' in identifiers */
|
extern unsigned char DollarInIdents; /* Allow '$' in identifiers */
|
||||||
extern unsigned char PCAssignment; /* Allow "* = $XXX" or "$ = $XXX" */
|
extern unsigned char LeadingDotInIdents; /* Allow '.' to start an identifier */
|
||||||
|
extern unsigned char PCAssignment; /* Allow "* = $XXX" or "$ = $XXX" */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
/* (C) 1998-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@musoftware.de */
|
||||||
@@ -117,121 +117,121 @@ struct DotKeyword {
|
|||||||
const char* Key; /* MUST be first field */
|
const char* Key; /* MUST be first field */
|
||||||
enum Token Tok;
|
enum Token Tok;
|
||||||
} DotKeywords [] = {
|
} DotKeywords [] = {
|
||||||
{ "A16", TOK_A16 },
|
{ ".A16", TOK_A16 },
|
||||||
{ "A8", TOK_A8 },
|
{ ".A8", TOK_A8 },
|
||||||
{ "ADDR", TOK_ADDR },
|
{ ".ADDR", TOK_ADDR },
|
||||||
{ "ALIGN", TOK_ALIGN },
|
{ ".ALIGN", TOK_ALIGN },
|
||||||
{ "AND", TOK_BAND },
|
{ ".AND", TOK_BAND },
|
||||||
{ "ASCIIZ", TOK_ASCIIZ },
|
{ ".ASCIIZ", TOK_ASCIIZ },
|
||||||
{ "AUTOIMPORT", TOK_AUTOIMPORT },
|
{ ".AUTOIMPORT", TOK_AUTOIMPORT },
|
||||||
{ "BITAND", TOK_AND },
|
{ ".BITAND", TOK_AND },
|
||||||
{ "BITNOT", TOK_NOT },
|
{ ".BITNOT", TOK_NOT },
|
||||||
{ "BITOR", TOK_OR },
|
{ ".BITOR", TOK_OR },
|
||||||
{ "BITXOR", TOK_XOR },
|
{ ".BITXOR", TOK_XOR },
|
||||||
{ "BLANK", TOK_BLANK },
|
{ ".BLANK", TOK_BLANK },
|
||||||
{ "BSS", TOK_BSS },
|
{ ".BSS", TOK_BSS },
|
||||||
{ "BYT", TOK_BYTE },
|
{ ".BYT", TOK_BYTE },
|
||||||
{ "BYTE", TOK_BYTE },
|
{ ".BYTE", TOK_BYTE },
|
||||||
{ "CASE", TOK_CASE },
|
{ ".CASE", TOK_CASE },
|
||||||
{ "CODE", TOK_CODE },
|
{ ".CODE", TOK_CODE },
|
||||||
{ "CONCAT", TOK_CONCAT },
|
{ ".CONCAT", TOK_CONCAT },
|
||||||
{ "CONDES", TOK_CONDES },
|
{ ".CONDES", TOK_CONDES },
|
||||||
{ "CONST", TOK_CONST },
|
{ ".CONST", TOK_CONST },
|
||||||
{ "CONSTRUCTOR", TOK_CONSTRUCTOR },
|
{ ".CONSTRUCTOR", TOK_CONSTRUCTOR },
|
||||||
{ "CPU", TOK_CPU },
|
{ ".CPU", TOK_CPU },
|
||||||
{ "DATA", TOK_DATA },
|
{ ".DATA", TOK_DATA },
|
||||||
{ "DBG", TOK_DBG },
|
{ ".DBG", TOK_DBG },
|
||||||
{ "DBYT", TOK_DBYT },
|
{ ".DBYT", TOK_DBYT },
|
||||||
{ "DEBUGINFO", TOK_DEBUGINFO },
|
{ ".DEBUGINFO", TOK_DEBUGINFO },
|
||||||
{ "DEF", TOK_DEFINED },
|
{ ".DEF", TOK_DEFINED },
|
||||||
{ "DEFINE", TOK_DEFINE },
|
{ ".DEFINE", TOK_DEFINE },
|
||||||
{ "DEFINED", TOK_DEFINED },
|
{ ".DEFINED", TOK_DEFINED },
|
||||||
{ "DESTRUCTOR", TOK_DESTRUCTOR },
|
{ ".DESTRUCTOR", TOK_DESTRUCTOR },
|
||||||
{ "DWORD", TOK_DWORD },
|
{ ".DWORD", TOK_DWORD },
|
||||||
{ "ELSE", TOK_ELSE },
|
{ ".ELSE", TOK_ELSE },
|
||||||
{ "ELSEIF", TOK_ELSEIF },
|
{ ".ELSEIF", TOK_ELSEIF },
|
||||||
{ "END", TOK_END },
|
{ ".END", TOK_END },
|
||||||
{ "ENDIF", TOK_ENDIF },
|
{ ".ENDIF", TOK_ENDIF },
|
||||||
{ "ENDMAC", TOK_ENDMACRO },
|
{ ".ENDMAC", TOK_ENDMACRO },
|
||||||
{ "ENDMACRO", TOK_ENDMACRO },
|
{ ".ENDMACRO", TOK_ENDMACRO },
|
||||||
{ "ENDPROC", TOK_ENDPROC },
|
{ ".ENDPROC", TOK_ENDPROC },
|
||||||
{ "ENDREP", TOK_ENDREP },
|
{ ".ENDREP", TOK_ENDREP },
|
||||||
{ "ENDREPEAT", TOK_ENDREP },
|
{ ".ENDREPEAT", TOK_ENDREP },
|
||||||
{ "ERROR", TOK_ERROR },
|
{ ".ERROR", TOK_ERROR },
|
||||||
{ "EXITMAC", TOK_EXITMACRO },
|
{ ".EXITMAC", TOK_EXITMACRO },
|
||||||
{ "EXITMACRO", TOK_EXITMACRO },
|
{ ".EXITMACRO", TOK_EXITMACRO },
|
||||||
{ "EXPORT", TOK_EXPORT },
|
{ ".EXPORT", TOK_EXPORT },
|
||||||
{ "EXPORTZP", TOK_EXPORTZP },
|
{ ".EXPORTZP", TOK_EXPORTZP },
|
||||||
{ "FARADDR", TOK_FARADDR },
|
{ ".FARADDR", TOK_FARADDR },
|
||||||
{ "FEATURE", TOK_FEATURE },
|
{ ".FEATURE", TOK_FEATURE },
|
||||||
{ "FILEOPT", TOK_FILEOPT },
|
{ ".FILEOPT", TOK_FILEOPT },
|
||||||
{ "FOPT", TOK_FILEOPT },
|
{ ".FOPT", TOK_FILEOPT },
|
||||||
{ "FORCEWORD", TOK_FORCEWORD },
|
{ ".FORCEWORD", TOK_FORCEWORD },
|
||||||
{ "GLOBAL", TOK_GLOBAL },
|
{ ".GLOBAL", TOK_GLOBAL },
|
||||||
{ "GLOBALZP", TOK_GLOBALZP },
|
{ ".GLOBALZP", TOK_GLOBALZP },
|
||||||
{ "I16", TOK_I16 },
|
{ ".I16", TOK_I16 },
|
||||||
{ "I8", TOK_I8 },
|
{ ".I8", TOK_I8 },
|
||||||
{ "IF", TOK_IF },
|
{ ".IF", TOK_IF },
|
||||||
{ "IFBLANK", TOK_IFBLANK },
|
{ ".IFBLANK", TOK_IFBLANK },
|
||||||
{ "IFCONST", TOK_IFCONST },
|
{ ".IFCONST", TOK_IFCONST },
|
||||||
{ "IFDEF", TOK_IFDEF },
|
{ ".IFDEF", TOK_IFDEF },
|
||||||
{ "IFNBLANK", TOK_IFNBLANK },
|
{ ".IFNBLANK", TOK_IFNBLANK },
|
||||||
{ "IFNCONST", TOK_IFNCONST },
|
{ ".IFNCONST", TOK_IFNCONST },
|
||||||
{ "IFNDEF", TOK_IFNDEF },
|
{ ".IFNDEF", TOK_IFNDEF },
|
||||||
{ "IFNREF", TOK_IFNREF },
|
{ ".IFNREF", TOK_IFNREF },
|
||||||
{ "IFP02", TOK_IFP02 },
|
{ ".IFP02", TOK_IFP02 },
|
||||||
{ "IFP816", TOK_IFP816 },
|
{ ".IFP816", TOK_IFP816 },
|
||||||
{ "IFPC02", TOK_IFPC02 },
|
{ ".IFPC02", TOK_IFPC02 },
|
||||||
{ "IFREF", TOK_IFREF },
|
{ ".IFREF", TOK_IFREF },
|
||||||
{ "IMPORT", TOK_IMPORT },
|
{ ".IMPORT", TOK_IMPORT },
|
||||||
{ "IMPORTZP", TOK_IMPORTZP },
|
{ ".IMPORTZP", TOK_IMPORTZP },
|
||||||
{ "INCBIN", TOK_INCBIN },
|
{ ".INCBIN", TOK_INCBIN },
|
||||||
{ "INCLUDE", TOK_INCLUDE },
|
{ ".INCLUDE", TOK_INCLUDE },
|
||||||
{ "LEFT", TOK_LEFT },
|
{ ".LEFT", TOK_LEFT },
|
||||||
{ "LINECONT", TOK_LINECONT },
|
{ ".LINECONT", TOK_LINECONT },
|
||||||
{ "LIST", TOK_LIST },
|
{ ".LIST", TOK_LIST },
|
||||||
{ "LISTBYTES", TOK_LISTBYTES },
|
{ ".LISTBYTES", TOK_LISTBYTES },
|
||||||
{ "LOCAL", TOK_LOCAL },
|
{ ".LOCAL", TOK_LOCAL },
|
||||||
{ "LOCALCHAR", TOK_LOCALCHAR },
|
{ ".LOCALCHAR", TOK_LOCALCHAR },
|
||||||
{ "MAC", TOK_MACRO },
|
{ ".MAC", TOK_MACRO },
|
||||||
{ "MACPACK", TOK_MACPACK },
|
{ ".MACPACK", TOK_MACPACK },
|
||||||
{ "MACRO", TOK_MACRO },
|
{ ".MACRO", TOK_MACRO },
|
||||||
{ "MATCH", TOK_MATCH },
|
{ ".MATCH", TOK_MATCH },
|
||||||
{ "MID", TOK_MID },
|
{ ".MID", TOK_MID },
|
||||||
{ "MOD", TOK_MOD },
|
{ ".MOD", TOK_MOD },
|
||||||
{ "NOT", TOK_BNOT },
|
{ ".NOT", TOK_BNOT },
|
||||||
{ "NULL", TOK_NULL },
|
{ ".NULL", TOK_NULL },
|
||||||
{ "OR", TOK_BOR },
|
{ ".OR", TOK_BOR },
|
||||||
{ "ORG", TOK_ORG },
|
{ ".ORG", TOK_ORG },
|
||||||
{ "OUT", TOK_OUT },
|
{ ".OUT", TOK_OUT },
|
||||||
{ "P02", TOK_P02 },
|
{ ".P02", TOK_P02 },
|
||||||
{ "P816", TOK_P816 },
|
{ ".P816", TOK_P816 },
|
||||||
{ "PAGELEN", TOK_PAGELENGTH },
|
{ ".PAGELEN", TOK_PAGELENGTH },
|
||||||
{ "PAGELENGTH", TOK_PAGELENGTH },
|
{ ".PAGELENGTH", TOK_PAGELENGTH },
|
||||||
{ "PARAMCOUNT", TOK_PARAMCOUNT },
|
{ ".PARAMCOUNT", TOK_PARAMCOUNT },
|
||||||
{ "PC02", TOK_PC02 },
|
{ ".PC02", TOK_PC02 },
|
||||||
{ "PROC", TOK_PROC },
|
{ ".PROC", TOK_PROC },
|
||||||
{ "REF", TOK_REFERENCED },
|
{ ".REF", TOK_REFERENCED },
|
||||||
{ "REFERENCED", TOK_REFERENCED },
|
{ ".REFERENCED", TOK_REFERENCED },
|
||||||
{ "RELOC", TOK_RELOC },
|
{ ".RELOC", TOK_RELOC },
|
||||||
{ "REPEAT", TOK_REPEAT },
|
{ ".REPEAT", TOK_REPEAT },
|
||||||
{ "RES", TOK_RES },
|
{ ".RES", TOK_RES },
|
||||||
{ "RIGHT", TOK_RIGHT },
|
{ ".RIGHT", TOK_RIGHT },
|
||||||
{ "RODATA", TOK_RODATA },
|
{ ".RODATA", TOK_RODATA },
|
||||||
{ "SEGMENT", TOK_SEGMENT },
|
{ ".SEGMENT", TOK_SEGMENT },
|
||||||
{ "SHL", TOK_SHL },
|
{ ".SHL", TOK_SHL },
|
||||||
{ "SHR", TOK_SHR },
|
{ ".SHR", TOK_SHR },
|
||||||
{ "SMART", TOK_SMART },
|
{ ".SMART", TOK_SMART },
|
||||||
{ "STRAT", TOK_STRAT },
|
{ ".STRAT", TOK_STRAT },
|
||||||
{ "STRING", TOK_STRING },
|
{ ".STRING", TOK_STRING },
|
||||||
{ "STRLEN", TOK_STRLEN },
|
{ ".STRLEN", TOK_STRLEN },
|
||||||
{ "SUNPLUS", TOK_SUNPLUS },
|
{ ".SUNPLUS", TOK_SUNPLUS },
|
||||||
{ "TCOUNT", TOK_TCOUNT },
|
{ ".TCOUNT", TOK_TCOUNT },
|
||||||
{ "WARNING", TOK_WARNING },
|
{ ".WARNING", TOK_WARNING },
|
||||||
{ "WORD", TOK_WORD },
|
{ ".WORD", TOK_WORD },
|
||||||
{ "XMATCH", TOK_XMATCH },
|
{ ".XMATCH", TOK_XMATCH },
|
||||||
{ "XOR", TOK_BXOR },
|
{ ".XOR", TOK_BXOR },
|
||||||
{ "ZEROPAGE", TOK_ZEROPAGE },
|
{ ".ZEROPAGE", TOK_ZEROPAGE },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -524,20 +524,20 @@ static unsigned char FindDotKeyword (void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void ReadIdent (void)
|
static void ReadIdent (unsigned Index)
|
||||||
/* Read an identifier from the current input position into Ident. It is
|
/* Read an identifier from the current input position into Ident. Filling SVal
|
||||||
* assumed that the first character has already been checked.
|
* starts at Index with the current character in C. It is assumed that any
|
||||||
|
* characters already filled in are ok, and the character in C is checked.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
/* Read the identifier */
|
/* Read the identifier */
|
||||||
unsigned I = 0;
|
|
||||||
do {
|
do {
|
||||||
if (I < MAX_STR_LEN) {
|
if (Index < MAX_STR_LEN) {
|
||||||
SVal [I++] = C;
|
SVal [Index++] = C;
|
||||||
}
|
}
|
||||||
NextChar ();
|
NextChar ();
|
||||||
} while (IsIdChar (C));
|
} while (IsIdChar (C));
|
||||||
SVal [I] = '\0';
|
SVal [Index] = '\0';
|
||||||
|
|
||||||
/* If we should ignore case, convert the identifier to upper case */
|
/* If we should ignore case, convert the identifier to upper case */
|
||||||
if (IgnoreCase) {
|
if (IgnoreCase) {
|
||||||
@@ -656,7 +656,7 @@ Again:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dual number? */
|
/* Binary number? */
|
||||||
if (C == '%') {
|
if (C == '%') {
|
||||||
NextChar ();
|
NextChar ();
|
||||||
|
|
||||||
@@ -703,23 +703,35 @@ Again:
|
|||||||
/* Control command? */
|
/* Control command? */
|
||||||
if (C == '.') {
|
if (C == '.') {
|
||||||
|
|
||||||
|
/* Remember and skip the dot */
|
||||||
|
SVal[0] = C;
|
||||||
NextChar ();
|
NextChar ();
|
||||||
|
|
||||||
if (!IsIdStart (C)) {
|
/* Check if it's just a dot */
|
||||||
|
if (!IsIdStart (C)) {
|
||||||
|
|
||||||
/* Just a dot */
|
/* Just a dot */
|
||||||
Tok = TOK_DOT;
|
Tok = TOK_DOT;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read the identifier */
|
} else {
|
||||||
ReadIdent ();
|
|
||||||
|
/* Read the remainder of the identifier */
|
||||||
|
ReadIdent (1);
|
||||||
|
|
||||||
|
/* Dot keyword, search for it */
|
||||||
|
Tok = FindDotKeyword ();
|
||||||
|
if (Tok == TOK_NONE) {
|
||||||
|
/* Not found */
|
||||||
|
if (LeadingDotInIdents) {
|
||||||
|
/* An identifier with a dot */
|
||||||
|
Tok = TOK_IDENT;
|
||||||
|
} else {
|
||||||
|
/* Invalid pseudo instruction */
|
||||||
|
Error (ERR_PSEUDO_EXPECTED);
|
||||||
|
goto Again;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Search the keyword */
|
|
||||||
Tok = FindDotKeyword ();
|
|
||||||
if (Tok == TOK_NONE) {
|
|
||||||
/* Not found */
|
|
||||||
Error (ERR_PSEUDO_EXPECTED);
|
|
||||||
goto Again;
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -728,7 +740,7 @@ Again:
|
|||||||
if (C == LocalStart) {
|
if (C == LocalStart) {
|
||||||
|
|
||||||
/* Read the identifier */
|
/* Read the identifier */
|
||||||
ReadIdent ();
|
ReadIdent (0);
|
||||||
|
|
||||||
/* Start character alone is not enough */
|
/* Start character alone is not enough */
|
||||||
if (SVal [1] == '\0') {
|
if (SVal [1] == '\0') {
|
||||||
@@ -746,7 +758,7 @@ Again:
|
|||||||
if (IsIdStart (C)) {
|
if (IsIdStart (C)) {
|
||||||
|
|
||||||
/* Read the identifier */
|
/* Read the identifier */
|
||||||
ReadIdent ();
|
ReadIdent (0);
|
||||||
|
|
||||||
/* Check for special names */
|
/* Check for special names */
|
||||||
if (SVal [1] == '\0') {
|
if (SVal [1] == '\0') {
|
||||||
|
|||||||
Reference in New Issue
Block a user