1
0
mirror of https://github.com/cc65/cc65.git synced 2025-08-13 08:25:28 +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) { switch (N->Op & EXPR_TYPEMASK) {
case EXPR_LEAFNODE: case EXPR_LEAFNODE:
switch (N->Op) { switch (N->Op) {
case EXPR_SYMBOL: case EXPR_SYMBOL:
if (SymIsZP (N->V.Sym)) { if (SymIsZP (N->V.Sym)) {
*IsByte = 1; *IsByte = 1;
} else if (SymHasExpr (N->V.Sym)) { } else if (SymHasExpr (N->V.Sym)) {
/* Check if this expression is a byte expression */ /* Check if this expression is a byte expression */
*IsByte = IsByteExpr (GetSymExpr (N->V.Sym)); CheckByteExpr (GetSymExpr (N->V.Sym), IsByte);
} }
break; break;
case EXPR_SECTION: case EXPR_SECTION:
if (GetSegAddrSize (N->V.SegNum) == ADDR_SIZE_ZP) { if (GetSegAddrSize (N->V.SegNum) == ADDR_SIZE_ZP) {
*IsByte = 1; *IsByte = 1;
} }
break; break;
} }
break; break;
case EXPR_UNARYNODE: case EXPR_UNARYNODE:
CheckByteExpr (N->Left, IsByte); CheckByteExpr (N->Left, IsByte);
break; break;
case EXPR_BINARYNODE: case EXPR_BINARYNODE:
CheckByteExpr (N->Left, IsByte); CheckByteExpr (N->Left, IsByte);
CheckByteExpr (N->Right, IsByte); CheckByteExpr (N->Right, IsByte);
break; break;
default: 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 */ /* Return the name of the symbol */
{ {
/* Resolve trampoline entries */ /* 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 */ /* Return the symbol index for the given symbol */
{ {
/* Resolve trampoline entries */ /* 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 */ /* Return the position of first occurence in the source for the given symbol */
{ {
/* Resolve trampoline entries */ /* Resolve trampoline entries */

View File

@@ -187,13 +187,18 @@ const struct ExprNode* SymResolve (const SymEntry* Sym);
* NULL. Do not call in other contexts! * NULL. Do not call in other contexts!
*/ */
const char* GetSymName (SymEntry* Sym); const char* GetSymName (const SymEntry* Sym);
/* Return the name of the symbol */ /* 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 */ /* 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 */ /* Return the position of first occurence in the source for the given symbol */