]> git.sur5r.net Git - cc65/commitdiff
Fixed a bug
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 21 Nov 2002 23:28:32 +0000 (23:28 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 21 Nov 2002 23:28:32 +0000 (23:28 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1565 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/symtab.c

index c28bdce5c0cf14dc8a665f84911d9d25c4d83ef0..8b9425767f03e8a6e84302c8703c85f67d48ce97 100644 (file)
@@ -360,21 +360,6 @@ static SymEntry* SymFindAny (SymTable* Tab, const char* Name)
 
 
 
-static SymEntry* SymRefInternal (SymTable* Table, const char* Name)
-/* Search for the symbol in the given table and return it */
-{
-    /* Try to find the symbol, create a new one if the symbol does not exist */
-    SymEntry* S = SymFind (Table, Name, SF_ALLOC_NEW);
-
-    /* Mark the symbol as referenced */
-    S->Flags |= SF_REFERENCED;
-
-    /* Return it */
-    return S;
-}
-
-
-
 void SymEnterLevel (void)
 /* Enter a new lexical level */
 {
@@ -453,9 +438,20 @@ void SymDef (const char* Name, ExprNode* Expr, int ZP, int Label)
 
 SymEntry* SymRef (const char* Name)
 /* Search for the symbol and return it */
-{
-    /* Reference the symbol in the current table */
-    return SymRefInternal (SymTab, Name);
+{                                           
+    /* Try to find the symbol in any visible table */
+    SymEntry* S = SymFindAny (SymTab, Name);
+
+    /* If we could not find the symbol, create it in the local symtab */
+    if (S == 0) { 
+        S = SymFind (SymTab, Name, SF_ALLOC_NEW);
+    }
+
+    /* Mark the symbol as referenced */
+    S->Flags |= SF_REFERENCED;
+
+    /* Return it */
+    return S;
 }
 
 
@@ -463,8 +459,14 @@ SymEntry* SymRef (const char* Name)
 SymEntry* SymRefGlobal (const char* Name)
 /* Search for the symbol in the global namespace and return it */
 {
-    /* Reference the symbol in the current table */
-    return SymRefInternal (RootTab, Name);
+    /* Try to find the symbol, create a new one if the symbol does not exist */
+    SymEntry* S = SymFind (RootTab, Name, SF_ALLOC_NEW);
+
+    /* Mark the symbol as referenced */
+    S->Flags |= SF_REFERENCED;
+
+    /* Return it */
+    return S;
 }