Working on initializers

git-svn-id: svn://svn.cc65.org/cc65/trunk@411 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2000-10-30 20:48:11 +00:00
parent 3fde2841f1
commit 72e32b332b
8 changed files with 139 additions and 92 deletions

View File

@@ -42,6 +42,7 @@
/* common */
#include "bitops.h"
#include "check.h"
#include "symdefs.h"
#include "tgttrans.h"
/* ca65 */
@@ -727,9 +728,9 @@ static void DoInclude (void)
if (Tok != TOK_STRCON) {
ErrorSkip (ERR_STRCON_EXPECTED);
} else {
strcpy (Name, SVal);
NextTok ();
NewInputFile (Name);
strcpy (Name, SVal);
NextTok ();
NewInputFile (Name);
}
}
@@ -738,7 +739,34 @@ static void DoInclude (void)
static void DoInitializer (void)
/* Export a symbol as initializer */
{
ExportImport (SymInitializer, 0);
char Name [sizeof (SVal)];
long Val;
/* Symbol name follows */
if (Tok != TOK_IDENT) {
ErrorSkip (ERR_IDENT_EXPECTED);
return;
}
strcpy (Name, SVal);
NextTok ();
/* Optional initializer value */
if (Tok == TOK_COMMA) {
/* Initializer value follows */
NextTok ();
Val = ConstExpression ();
if (Val < EXP_INIT_MIN || Val > EXP_INIT_MAX) {
/* Value out of range */
Error (ERR_RANGE);
return;
}
} else {
/* Use the default initializer value */
Val = EXP_INIT_DEF;
}
/* Define the symbol */
SymInitializer (Name, (unsigned) Val);
}