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 ();