From: cuz Date: Wed, 25 Sep 2002 21:35:00 +0000 (+0000) Subject: Change the .LOCAL command so that the cheap local symbol prefix is kept. X-Git-Tag: V2.12.0~2223 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9464c7dd2915cc79e4bb91f82b4838d82e046bb0;p=cc65 Change the .LOCAL command so that the cheap local symbol prefix is kept. This allows to create macros with local labels that expand to cheap local symbols when the macro is expanded. Tip from Dagan Galarneau git-svn-id: svn://svn.cc65.org/cc65/trunk@1405 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 0e6bca3a1..976e19306 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -44,6 +44,7 @@ /* ca65 */ #include "condasm.h" #include "error.h" +#include "global.h" #include "istack.h" #include "nexttok.h" #include "pseudo.h" @@ -541,8 +542,14 @@ static int MacExpand (void* Data) IdDesc* I = Mac->M->Locals; while (I) { if (strcmp (SVal, I->Id) == 0) { - /* This is in fact a local symbol, change the name */ - sprintf (SVal, "___%04X__", Mac->LocalStart + Index); + /* This is in fact a local symbol, change the name. Be sure + * to generate a local label name if the original name was + * a local label, and also generate a name that cannot be + * generated by a user. + */ + unsigned PrefixLen = (I->Id[0] == LocalStart); + sprintf (SVal, "%.*sLOCAL-MACRO-SYMBOL-%04X", PrefixLen, + I->Id, Mac->LocalStart + Index); break; } /* Next symbol */