Don't remove symbols or otherwise simplify expressions while assembly is

still in progress. There may be information that is needed, and when
assembly is done it is still time to do so. (Needs more work).
Better expression checks for fragments. Stuff that was detected by the
linker before is now handled by the assembler.


git-svn-id: svn://svn.cc65.org/cc65/trunk@2700 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2003-11-30 21:47:40 +00:00
parent cf7b4e227a
commit 9ebc3d1f01
6 changed files with 109 additions and 144 deletions

View File

@@ -144,22 +144,12 @@ void EmitData (const unsigned char* Data, unsigned Size)
void EmitByte (ExprNode* Expr)
/* Emit one byte */
{
long Val;
if (IsConstExpr (Expr, &Val)) {
/* Constant expression, emit literal byte */
FreeExpr (Expr);
if ((Val & ~0xFF) != 0) {
Error ("Range error");
}
Emit0 (Val & 0xFF);
} else {
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 1);
{
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 1);
/* Set the data */
F->V.Expr = Expr;
}
/* Set the data */
F->V.Expr = Expr;
}
@@ -167,22 +157,11 @@ void EmitByte (ExprNode* Expr)
void EmitWord (ExprNode* Expr)
/* Emit one word */
{
long Val;
if (IsConstExpr (Expr, &Val)) {
/* Constant expression, emit literal byte */
FreeExpr (Expr);
if ((Val & ~0xFFFF) != 0) {
Error ("Range error");
}
Emit0 (Val & 0xFF);
Emit0 ((Val >> 8) & 0xFF);
} else {
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 2);
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 2);
/* Set the data */
F->V.Expr = Expr;
}
/* Set the data */
F->V.Expr = Expr;
}
@@ -190,23 +169,11 @@ void EmitWord (ExprNode* Expr)
void EmitFarAddr (ExprNode* Expr)
/* Emit a 24 bit expression */
{
long Val;
if (IsConstExpr (Expr, &Val)) {
/* Constant expression, emit literal byte */
FreeExpr (Expr);
if ((Val & ~0xFFFFFF) != 0) {
Error ("Range error");
}
Emit0 (Val & 0xFF);
Emit0 ((Val >> 8) & 0xFF);
Emit0 ((Val >> 16) & 0xFF);
} else {
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 3);
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 3);
/* Set the data */
F->V.Expr = Expr;
}
/* Set the data */
F->V.Expr = Expr;
}
@@ -214,21 +181,11 @@ void EmitFarAddr (ExprNode* Expr)
void EmitDWord (ExprNode* Expr)
/* Emit one dword */
{
long Val;
if (IsConstExpr (Expr, &Val)) {
/* Constant expression, emit literal byte */
FreeExpr (Expr);
Emit0 (Val & 0xFF);
Emit0 ((Val >> 8) & 0xFF);
Emit0 ((Val >> 16) & 0xFF);
Emit0 ((Val >> 24) & 0xFF);
} else {
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 4);
/* Create a new fragment */
Fragment* F = GenFragment (FRAG_EXPR, 4);
/* Set the data */
F->V.Expr = Expr;
}
/* Set the data */
F->V.Expr = Expr;
}