1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-10 03:30:05 +00:00

Fixed a problem

git-svn-id: svn://svn.cc65.org/cc65/trunk@2641 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2003-11-11 22:16:47 +00:00
parent 8a49256df9
commit 1e624c5e91
3 changed files with 46 additions and 28 deletions

View File

@ -1524,37 +1524,37 @@ static void CheckByteExpr (const ExprNode* N, int* IsByte)
switch (N->Op & EXPR_TYPEMASK) {
case EXPR_LEAFNODE:
switch (N->Op) {
switch (N->Op) {
case EXPR_SYMBOL:
if (SymIsZP (N->V.Sym)) {
*IsByte = 1;
} else if (SymHasExpr (N->V.Sym)) {
/* Check if this expression is a byte expression */
*IsByte = IsByteExpr (GetSymExpr (N->V.Sym));
}
break;
case EXPR_SYMBOL:
if (SymIsZP (N->V.Sym)) {
*IsByte = 1;
} else if (SymHasExpr (N->V.Sym)) {
/* Check if this expression is a byte expression */
CheckByteExpr (GetSymExpr (N->V.Sym), IsByte);
}
break;
case EXPR_SECTION:
if (GetSegAddrSize (N->V.SegNum) == ADDR_SIZE_ZP) {
*IsByte = 1;
}
break;
case EXPR_SECTION:
if (GetSegAddrSize (N->V.SegNum) == ADDR_SIZE_ZP) {
*IsByte = 1;
}
break;
}
break;
}
break;
case EXPR_UNARYNODE:
CheckByteExpr (N->Left, IsByte);
break;
CheckByteExpr (N->Left, IsByte);
break;
case EXPR_BINARYNODE:
CheckByteExpr (N->Left, IsByte);
CheckByteExpr (N->Right, IsByte);
break;
CheckByteExpr (N->Left, IsByte);
CheckByteExpr (N->Right, IsByte);
break;
default:
Internal ("Unknown expression op: %02X", N->Op);
Internal ("Unknown expression op: %02X", N->Op);
}
}
}

View File

@ -468,7 +468,7 @@ const struct ExprNode* SymResolve (const SymEntry* S)
const char* GetSymName (SymEntry* S)
const char* GetSymName (const SymEntry* S)
/* Return the name of the symbol */
{
/* Resolve trampoline entries */
@ -480,7 +480,20 @@ const char* GetSymName (SymEntry* S)
unsigned GetSymIndex (SymEntry* S)
unsigned GetSymAddrSize (const SymEntry* S)
/* Return the address size of the symbol. Beware: This function will just
* return the AddrSize member, it will not look at the expression!
*/
{
if (S->Flags & SF_TRAMPOLINE) {
S = S->V.Sym;
}
return S->AddrSize;
}
unsigned GetSymIndex (const SymEntry* S)
/* Return the symbol index for the given symbol */
{
/* Resolve trampoline entries */
@ -493,7 +506,7 @@ unsigned GetSymIndex (SymEntry* S)
const FilePos* GetSymPos (SymEntry* S)
const FilePos* GetSymPos (const SymEntry* S)
/* Return the position of first occurence in the source for the given symbol */
{
/* Resolve trampoline entries */

View File

@ -187,13 +187,18 @@ const struct ExprNode* SymResolve (const SymEntry* Sym);
* NULL. Do not call in other contexts!
*/
const char* GetSymName (SymEntry* Sym);
const char* GetSymName (const SymEntry* Sym);
/* Return the name of the symbol */
unsigned GetSymIndex (SymEntry* Sym);
unsigned GetSymAddrSize (const SymEntry* Sym);
/* Return the address size of the symbol. Beware: This function will just
* return the AddrSize member, it will not look at the expression!
*/
unsigned GetSymIndex (const SymEntry* Sym);
/* Return the symbol index for the given symbol */
const FilePos* GetSymPos (SymEntry* Sym);
const FilePos* GetSymPos (const SymEntry* Sym);
/* Return the position of first occurence in the source for the given symbol */