Parse (but ignore) type information for spans.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5259 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -126,12 +126,14 @@ typedef enum {
|
|||||||
TOK_FIRST_KEYWORD,
|
TOK_FIRST_KEYWORD,
|
||||||
TOK_ABSOLUTE = TOK_FIRST_KEYWORD, /* ABSOLUTE keyword */
|
TOK_ABSOLUTE = TOK_FIRST_KEYWORD, /* ABSOLUTE keyword */
|
||||||
TOK_ADDRSIZE, /* ADDRSIZE keyword */
|
TOK_ADDRSIZE, /* ADDRSIZE keyword */
|
||||||
|
TOK_AUTO, /* AUTO keyword */
|
||||||
TOK_COUNT, /* COUNT keyword */
|
TOK_COUNT, /* COUNT keyword */
|
||||||
TOK_DEF, /* DEF keyword */
|
TOK_DEF, /* DEF keyword */
|
||||||
TOK_ENUM, /* ENUM keyword */
|
TOK_ENUM, /* ENUM keyword */
|
||||||
TOK_EQUATE, /* EQUATE keyword */
|
TOK_EQUATE, /* EQUATE keyword */
|
||||||
TOK_EXPORT, /* EXPORT keyword */
|
TOK_EXPORT, /* EXPORT keyword */
|
||||||
TOK_FILE, /* FILE keyword */
|
TOK_FILE, /* FILE keyword */
|
||||||
|
TOK_FUNC, /* FUNC keyword */
|
||||||
TOK_GLOBAL, /* GLOBAL keyword */
|
TOK_GLOBAL, /* GLOBAL keyword */
|
||||||
TOK_ID, /* ID keyword */
|
TOK_ID, /* ID keyword */
|
||||||
TOK_IMPORT, /* IMPORT keyword */
|
TOK_IMPORT, /* IMPORT keyword */
|
||||||
@@ -156,10 +158,12 @@ typedef enum {
|
|||||||
TOK_SIZE, /* SIZE keyword */
|
TOK_SIZE, /* SIZE keyword */
|
||||||
TOK_SPAN, /* SPAN keyword */
|
TOK_SPAN, /* SPAN keyword */
|
||||||
TOK_START, /* START keyword */
|
TOK_START, /* START keyword */
|
||||||
|
TOK_STATIC, /* STATIC keyword */
|
||||||
TOK_STRUCT, /* STRUCT keyword */
|
TOK_STRUCT, /* STRUCT keyword */
|
||||||
TOK_SYM, /* SYM keyword */
|
TOK_SYM, /* SYM keyword */
|
||||||
TOK_TYPE, /* TYPE keyword */
|
TOK_TYPE, /* TYPE keyword */
|
||||||
TOK_VALUE, /* VALUE keyword */
|
TOK_VALUE, /* VALUE keyword */
|
||||||
|
TOK_VAR, /* VAR keyword */
|
||||||
TOK_VERSION, /* VERSION keyword */
|
TOK_VERSION, /* VERSION keyword */
|
||||||
TOK_ZEROPAGE, /* ZEROPAGE keyword */
|
TOK_ZEROPAGE, /* ZEROPAGE keyword */
|
||||||
TOK_LAST_KEYWORD = TOK_ZEROPAGE,
|
TOK_LAST_KEYWORD = TOK_ZEROPAGE,
|
||||||
@@ -2066,12 +2070,14 @@ static void NextToken (InputData* D)
|
|||||||
} KeywordTable[] = {
|
} KeywordTable[] = {
|
||||||
{ "abs", TOK_ABSOLUTE },
|
{ "abs", TOK_ABSOLUTE },
|
||||||
{ "addrsize", TOK_ADDRSIZE },
|
{ "addrsize", TOK_ADDRSIZE },
|
||||||
|
{ "auto", TOK_AUTO },
|
||||||
{ "count", TOK_COUNT },
|
{ "count", TOK_COUNT },
|
||||||
{ "def", TOK_DEF },
|
{ "def", TOK_DEF },
|
||||||
{ "enum", TOK_ENUM },
|
{ "enum", TOK_ENUM },
|
||||||
{ "equ", TOK_EQUATE },
|
{ "equ", TOK_EQUATE },
|
||||||
{ "exp", TOK_EXPORT },
|
{ "exp", TOK_EXPORT },
|
||||||
{ "file", TOK_FILE },
|
{ "file", TOK_FILE },
|
||||||
|
{ "func", TOK_FUNC },
|
||||||
{ "global", TOK_GLOBAL },
|
{ "global", TOK_GLOBAL },
|
||||||
{ "id", TOK_ID },
|
{ "id", TOK_ID },
|
||||||
{ "imp", TOK_IMPORT },
|
{ "imp", TOK_IMPORT },
|
||||||
@@ -2096,10 +2102,12 @@ static void NextToken (InputData* D)
|
|||||||
{ "size", TOK_SIZE },
|
{ "size", TOK_SIZE },
|
||||||
{ "span", TOK_SPAN },
|
{ "span", TOK_SPAN },
|
||||||
{ "start", TOK_START },
|
{ "start", TOK_START },
|
||||||
|
{ "static", TOK_STATIC },
|
||||||
{ "struct", TOK_STRUCT },
|
{ "struct", TOK_STRUCT },
|
||||||
{ "sym", TOK_SYM },
|
{ "sym", TOK_SYM },
|
||||||
{ "type", TOK_TYPE },
|
{ "type", TOK_TYPE },
|
||||||
{ "val", TOK_VALUE },
|
{ "val", TOK_VALUE },
|
||||||
|
{ "var", TOK_VAR },
|
||||||
{ "version", TOK_VERSION },
|
{ "version", TOK_VERSION },
|
||||||
{ "zp", TOK_ZEROPAGE },
|
{ "zp", TOK_ZEROPAGE },
|
||||||
};
|
};
|
||||||
@@ -3343,6 +3351,7 @@ static void ParseSpan (InputData* D)
|
|||||||
cc65_addr Start = 0;
|
cc65_addr Start = 0;
|
||||||
cc65_addr Size = 0;
|
cc65_addr Size = 0;
|
||||||
unsigned SegId = CC65_INV_ID;
|
unsigned SegId = CC65_INV_ID;
|
||||||
|
StrBuf Type = STRBUF_INITIALIZER;
|
||||||
SpanInfo* S;
|
SpanInfo* S;
|
||||||
enum {
|
enum {
|
||||||
ibNone = 0x000,
|
ibNone = 0x000,
|
||||||
@@ -3351,6 +3360,7 @@ static void ParseSpan (InputData* D)
|
|||||||
ibSegId = 0x02,
|
ibSegId = 0x02,
|
||||||
ibSize = 0x04,
|
ibSize = 0x04,
|
||||||
ibStart = 0x08,
|
ibStart = 0x08,
|
||||||
|
ibType = 0x10,
|
||||||
|
|
||||||
ibRequired = ibId | ibSegId | ibSize | ibStart,
|
ibRequired = ibId | ibSegId | ibSize | ibStart,
|
||||||
} InfoBits = ibNone;
|
} InfoBits = ibNone;
|
||||||
@@ -3365,7 +3375,8 @@ static void ParseSpan (InputData* D)
|
|||||||
|
|
||||||
/* Something we know? */
|
/* Something we know? */
|
||||||
if (D->Tok != TOK_ID && D->Tok != TOK_SEGMENT &&
|
if (D->Tok != TOK_ID && D->Tok != TOK_SEGMENT &&
|
||||||
D->Tok != TOK_SIZE && D->Tok != TOK_START) {
|
D->Tok != TOK_SIZE && D->Tok != TOK_START &&
|
||||||
|
D->Tok != TOK_TYPE) {
|
||||||
|
|
||||||
/* Try smart error recovery */
|
/* Try smart error recovery */
|
||||||
if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
|
if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
|
||||||
@@ -3422,6 +3433,16 @@ static void ParseSpan (InputData* D)
|
|||||||
InfoBits |= ibStart;
|
InfoBits |= ibStart;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TOK_TYPE:
|
||||||
|
if (!StrConstFollows (D)) {
|
||||||
|
goto ErrorExit;
|
||||||
|
}
|
||||||
|
SB_Copy (&Type, &D->SVal);
|
||||||
|
SB_Terminate (&Type);
|
||||||
|
InfoBits |= ibType;
|
||||||
|
NextToken (D);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
UnexpectedToken (D);
|
UnexpectedToken (D);
|
||||||
@@ -3459,6 +3480,7 @@ static void ParseSpan (InputData* D)
|
|||||||
|
|
||||||
ErrorExit:
|
ErrorExit:
|
||||||
/* Entry point in case of errors */
|
/* Entry point in case of errors */
|
||||||
|
SB_Done (&Type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user