aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGerd Möllmann2022-10-20 11:25:43 +0200
committerGerd Möllmann2022-10-20 11:26:29 +0200
commit7acb6c5ca1c629846bb413c8ab0605a045bb3752 (patch)
tree6a94b6972dd8b3b1f270906f61c46ed3cded9ae2 /src
parent6b0304f2dd84f9904885f31b1d73f4b9f905a522 (diff)
downloademacs-7acb6c5ca1c629846bb413c8ab0605a045bb3752.tar.gz
emacs-7acb6c5ca1c629846bb413c8ab0605a045bb3752.zip
Intrdduce pkg_find_symbol
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h1
-rw-r--r--src/pkg.c39
-rw-r--r--src/print.c12
3 files changed, 27 insertions, 25 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 5417881a0ad..461333f01bc 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2280,6 +2280,7 @@ extern void pkg_break (void);
2280extern void pkg_define_builtin_symbols (void); 2280extern void pkg_define_builtin_symbols (void);
2281extern void pkg_map_symbols_c_fn (void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg); 2281extern void pkg_map_symbols_c_fn (void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg);
2282extern Lisp_Object pkg_find_package (Lisp_Object name); 2282extern Lisp_Object pkg_find_package (Lisp_Object name);
2283extern Lisp_Object pkg_find_symbol (Lisp_Object name, Lisp_Object package, Lisp_Object *status);
2283 2284
2284 2285
2285/* Return whether a value might be a valid docstring. 2286/* Return whether a value might be a valid docstring.
diff --git a/src/pkg.c b/src/pkg.c
index ace28ea1ae6..e62d6ae323a 100644
--- a/src/pkg.c
+++ b/src/pkg.c
@@ -209,7 +209,7 @@ package_or_default (Lisp_Object designator)
209 recursion. */ 209 recursion. */
210 210
211static Lisp_Object 211static Lisp_Object
212lookup_symbol1 (Lisp_Object name, Lisp_Object package, Lisp_Object seen, 212pkg_find_symbol1 (Lisp_Object name, Lisp_Object package, Lisp_Object seen,
213 Lisp_Object *status) 213 Lisp_Object *status)
214{ 214{
215 eassert (STRINGP (name)); 215 eassert (STRINGP (name));
@@ -240,7 +240,7 @@ lookup_symbol1 (Lisp_Object name, Lisp_Object package, Lisp_Object seen,
240 if (NILP (Fmemq (used_package, seen))) 240 if (NILP (Fmemq (used_package, seen)))
241 { 241 {
242 seen = Fcons (used_package, seen); 242 seen = Fcons (used_package, seen);
243 symbol = lookup_symbol1 (name, used_package, seen, NULL); 243 symbol = pkg_find_symbol1 (name, used_package, seen, NULL);
244 if (!EQ (symbol, Qunbound)) 244 if (!EQ (symbol, Qunbound))
245 return symbol; 245 return symbol;
246 } 246 }
@@ -250,10 +250,10 @@ lookup_symbol1 (Lisp_Object name, Lisp_Object package, Lisp_Object seen,
250 return symbol; 250 return symbol;
251} 251}
252 252
253static Lisp_Object 253Lisp_Object
254lookup_symbol (Lisp_Object name, Lisp_Object package, Lisp_Object *status) 254pkg_find_symbol (Lisp_Object name, Lisp_Object package, Lisp_Object *status)
255{ 255{
256 return lookup_symbol1 (name, package, Qnil, status); 256 return pkg_find_symbol1 (name, package, Qnil, status);
257} 257}
258 258
259/* Add a SYMBOL to package PACKAGE. Value is SYMBOL. The symbol 259/* Add a SYMBOL to package PACKAGE. Value is SYMBOL. The symbol
@@ -303,7 +303,7 @@ pkg_intern_symbol1 (const Lisp_Object name, Lisp_Object package,
303 eassert (PACKAGEP (package)); 303 eassert (PACKAGEP (package));
304 304
305 /* If already accessible in package, return that. */ 305 /* If already accessible in package, return that. */
306 Lisp_Object symbol = lookup_symbol (name, package, status); 306 Lisp_Object symbol = pkg_find_symbol (name, package, status);
307 if (!EQ (symbol, Qunbound)) 307 if (!EQ (symbol, Qunbound))
308 return symbol; 308 return symbol;
309 309
@@ -376,7 +376,7 @@ pkg_lookup_non_keyword_c_string (const char *ptr, ptrdiff_t nchars, ptrdiff_t nb
376{ 376{
377 eassert (*ptr != ':'); 377 eassert (*ptr != ':');
378 const Lisp_Object name = make_string_from_bytes (ptr, nchars, nbytes); 378 const Lisp_Object name = make_string_from_bytes (ptr, nchars, nbytes);
379 return lookup_symbol (name, Vearmuffs_package, NULL); 379 return pkg_find_symbol (name, Vearmuffs_package, NULL);
380} 380}
381 381
382static Lisp_Object 382static Lisp_Object
@@ -386,7 +386,7 @@ pkg_unintern_symbol (Lisp_Object symbol, Lisp_Object package)
386 package = package_or_default (package); 386 package = package_or_default (package);
387 387
388 Lisp_Object status; 388 Lisp_Object status;
389 Lisp_Object found = lookup_symbol (SYMBOL_NAME (symbol), package, &status); 389 Lisp_Object found = pkg_find_symbol (SYMBOL_NAME (symbol), package, &status);
390 Lisp_Object removedp = Qnil; 390 Lisp_Object removedp = Qnil;
391 391
392 if (!EQ (found, Qunbound) && !EQ (status, QCinherited)) 392 if (!EQ (found, Qunbound) && !EQ (status, QCinherited))
@@ -514,7 +514,7 @@ pkg_emacs_intern_soft (Lisp_Object name, Lisp_Object package)
514 package = fake_me_an_obarray (package); 514 package = fake_me_an_obarray (package);
515 package = package_or_default (package); 515 package = package_or_default (package);
516 516
517 Lisp_Object found = lookup_symbol (name, package, NULL); 517 Lisp_Object found = pkg_find_symbol (name, package, NULL);
518 if (EQ (found, Qunbound)) 518 if (EQ (found, Qunbound))
519 return Qnil; 519 return Qnil;
520 520
@@ -563,7 +563,8 @@ pkg_qualified_symbol (Lisp_Object name, Lisp_Object package, bool external)
563{ 563{
564 /* If we want a symbol for a given package, check the 564 /* If we want a symbol for a given package, check the
565 package has that symbol and its accessibily. */ 565 package has that symbol and its accessibily. */
566 Lisp_Object found = Ffind_symbol (name, package); 566 Lisp_Object status;
567 Lisp_Object found = pkg_find_symbol (name, package, &status);
567 568
568 if (EQ (package, Vkeyword_package)) 569 if (EQ (package, Vkeyword_package))
569 { 570 {
@@ -571,23 +572,22 @@ pkg_qualified_symbol (Lisp_Object name, Lisp_Object package, bool external)
571 PKG-FIXME: there might already be a symbol named 572 PKG-FIXME: there might already be a symbol named
572 'test' in the obarray, and we'd like to use that 573 'test' in the obarray, and we'd like to use that
573 name for ':test'. That's a problem. */ 574 name for ':test'. That's a problem. */
574 if (NILP (found)) 575 if (EQ (found, Qunbound))
575 return pkg_intern_symbol (name, package, NULL); 576 return pkg_intern_symbol (name, package, NULL);
576 return XCAR (found); 577 return found;
577 } 578 }
578 579
579 if (NILP (found)) 580 if (EQ (found, Qunbound))
580 pkg_error ("Symbol '%s' is not accessible in package '%s'", 581 pkg_error ("Symbol '%s' is not accessible in package '%s'",
581 SDATA (name), SDATA (XPACKAGE (package)->name)); 582 SDATA (name), SDATA (XPACKAGE (package)->name));
582 583
583 /* Check if the symbol is accesible in the package as external 584 /* Check if the symbol is accesible in the package as external
584 symbol. PKG-FIXME: Check what to do for inherited symbols. */ 585 symbol. PKG-FIXME: Check what to do for inherited symbols. */
585 const Lisp_Object status = XCAR (XCDR (found));
586 if (external && EQ (status, QCinternal)) 586 if (external && EQ (status, QCinternal))
587 pkg_error ("Symbol '%s' is internal in package '%s'", 587 pkg_error ("Symbol '%s' is internal in package '%s'",
588 SDATA (name), SDATA (XPACKAGE (package)->name)); 588 SDATA (name), SDATA (XPACKAGE (package)->name));
589 589
590 return XCAR (found); 590 return found;
591} 591}
592 592
593/* Return symbol with name NAME when accessed without qualification in 593/* Return symbol with name NAME when accessed without qualification in
@@ -603,9 +603,10 @@ pkg_unqualified_symbol (Lisp_Object name)
603 603
604 /* If we want a symbol for a given package, check the 604 /* If we want a symbol for a given package, check the
605 package has that symboland its accessibily. */ 605 package has that symboland its accessibily. */
606 const Lisp_Object found = Ffind_symbol (name, package); 606 Lisp_Object status;
607 if (!NILP (found)) 607 const Lisp_Object found = pkg_find_symbol (name, package, &status);
608 return XCAR (found); 608 if (!EQ (found, Qunbound))
609 return found;
609 return pkg_intern_symbol (name, package, NULL); 610 return pkg_intern_symbol (name, package, NULL);
610} 611}
611 612
@@ -657,7 +658,7 @@ symbol that was found, and STATUS is one of the following:
657 CHECK_STRING (name); 658 CHECK_STRING (name);
658 package = package_or_default (package); 659 package = package_or_default (package);
659 Lisp_Object status; 660 Lisp_Object status;
660 const Lisp_Object symbol = lookup_symbol (name, package, &status); 661 const Lisp_Object symbol = pkg_find_symbol (name, package, &status);
661 if (EQ (symbol, Qunbound)) 662 if (EQ (symbol, Qunbound))
662 return Qnil; 663 return Qnil;
663 return list2 (symbol, status); 664 return list2 (symbol, status);
diff --git a/src/print.c b/src/print.c
index fed549099a2..e76bd44a82f 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2235,15 +2235,15 @@ print_symbol (Lisp_Object symbol, Lisp_Object printcharfun,
2235 else 2235 else
2236 { 2236 {
2237 /* If the symbol is accessible, it need not be qualified. */ 2237 /* If the symbol is accessible, it need not be qualified. */
2238 const Lisp_Object found = Ffind_symbol (name, Vearmuffs_package); 2238 Lisp_Object status;
2239 const bool accessible = !NILP (found); 2239 const Lisp_Object found = pkg_find_symbol (name, Vearmuffs_package, &status);
2240 if (!accessible || !EQ (XCAR (found), symbol)) 2240 const bool accessible = !EQ (found, Qunbound);
2241 if (!accessible || !EQ (found, symbol))
2241 { 2242 {
2242 print_symbol_name (XPACKAGE (package)->name, 2243 print_symbol_name (XPACKAGE (package)->name,
2243 printcharfun, escape); 2244 printcharfun, escape);
2244 const Lisp_Object found = Ffind_symbol (name, package); 2245 const Lisp_Object found = pkg_find_symbol (name, package, &status);
2245 eassert (!NILP (found)); 2246 eassert (!EQ (found, Qunbound));
2246 const Lisp_Object status = XCAR (XCDR (found));
2247 if (EQ (status, QCexternal)) 2247 if (EQ (status, QCexternal))
2248 print_c_string (":", printcharfun); 2248 print_c_string (":", printcharfun);
2249 else 2249 else