1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-05 06:28:57 +00:00

Merge pull request #1 from Movax12/addrsize

Improved on funciton .ADDRSIZE. Conform to coding style.
This commit is contained in:
Movax12 2015-04-20 17:27:27 -04:00
commit 247f4218b0
2 changed files with 32 additions and 36 deletions

View File

@ -629,7 +629,7 @@ static ExprNode* FuncReferenced (void)
static ExprNode* FuncAddrSize(void) static ExprNode* FuncAddrSize (void)
/* Handle the .ADDRSIZE function */ /* Handle the .ADDRSIZE function */
{ {
StrBuf ScopeName = STATIC_STRBUF_INITIALIZER; StrBuf ScopeName = STATIC_STRBUF_INITIALIZER;
@ -646,71 +646,66 @@ static ExprNode* FuncAddrSize(void)
if (CurTok.Tok == TOK_LOCAL_IDENT) { if (CurTok.Tok == TOK_LOCAL_IDENT) {
/* Cheap local symbol */ /* Cheap local symbol */
Sym = SymFindLocal(SymLast, &CurTok.SVal, SYM_FIND_EXISTING); Sym = SymFindLocal (SymLast, &CurTok.SVal, SYM_FIND_EXISTING);
if (Sym == 0) { if (Sym == 0) {
Error("Unknown symbol or scope: `%m%p'", &CurTok.SVal); Error ("Unknown symbol or scope: `%m%p'", &CurTok.SVal);
} } else {
else {
AddrSize = Sym->AddrSize; AddrSize = Sym->AddrSize;
} }
/* Remember and skip SVal, terminate ScopeName so it is empty */ /* Remember and skip SVal, terminate ScopeName so it is empty */
SB_Copy(&Name, &CurTok.SVal); SB_Copy (&Name, &CurTok.SVal);
NextTok(); NextTok ();
SB_Terminate(&ScopeName); SB_Terminate (&ScopeName);
} } else {
else {
/* Parse the scope and the name */ /* Parse the scope and the name */
SymTable* ParentScope = ParseScopedIdent(&Name, &ScopeName); SymTable* ParentScope = ParseScopedIdent (&Name, &ScopeName);
/* Check if the parent scope is valid */ /* Check if the parent scope is valid */
if (ParentScope == 0) { if (ParentScope == 0) {
/* No such scope */ /* No such scope */
SB_Done(&ScopeName); SB_Done (&ScopeName);
SB_Done(&Name); SB_Done (&Name);
return GenLiteral0(); return GenLiteral0 ();
} }
/* If ScopeName is empty, no explicit scope was specified. We have to /* If ScopeName is empty, no explicit scope was specified. We have to
* search upper scope levels in this case. ** search upper scope levels in this case.
*/ */
NoScope = SB_IsEmpty(&ScopeName); NoScope = SB_IsEmpty (&ScopeName);
/* If we did find a scope with the name, read the symbol defining the /* If we did find a scope with the name, read the symbol defining the
* size, otherwise search for a symbol entry with the name and scope. ** size, otherwise search for a symbol entry with the name and scope.
*/ */
if (NoScope) { if (NoScope) {
Sym = SymFindAny(ParentScope, &Name); Sym = SymFindAny (ParentScope, &Name);
} } else {
else { Sym = SymFind (ParentScope, &Name, SYM_FIND_EXISTING);
Sym = SymFind(ParentScope, &Name, SYM_FIND_EXISTING);
} }
/* If we found the symbol retrieve the size, otherwise complain */ /* If we found the symbol retrieve the size, otherwise complain */
if (Sym) { if (Sym) {
AddrSize = Sym->AddrSize; AddrSize = Sym->AddrSize;
} } else {
else { Error ("Unknown symbol or scope: `%m%p%m%p'",
Error("Unknown symbol or scope: `%m%p%m%p'",
&ScopeName, &Name); &ScopeName, &Name);
} }
} }
/* Check if we have a size */ if (AddrSize == 0) {
/* if we don't know, return it anyway, zero can mean unknown, or uncomment this code for an error Warning(1, "Unknown address size: `%m%p%m%p'",
if (AddrSize == 0 ) { &ScopeName, &Name);
Error ("Address size of `%m%p%m%p' is unknown", &ScopeName, &Name);
} }
*/
/* Free the string buffers */ /* Free the string buffers */
SB_Done(&ScopeName); SB_Done (&ScopeName);
SB_Done(&Name); SB_Done (&Name);
/* Return the size */ /* Return the size. */
return GenLiteralExpr(AddrSize);
return GenLiteralExpr (AddrSize);
} }
@ -1052,7 +1047,7 @@ static ExprNode* Factor (void)
break; break;
case TOK_ADDRSIZE: case TOK_ADDRSIZE:
N = Function(FuncAddrSize); N = Function (FuncAddrSize);
break; break;
case TOK_BLANK: case TOK_BLANK:

View File

@ -739,9 +739,10 @@ static token_t FindDotKeyword (void)
default: default:
break; break;
} }
return R->Tok; return R->Tok;
}
else { } else {
return TOK_NONE; return TOK_NONE;
} }
} }