]> git.sur5r.net Git - cc65/commitdiff
Permit the .string builtin function to work with scoped identifiers.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 17 Jul 2012 18:28:07 +0000 (18:28 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 17 Jul 2012 18:28:07 +0000 (18:28 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5786 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/nexttok.c

index dab0697f94d5902c6272ed1908ed0040a25013ab..3761ebb675ecdb83bcb4b637782c6a4e9206d027 100644 (file)
@@ -629,10 +629,27 @@ static void FuncString (void)
     ConsumeLParen ();
 
     /* Accept identifiers or numeric expressions */
-    if (CurTok.Tok == TOK_IDENT || CurTok.Tok == TOK_LOCAL_IDENT) {
+    if (CurTok.Tok == TOK_LOCAL_IDENT) {
        /* Save the identifier, then skip it */
                SB_Copy (&Buf, &CurTok.SVal);
        NextTok ();
+    } else if (CurTok.Tok == TOK_NAMESPACE || CurTok.Tok == TOK_IDENT) {
+
+        /* Parse a fully qualified symbol name. We cannot use
+         * ParseScopedSymName here since the name may be invalid.
+         */
+        int NameSpace;
+        do {
+            NameSpace = (CurTok.Tok == TOK_NAMESPACE);
+            if (NameSpace) {
+                SB_AppendStr (&Buf, "::");
+            } else {
+                SB_Append (&Buf, &CurTok.SVal);
+            }
+            NextTok ();
+        } while ((NameSpace != 0 && CurTok.Tok == TOK_IDENT) ||
+                 (NameSpace == 0 && CurTok.Tok == TOK_NAMESPACE));
+
     } else {
        /* Numeric expression */
        long Val = ConstExpression ();