aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2025-04-07 00:58:32 -0400
committerStefan Monnier2025-04-07 00:58:32 -0400
commitfb5da5035a4975172e35680f78bd9d70a0124ead (patch)
treeeceb20098f19998051560fbb4008df11ed893cc4
parent94148549d782af3fb6677bc121fd5fc8dee3ea63 (diff)
parent31c5fd3bfba31687de31e1e4c3d3501401f023bc (diff)
downloademacs-fb5da5035a4975172e35680f78bd9d70a0124ead.tar.gz
emacs-fb5da5035a4975172e35680f78bd9d70a0124ead.zip
Merge branch 'cedet-object-name'
-rw-r--r--lisp/auth-source-pass.el1
-rw-r--r--lisp/cedet/ede/base.el12
-rw-r--r--lisp/cedet/ede/config.el9
-rw-r--r--lisp/cedet/ede/cpp-root.el2
-rw-r--r--lisp/cedet/ede/emacs.el2
-rw-r--r--lisp/cedet/ede/generic.el2
-rw-r--r--lisp/cedet/ede/linux.el8
-rw-r--r--lisp/cedet/ede/locate.el2
-rw-r--r--lisp/cedet/ede/project-am.el2
-rw-r--r--lisp/cedet/ede/simple.el2
-rw-r--r--lisp/cedet/semantic/analyze/refs.el3
-rw-r--r--lisp/cedet/semantic/bovine/c.el3
-rw-r--r--lisp/cedet/semantic/complete.el10
-rw-r--r--lisp/cedet/semantic/db-ebrowse.el6
-rw-r--r--lisp/cedet/semantic/db-file.el4
-rw-r--r--lisp/cedet/semantic/db-typecache.el2
-rw-r--r--lisp/cedet/semantic/db.el4
-rw-r--r--lisp/cedet/semantic/mru-bookmark.el2
-rw-r--r--lisp/cedet/srecode/compile.el17
-rw-r--r--lisp/cedet/srecode/cpp.el6
-rw-r--r--lisp/cedet/srecode/dictionary.el4
-rw-r--r--lisp/cedet/srecode/insert.el11
-rw-r--r--lisp/cedet/srecode/map.el2
-rw-r--r--lisp/cedet/srecode/mode.el2
-rw-r--r--lisp/cedet/srecode/semantic.el8
-rw-r--r--lisp/cedet/srecode/srt-mode.el4
-rw-r--r--lisp/cedet/srecode/table.el1
-rw-r--r--lisp/emacs-lisp/eieio-core.el22
-rw-r--r--lisp/emacs-lisp/eieio-custom.el1
-rw-r--r--lisp/emacs-lisp/eieio.el17
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el12
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-tests.el3
-rw-r--r--test/lisp/jsonrpc-tests.el1
33 files changed, 92 insertions, 95 deletions
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index e68a3e9129e..50f80288288 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -149,7 +149,6 @@ HOSTS can be a string or a list of strings."
149 149
150(defvar auth-source-pass-backend 150(defvar auth-source-pass-backend
151 (auth-source-backend 151 (auth-source-backend
152 (when (<= emacs-major-version 25) "password-store")
153 :source "." ;; not used 152 :source "." ;; not used
154 :type 'password-store 153 :type 'password-store
155 :search-function #'auth-source-pass-search) 154 :search-function #'auth-source-pass-search)
diff --git a/lisp/cedet/ede/base.el b/lisp/cedet/ede/base.el
index 4e27cd0cb69..599b855991d 100644
--- a/lisp/cedet/ede/base.el
+++ b/lisp/cedet/ede/base.el
@@ -627,14 +627,14 @@ instead of the current project."
627 "Fills :directory or :file slots if they're missing in project THIS. 627 "Fills :directory or :file slots if they're missing in project THIS.
628The other slot will be used to calculate values. 628The other slot will be used to calculate values.
629PROJECT-FILE-NAME is a name of project file (short name, like `pom.xml', etc." 629PROJECT-FILE-NAME is a name of project file (short name, like `pom.xml', etc."
630 (when (and (or (not (slot-boundp this :file)) 630 (when (and (not (and (slot-boundp this 'file)
631 (not (oref this file))) 631 (oref this file)))
632 (slot-boundp this :directory) 632 (slot-boundp this 'directory)
633 (oref this directory)) 633 (oref this directory))
634 (oset this file (expand-file-name project-file-name (oref this directory)))) 634 (oset this file (expand-file-name project-file-name (oref this directory))))
635 (when (and (or (not (slot-boundp this :directory)) 635 (when (and (not (and (slot-boundp this 'directory)
636 (not (oref this directory))) 636 (oref this directory)))
637 (slot-boundp this :file) 637 (slot-boundp this 'file)
638 (oref this file)) 638 (oref this file))
639 (oset this directory (file-name-directory (oref this file)))) 639 (oset this directory (file-name-directory (oref this file))))
640 ) 640 )
diff --git a/lisp/cedet/ede/config.el b/lisp/cedet/ede/config.el
index 89e83386879..fb21baf2985 100644
--- a/lisp/cedet/ede/config.el
+++ b/lisp/cedet/ede/config.el
@@ -154,14 +154,9 @@ the directory isn't on the `safe' list, ask to add it to the safe list."
154 (when (file-exists-p fname) 154 (when (file-exists-p fname)
155 (message "Ignoring EDE config file for now and creating a new one. Use C-c . g to load it.") 155 (message "Ignoring EDE config file for now and creating a new one. Use C-c . g to load it.")
156 ;; Set how it was ignored. 156 ;; Set how it was ignored.
157 (if loadask 157 (setq ignore-type (if loadask 'manual 'auto)))
158 (setq ignore-type 'manual)
159 (setq ignore-type 'auto))
160 )
161 ;; Create a new one. 158 ;; Create a new one.
162 (setq config (make-instance class 159 (setq config (make-instance class :file fname))
163 "Configuration"
164 :file fname))
165 (oset config ignored-file ignore-type) 160 (oset config ignored-file ignore-type)
166 161
167 ;; Set initial values based on project. 162 ;; Set initial values based on project.
diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el
index a43bd2f6f2a..4616d196716 100644
--- a/lisp/cedet/ede/cpp-root.el
+++ b/lisp/cedet/ede/cpp-root.el
@@ -327,7 +327,7 @@ If one doesn't exist, create a new one for this directory."
327 (ans (object-assoc dir :path targets)) 327 (ans (object-assoc dir :path targets))
328 ) 328 )
329 (when (not ans) 329 (when (not ans)
330 (setq ans (ede-cpp-root-target dir 330 (setq ans (ede-cpp-root-target
331 :name (file-name-nondirectory 331 :name (file-name-nondirectory
332 (directory-file-name dir)) 332 (directory-file-name dir))
333 :path dir 333 :path dir
diff --git a/lisp/cedet/ede/emacs.el b/lisp/cedet/ede/emacs.el
index c51968ebb8c..ca91a7e4ffb 100644
--- a/lisp/cedet/ede/emacs.el
+++ b/lisp/cedet/ede/emacs.el
@@ -118,7 +118,7 @@ All directories need at least one target.")
118 "Make sure the targets slot is bound." 118 "Make sure the targets slot is bound."
119 (cl-call-next-method) 119 (cl-call-next-method)
120 (unless (slot-boundp this 'targets) 120 (unless (slot-boundp this 'targets)
121 (oset this :targets nil))) 121 (oset this targets nil)))
122 122
123;;; File Stuff 123;;; File Stuff
124;; 124;;
diff --git a/lisp/cedet/ede/generic.el b/lisp/cedet/ede/generic.el
index 162f37f9373..7c6e2ec715f 100644
--- a/lisp/cedet/ede/generic.el
+++ b/lisp/cedet/ede/generic.el
@@ -153,7 +153,7 @@ The class allocated value is replace by different sub classes.")
153 "Make sure the targets slot is bound." 153 "Make sure the targets slot is bound."
154 (cl-call-next-method) 154 (cl-call-next-method)
155 (unless (slot-boundp this 'targets) 155 (unless (slot-boundp this 'targets)
156 (oset this :targets nil)) 156 (oset this targets nil))
157 ) 157 )
158 158
159(cl-defmethod ede-project-root ((this ede-generic-project)) 159(cl-defmethod ede-project-root ((this ede-generic-project))
diff --git a/lisp/cedet/ede/linux.el b/lisp/cedet/ede/linux.el
index d42f91c7500..34296972ddd 100644
--- a/lisp/cedet/ede/linux.el
+++ b/lisp/cedet/ede/linux.el
@@ -227,7 +227,7 @@ All directories need at least one target.")
227 "Make sure the targets slot is bound." 227 "Make sure the targets slot is bound."
228 (cl-call-next-method) 228 (cl-call-next-method)
229 (unless (slot-boundp this 'targets) 229 (unless (slot-boundp this 'targets)
230 (oset this :targets nil))) 230 (oset this targets nil)))
231 231
232;;; File Stuff 232;;; File Stuff
233;; 233;;
@@ -377,9 +377,9 @@ Argument COMMAND is the command to use for compiling the target."
377 (inc (ede-linux--include-path dir bdir arch)) 377 (inc (ede-linux--include-path dir bdir arch))
378 (ver (ede-linux-version dir))) 378 (ver (ede-linux-version dir)))
379 (oset this version ver) 379 (oset this version ver)
380 (oset this :build-directory bdir) 380 (oset this build-directory bdir)
381 (oset this :architecture arch) 381 (oset this architecture arch)
382 (oset this :include-path inc) 382 (oset this include-path inc)
383 )) 383 ))
384 384
385(provide 'ede/linux) 385(provide 'ede/linux)
diff --git a/lisp/cedet/ede/locate.el b/lisp/cedet/ede/locate.el
index bad8952ec60..1651b4d3ad3 100644
--- a/lisp/cedet/ede/locate.el
+++ b/lisp/cedet/ede/locate.el
@@ -89,7 +89,7 @@ based on `ede-locate-setup-options'."
89 (when (called-interactively-p 'interactive) 89 (when (called-interactively-p 'interactive)
90 (message "Setting locator to ede-locate-base")) 90 (message "Setting locator to ede-locate-base"))
91 (setq ans 'ede-locate-base)) 91 (setq ans 'ede-locate-base))
92 (oset proj locate-obj (make-instance ans "Loc" :root root)) 92 (oset proj locate-obj (make-instance ans :root root))
93 (when (called-interactively-p 'interactive) 93 (when (called-interactively-p 'interactive)
94 (message "Setting locator to %s" ans)) 94 (message "Setting locator to %s" ans))
95 )) 95 ))
diff --git a/lisp/cedet/ede/project-am.el b/lisp/cedet/ede/project-am.el
index f45cf1b8616..e66751ba9b1 100644
--- a/lisp/cedet/ede/project-am.el
+++ b/lisp/cedet/ede/project-am.el
@@ -480,7 +480,7 @@ This is used when subprojects are made in named subdirectories."
480 (bug (nth 2 pi)) 480 (bug (nth 2 pi))
481 (cof (nth 3 pi)) 481 (cof (nth 3 pi))
482 (ampf (project-am-makefile 482 (ampf (project-am-makefile
483 pn :name pn 483 :name pn
484 :version ver 484 :version ver
485 :mailinglist (or bug "") 485 :mailinglist (or bug "")
486 :file fn))) 486 :file fn)))
diff --git a/lisp/cedet/ede/simple.el b/lisp/cedet/ede/simple.el
index f1f61c50421..3f7a359a445 100644
--- a/lisp/cedet/ede/simple.el
+++ b/lisp/cedet/ede/simple.el
@@ -86,7 +86,7 @@ ROOTPROJ is nil, since we will only create a single EDE project here."
86 (obj nil)) 86 (obj nil))
87 (when pf 87 (when pf
88 (setq obj (eieio-persistent-read pf)) 88 (setq obj (eieio-persistent-read pf))
89 (oset obj :directory dir) 89 (oset obj directory dir)
90 ) 90 )
91 obj)) 91 obj))
92 92
diff --git a/lisp/cedet/semantic/analyze/refs.el b/lisp/cedet/semantic/analyze/refs.el
index 45e74c2b27a..3d3dfdc7975 100644
--- a/lisp/cedet/semantic/analyze/refs.el
+++ b/lisp/cedet/semantic/analyze/refs.el
@@ -89,8 +89,7 @@ Use `semantic-analyze-current-tag' to debug this fcn."
89 89
90 (setq allhits (semantic--analyze-refs-full-lookup tag scope t)) 90 (setq allhits (semantic--analyze-refs-full-lookup tag scope t))
91 91
92 (semantic-analyze-references (semantic-tag-name tag) 92 (semantic-analyze-references :tag tag
93 :tag tag
94 :tagdb db 93 :tagdb db
95 :scope scope 94 :scope scope
96 :rawsearchdata allhits) 95 :rawsearchdata allhits)
diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el
index 81639b98176..659e30a45d9 100644
--- a/lisp/cedet/semantic/bovine/c.el
+++ b/lisp/cedet/semantic/bovine/c.el
@@ -1256,8 +1256,7 @@ Use `semantic-analyze-current-tag' to debug this fcn."
1256 (setq allhits (semantic--analyze-refs-full-lookup tag scope t))) 1256 (setq allhits (semantic--analyze-refs-full-lookup tag scope t)))
1257 1257
1258 ;; (setq refs 1258 ;; (setq refs
1259 (semantic-analyze-references (semantic-tag-name tag) 1259 (semantic-analyze-references :tag tag
1260 :tag tag
1261 :tagdb db 1260 :tagdb db
1262 :scope scope 1261 :scope scope
1263 :rawsearchdata allhits)))) ;;) 1262 :rawsearchdata allhits)))) ;;)
diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el
index 736025e1d54..e0d16d6fbce 100644
--- a/lisp/cedet/semantic/complete.el
+++ b/lisp/cedet/semantic/complete.el
@@ -1899,7 +1899,7 @@ completion text in ghost text."
1899 (mapcar 1899 (mapcar
1900 (lambda (class) 1900 (lambda (class)
1901 (let* ((C (intern (car class))) 1901 (let* ((C (intern (car class)))
1902 (doc (documentation-property C 'variable-documentation)) 1902 (doc (cl--class-docstring (cl--find-class C)))
1903 (doc1 (car (split-string doc "\n"))) 1903 (doc1 (car (split-string doc "\n")))
1904 ) 1904 )
1905 (list 'const 1905 (list 'const
@@ -1930,7 +1930,7 @@ DEFAULT-TAG is a semantic tag or string to use as the default value.
1930If INITIAL-INPUT is non-nil, insert it in the minibuffer initially. 1930If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
1931HISTORY is a symbol representing a variable to store the history in." 1931HISTORY is a symbol representing a variable to store the history in."
1932 (semantic-complete-read-tag-engine 1932 (semantic-complete-read-tag-engine
1933 (semantic-collector-buffer-deep prompt :buffer (current-buffer)) 1933 (semantic-collector-buffer-deep :buffer (current-buffer))
1934 (semantic-displayer-traditional-with-focus-highlight) 1934 (semantic-displayer-traditional-with-focus-highlight)
1935 ;;(semantic-displayer-tooltip) 1935 ;;(semantic-displayer-tooltip)
1936 prompt 1936 prompt
@@ -1952,7 +1952,7 @@ DEFAULT-TAG is a semantic tag or string to use as the default value.
1952If INITIAL-INPUT is non-nil, insert it in the minibuffer initially. 1952If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
1953HISTORY is a symbol representing a variable to store the history in." 1953HISTORY is a symbol representing a variable to store the history in."
1954 (semantic-complete-read-tag-engine 1954 (semantic-complete-read-tag-engine
1955 (semantic-collector-local-members prompt :buffer (current-buffer)) 1955 (semantic-collector-local-members :buffer (current-buffer))
1956 (semantic-displayer-traditional-with-focus-highlight) 1956 (semantic-displayer-traditional-with-focus-highlight)
1957 ;;(semantic-displayer-tooltip) 1957 ;;(semantic-displayer-tooltip)
1958 prompt 1958 prompt
@@ -1974,8 +1974,7 @@ DEFAULT-TAG is a semantic tag or string to use as the default value.
1974If INITIAL-INPUT is non-nil, insert it in the minibuffer initially. 1974If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
1975HISTORY is a symbol representing a variable to store the history in." 1975HISTORY is a symbol representing a variable to store the history in."
1976 (semantic-complete-read-tag-engine 1976 (semantic-complete-read-tag-engine
1977 (semantic-collector-project-brutish prompt 1977 (semantic-collector-project-brutish :buffer (current-buffer)
1978 :buffer (current-buffer)
1979 :path (current-buffer) 1978 :path (current-buffer)
1980 ) 1979 )
1981 (semantic-displayer-traditional-with-focus-highlight) 1980 (semantic-displayer-traditional-with-focus-highlight)
@@ -2049,7 +2048,6 @@ prompts. these are calculated from the CONTEXT variable passed in."
2049 (setq syms (nreverse (cdr (nreverse syms)))) 2048 (setq syms (nreverse (cdr (nreverse syms))))
2050 (semantic-complete-read-tag-engine 2049 (semantic-complete-read-tag-engine
2051 (semantic-collector-analyze-completions 2050 (semantic-collector-analyze-completions
2052 prompt
2053 :buffer (oref context buffer) 2051 :buffer (oref context buffer)
2054 :context context) 2052 :context context)
2055 (semantic-displayer-traditional-with-focus-highlight) 2053 (semantic-displayer-traditional-with-focus-highlight)
diff --git a/lisp/cedet/semantic/db-ebrowse.el b/lisp/cedet/semantic/db-ebrowse.el
index 3e34f4a1ea1..51e52afa64a 100644
--- a/lisp/cedet/semantic/db-ebrowse.el
+++ b/lisp/cedet/semantic/db-ebrowse.el
@@ -309,11 +309,7 @@ If there is no database for DIRECTORY available, then
309 ) 309 )
310 (if found 310 (if found
311 (setq db found) 311 (setq db found)
312 (setq db (make-instance 312 (setq db (make-instance dbeC :ebrowse-struct ebd))
313 dbeC
314 directory
315 :ebrowse-struct ebd
316 ))
317 (oset db reference-directory directory)) 313 (oset db reference-directory directory))
318 314
319 ;; Once we recycle or make a new DB, refresh the 315 ;; Once we recycle or make a new DB, refresh the
diff --git a/lisp/cedet/semantic/db-file.el b/lisp/cedet/semantic/db-file.el
index f15e6e69cb0..3edbc4a2fcd 100644
--- a/lisp/cedet/semantic/db-file.el
+++ b/lisp/cedet/semantic/db-file.el
@@ -138,10 +138,6 @@ If DIRECTORY doesn't exist, create a new one."
138 (unless db 138 (unless db
139 (setq db (make-instance 139 (setq db (make-instance
140 dbc ; Create the database requested. Perhaps 140 dbc ; Create the database requested. Perhaps
141 (concat (file-name-nondirectory
142 (directory-file-name
143 directory))
144 "/")
145 :file fn :tables nil 141 :file fn :tables nil
146 :semantic-tag-version semantic-tag-version 142 :semantic-tag-version semantic-tag-version
147 :semanticdb-version semanticdb-file-version))) 143 :semanticdb-version semanticdb-file-version)))
diff --git a/lisp/cedet/semantic/db-typecache.el b/lisp/cedet/semantic/db-typecache.el
index 62eb72af08f..92ddb65ef68 100644
--- a/lisp/cedet/semantic/db-typecache.el
+++ b/lisp/cedet/semantic/db-typecache.el
@@ -136,7 +136,7 @@ If there is no table, create one, and fill it in."
136 ;; Make sure we have a cache object in the DB index. 136 ;; Make sure we have a cache object in the DB index.
137 (when (not cache) 137 (when (not cache)
138 ;; The object won't change as we fill it with stuff. 138 ;; The object won't change as we fill it with stuff.
139 (setq cache (semanticdb-typecache (semanticdb-full-filename table))) 139 (setq cache (semanticdb-typecache))
140 (oset idx type-cache cache)) 140 (oset idx type-cache cache))
141 141
142 cache)) 142 cache))
diff --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el
index ffbb3431a81..375e43f2561 100644
--- a/lisp/cedet/semantic/db.el
+++ b/lisp/cedet/semantic/db.el
@@ -188,7 +188,6 @@ If one doesn't exist, create it."
188 (oref obj index) 188 (oref obj index)
189 (let ((idx nil)) 189 (let ((idx nil))
190 (setq idx (funcall semanticdb-default-find-index-class 190 (setq idx (funcall semanticdb-default-find-index-class
191 (concat (eieio-object-name obj) " index")
192 ;; Fill in the defaults 191 ;; Fill in the defaults
193 :table obj 192 :table obj
194 )) 193 ))
@@ -413,7 +412,6 @@ If the table for FILE does not exist, create one."
413 ;; This implementation will satisfy autoloaded classes 412 ;; This implementation will satisfy autoloaded classes
414 ;; for tables. 413 ;; for tables.
415 (setq newtab (funcall (oref db new-table-class) 414 (setq newtab (funcall (oref db new-table-class)
416 (file-name-nondirectory file)
417 :file (file-name-nondirectory file) 415 :file (file-name-nondirectory file)
418 )) 416 ))
419 (setf (slot-value newtab 'parent-db) db) 417 (setf (slot-value newtab 'parent-db) db)
@@ -486,7 +484,7 @@ other than :table."
486 (if obj 484 (if obj
487 obj ;; Just return it. 485 obj ;; Just return it.
488 ;; No object, let's create a new one and return that. 486 ;; No object, let's create a new one and return that.
489 (setq obj (funcall desired-class "Cache" :table table)) 487 (setq obj (make-instance desired-class :table table))
490 (object-add-to-list table 'cache obj) 488 (object-add-to-list table 'cache obj)
491 obj))) 489 obj)))
492 490
diff --git a/lisp/cedet/semantic/mru-bookmark.el b/lisp/cedet/semantic/mru-bookmark.el
index edb8e091a2a..edb2fe414e6 100644
--- a/lisp/cedet/semantic/mru-bookmark.el
+++ b/lisp/cedet/semantic/mru-bookmark.el
@@ -197,7 +197,7 @@ The resulting bookmark is then sorted within the ring."
197 (ring-remove ring idx)) 197 (ring-remove ring idx))
198 (setq idx (1+ idx))) 198 (setq idx (1+ idx)))
199 ;; Create a new mark 199 ;; Create a new mark
200 (let ((sbm (semantic-bookmark (semantic-tag-name tag) 200 (let ((sbm (semantic-bookmark :object-name (semantic-tag-name tag)
201 :tag tag))) 201 :tag tag)))
202 ;; Take the mark, and update it for the current state. 202 ;; Take the mark, and update it for the current state.
203 (ring-insert ring sbm) 203 (ring-insert ring sbm)
diff --git a/lisp/cedet/srecode/compile.el b/lisp/cedet/srecode/compile.el
index 08082b9ecc1..95e86c63a90 100644
--- a/lisp/cedet/srecode/compile.el
+++ b/lisp/cedet/srecode/compile.el
@@ -199,8 +199,7 @@ STATE is the current compilation state."
199 (tag nil) 199 (tag nil)
200 (class nil) 200 (class nil)
201 (table nil) 201 (table nil)
202 (STATE (srecode-compile-state (file-name-nondirectory 202 (STATE (srecode-compile-state))
203 (buffer-file-name))))
204 (mode nil) 203 (mode nil)
205 (application nil) 204 (application nil)
206 (framework nil) 205 (framework nil)
@@ -263,7 +262,7 @@ STATE is the current compilation state."
263 ;; Create a compound dictionary value from "value". 262 ;; Create a compound dictionary value from "value".
264 (require 'srecode/dictionary) 263 (require 'srecode/dictionary)
265 (let ((cv (srecode-dictionary-compound-variable 264 (let ((cv (srecode-dictionary-compound-variable
266 name :value value))) 265 :value value)))
267 (setq vars (cons (cons name cv) vars))) 266 (setq vars (cons (cons name cv) vars)))
268 )) 267 ))
269 ) 268 )
@@ -361,7 +360,7 @@ STATE is the current compile state as an object of class
361 :where 'end))))))) 360 :where 'end)))))))
362 361
363 ;; Construct and return the template object. 362 ;; Construct and return the template object.
364 (srecode-template (semantic-tag-name tag) 363 (srecode-template :object-name (semantic-tag-name tag)
365 :context context 364 :context context
366 :args (nreverse addargs) 365 :args (nreverse addargs)
367 :dictionary root-dict 366 :dictionary root-dict
@@ -504,7 +503,8 @@ PROPS are additional properties that might need to be passed
504to the inserter constructor." 503to the inserter constructor."
505 ;;(message "Compile: %s %S" name props) 504 ;;(message "Compile: %s %S" name props)
506 (if (not key) 505 (if (not key)
507 (apply #'make-instance 'srecode-template-inserter-variable name props) 506 (apply #'make-instance 'srecode-template-inserter-variable
507 :object-name name props)
508 (let ((classes (eieio-class-children 'srecode-template-inserter)) 508 (let ((classes (eieio-class-children 'srecode-template-inserter))
509 (new nil)) 509 (new nil))
510 ;; Loop over the various subclasses and 510 ;; Loop over the various subclasses and
@@ -515,7 +515,8 @@ to the inserter constructor."
515 (when (and (not (class-abstract-p (car classes))) 515 (when (and (not (class-abstract-p (car classes)))
516 (equal (oref-default (car classes) key) key)) 516 (equal (oref-default (car classes) key) key))
517 ;; Create the new class, and apply state. 517 ;; Create the new class, and apply state.
518 (setq new (apply #'make-instance (car classes) name props)) 518 (setq new (apply #'make-instance (car classes)
519 :object-name name props))
519 (srecode-inserter-apply-state new STATE) 520 (srecode-inserter-apply-state new STATE)
520 ) 521 )
521 (setq classes (cdr classes))) 522 (setq classes (cdr classes)))
@@ -589,7 +590,7 @@ A list of defined variables VARS provides a variable table."
589(cl-defmethod srecode-dump ((tmp srecode-template)) 590(cl-defmethod srecode-dump ((tmp srecode-template))
590 "Dump the contents of the SRecode template tmp." 591 "Dump the contents of the SRecode template tmp."
591 (princ "== Template \"") 592 (princ "== Template \"")
592 (princ (eieio-object-name-string tmp)) 593 (princ (slot-value tmp 'object-name))
593 (princ "\" in context ") 594 (princ "\" in context ")
594 (princ (oref tmp context)) 595 (princ (oref tmp context))
595 (princ "\n") 596 (princ "\n")
@@ -635,7 +636,7 @@ Argument INDENT specifies the indentation level for the list."
635(cl-defmethod srecode-dump ((ins srecode-template-inserter) _indent) 636(cl-defmethod srecode-dump ((ins srecode-template-inserter) _indent)
636 "Dump the state of the SRecode template inserter INS." 637 "Dump the state of the SRecode template inserter INS."
637 (princ "INS: \"") 638 (princ "INS: \"")
638 (princ (eieio-object-name-string ins)) 639 (princ (slot-value ins 'object-name))
639 (when (oref ins secondname) 640 (when (oref ins secondname)
640 (princ "\" : \"") 641 (princ "\" : \"")
641 (princ (oref ins secondname))) 642 (princ (oref ins secondname)))
diff --git a/lisp/cedet/srecode/cpp.el b/lisp/cedet/srecode/cpp.el
index d49ccde24fa..63613969191 100644
--- a/lisp/cedet/srecode/cpp.el
+++ b/lisp/cedet/srecode/cpp.el
@@ -146,8 +146,7 @@ specified in a C file."
146 (value-dict (srecode-dictionary-add-section-dictionary 146 (value-dict (srecode-dictionary-add-section-dictionary
147 dict "VALUE"))) 147 dict "VALUE")))
148 (srecode-semantic-apply-tag-to-dict 148 (srecode-semantic-apply-tag-to-dict
149 (srecode-semantic-tag (semantic-tag-name value-tag) 149 (srecode-semantic-tag :prime value-tag)
150 :prime value-tag)
151 value-dict)) 150 value-dict))
152 151
153 ;; Discriminate using statements referring to namespaces and 152 ;; Discriminate using statements referring to namespaces and
@@ -224,8 +223,7 @@ specified in a C file."
224 (let ((template-dict (srecode-dictionary-add-section-dictionary 223 (let ((template-dict (srecode-dictionary-add-section-dictionary
225 templates-dict "ARGS"))) 224 templates-dict "ARGS")))
226 (srecode-semantic-apply-tag-to-dict 225 (srecode-semantic-apply-tag-to-dict
227 (srecode-semantic-tag (semantic-tag-name template) 226 (srecode-semantic-tag :prime template)
228 :prime template)
229 template-dict))))) 227 template-dict)))))
230 ) 228 )
231 229
diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el
index 2fbed835bdd..bac3b7c48d3 100644
--- a/lisp/cedet/srecode/dictionary.el
+++ b/lisp/cedet/srecode/dictionary.el
@@ -369,7 +369,7 @@ values but STATE is nil."
369 (srecode-dictionary-set-value 369 (srecode-dictionary-set-value
370 dict name 370 dict name
371 (srecode-dictionary-compound-variable 371 (srecode-dictionary-compound-variable
372 name :value value :state state))))) 372 :value value :state state)))))
373 (setq entries (nthcdr 2 entries))) 373 (setq entries (nthcdr 2 entries)))
374 dict) 374 dict)
375 375
@@ -536,7 +536,7 @@ inserted with a new editable field.")
536 (error "Unknown default value for value %S" name))) 536 (error "Unknown default value for value %S" name)))
537 537
538 ;; Create a field from the inserter. 538 ;; Create a field from the inserter.
539 (srecode-field name :name name 539 (srecode-field :name name
540 :start start 540 :start start
541 :end (point) 541 :end (point)
542 :prompt (oref sti prompt) 542 :prompt (oref sti prompt)
diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el
index 2e70469fa39..3b4da876a2c 100644
--- a/lisp/cedet/srecode/insert.el
+++ b/lisp/cedet/srecode/insert.el
@@ -648,8 +648,7 @@ Use DICTIONARY to resolve values."
648Use DICTIONARY to resolve values." 648Use DICTIONARY to resolve values."
649 (let* ((default (srecode-insert-ask-default sti dictionary)) 649 (let* ((default (srecode-insert-ask-default sti dictionary))
650 (compound-value 650 (compound-value
651 (srecode-field-value (oref sti object-name) 651 (srecode-field-value :firstinserter sti
652 :firstinserter sti
653 :defaultvalue default)) 652 :defaultvalue default))
654 ) 653 )
655 ;; Return this special compound value as the thing to insert. 654 ;; Return this special compound value as the thing to insert.
@@ -806,7 +805,7 @@ Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
806 (srecode-insert-report-error 805 (srecode-insert-report-error
807 dict 806 dict
808 "Only section dictionaries allowed for `%s'" 807 "Only section dictionaries allowed for `%s'"
809 (eieio-object-name-string sti))) 808 (slot-value sti 'object-name)))
810 809
811 ;; Output the code from the sub-template. 810 ;; Output the code from the sub-template.
812 (srecode-insert-method (slot-value sti slot) dict)) 811 (srecode-insert-method (slot-value sti slot) dict))
@@ -860,10 +859,10 @@ applied to the text between the section start and the
860 "For the section inserter INS, parse INPUT. 859 "For the section inserter INS, parse INPUT.
861Shorten input until the END token is found. 860Shorten input until the END token is found.
862Return the remains of INPUT." 861Return the remains of INPUT."
863 (let* ((out (srecode-compile-split-code tag input STATE 862 (let* ((name (oref ins object-name))
864 (oref ins object-name)))) 863 (out (srecode-compile-split-code tag input STATE name)))
865 (oset ins template (srecode-template 864 (oset ins template (srecode-template
866 (eieio-object-name-string ins) 865 :object-name name
867 :context nil 866 :context nil
868 :args nil 867 :args nil
869 :code (cdr out))) 868 :code (cdr out)))
diff --git a/lisp/cedet/srecode/map.el b/lisp/cedet/srecode/map.el
index 784e0c2d931..923cca4be0c 100644
--- a/lisp/cedet/srecode/map.el
+++ b/lisp/cedet/srecode/map.el
@@ -338,7 +338,7 @@ if that file is NEW, otherwise assume the mode has not changed."
338 ;; Only do the save if we are dirty, or if we are in an interactive 338 ;; Only do the save if we are dirty, or if we are in an interactive
339 ;; Emacs. 339 ;; Emacs.
340 (when (and dirty (not noninteractive) 340 (when (and dirty (not noninteractive)
341 (slot-boundp srecode-current-map :file)) 341 (slot-boundp srecode-current-map 'file))
342 (eieio-persistent-save srecode-current-map)) 342 (eieio-persistent-save srecode-current-map))
343 )) 343 ))
344 344
diff --git a/lisp/cedet/srecode/mode.el b/lisp/cedet/srecode/mode.el
index e266a7a679a..573f1f6afd7 100644
--- a/lisp/cedet/srecode/mode.el
+++ b/lisp/cedet/srecode/mode.el
@@ -207,7 +207,7 @@ MENU-DEF is the menu to bind this into."
207 (ctxtcons (assoc ctxt alltabs)) 207 (ctxtcons (assoc ctxt alltabs))
208 (bind (if (slot-boundp temp 'binding) 208 (bind (if (slot-boundp temp 'binding)
209 (oref temp binding))) 209 (oref temp binding)))
210 (name (eieio-object-name-string temp))) 210 (name (slot-value temp 'object-name)))
211 211
212 (when (not ctxtcons) 212 (when (not ctxtcons)
213 (if (string= context ctxt) 213 (if (string= context ctxt)
diff --git a/lisp/cedet/srecode/semantic.el b/lisp/cedet/srecode/semantic.el
index bfacda54557..1db041cdfd0 100644
--- a/lisp/cedet/srecode/semantic.el
+++ b/lisp/cedet/srecode/semantic.el
@@ -129,8 +129,7 @@ variable default values, and other things."
129 larg nil nil))) 129 larg nil nil)))
130 ;; Apply the sub-argument to the subdictionary. 130 ;; Apply the sub-argument to the subdictionary.
131 (srecode-semantic-apply-tag-to-dict 131 (srecode-semantic-apply-tag-to-dict
132 (srecode-semantic-tag (semantic-tag-name larg) 132 (srecode-semantic-tag :prime larg)
133 :prime larg)
134 subdict) 133 subdict)
135 ) 134 )
136 ;; Next! 135 ;; Next!
@@ -203,8 +202,7 @@ variable default values, and other things."
203 (when (not tag) 202 (when (not tag)
204 (error "No tag for current template. Use the semantic kill-ring")) 203 (error "No tag for current template. Use the semantic kill-ring"))
205 (srecode-semantic-apply-tag-to-dict 204 (srecode-semantic-apply-tag-to-dict
206 (srecode-semantic-tag (semantic-tag-name tag) 205 (srecode-semantic-tag :prime tag)
207 :prime tag)
208 dict))) 206 dict)))
209 207
210;;; :tagtype ARGUMENT HANDLING 208;;; :tagtype ARGUMENT HANDLING
@@ -394,7 +392,7 @@ as `function' will leave point where code might be inserted."
394 ;; Resolve TAG into the dictionary. We may have a :tag arg 392 ;; Resolve TAG into the dictionary. We may have a :tag arg
395 ;; from the macro such that we don't need to do this. 393 ;; from the macro such that we don't need to do this.
396 (when (not (srecode-dictionary-lookup-name dict "TAG")) 394 (when (not (srecode-dictionary-lookup-name dict "TAG"))
397 (let ((tagobj (srecode-semantic-tag (semantic-tag-name tag) :prime tag)) 395 (let ((tagobj (srecode-semantic-tag :prime tag))
398 ) 396 )
399 (srecode-semantic-apply-tag-to-dict tagobj dict))) 397 (srecode-semantic-apply-tag-to-dict tagobj dict)))
400 398
diff --git a/lisp/cedet/srecode/srt-mode.el b/lisp/cedet/srecode/srt-mode.el
index 44c82e55b53..45040246fb2 100644
--- a/lisp/cedet/srecode/srt-mode.el
+++ b/lisp/cedet/srecode/srt-mode.el
@@ -276,7 +276,7 @@ we can tell font lock about them.")
276 (prin1 (format "%c" key)) 276 (prin1 (format "%c" key))
277 ))) 277 )))
278 (terpri) 278 (terpri)
279 (princ (documentation-property C 'variable-documentation)) 279 (princ (cl--class-docstring (cl--find-class C)))
280 (terpri) 280 (terpri)
281 (when showexample 281 (when showexample
282 (princ "Example:") 282 (princ "Example:")
@@ -503,7 +503,7 @@ section or ? for an ask variable."
503 (when inserter 503 (when inserter
504 (let ((base 504 (let ((base
505 (cons (oref inserter object-name) 505 (cons (oref inserter object-name)
506 (if (and (slot-boundp inserter :secondname) 506 (if (and (slot-boundp inserter 'secondname)
507 (oref inserter secondname)) 507 (oref inserter secondname))
508 (split-string (oref inserter secondname) 508 (split-string (oref inserter secondname)
509 ":") 509 ":")
diff --git a/lisp/cedet/srecode/table.el b/lisp/cedet/srecode/table.el
index ba87c0a01d2..6f98038b614 100644
--- a/lisp/cedet/srecode/table.el
+++ b/lisp/cedet/srecode/table.el
@@ -180,7 +180,6 @@ INIT are the initialization parameters for the new template table."
180 (old (srecode-mode-table-find mt file)) 180 (old (srecode-mode-table-find mt file))
181 (attr (file-attributes file)) 181 (attr (file-attributes file))
182 (new (apply #'srecode-template-table 182 (new (apply #'srecode-template-table
183 (file-name-nondirectory file)
184 :file file 183 :file file
185 :filesize (file-attribute-size attr) 184 :filesize (file-attribute-size attr)
186 :filedate (file-attribute-modification-time attr) 185 :filedate (file-attribute-modification-time attr)
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index f95fd65fa5c..b3a8698e31d 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -740,18 +740,19 @@ Argument FN is the function calling this verifier."
740 740
741;;; Get/Set slots in an object. 741;;; Get/Set slots in an object.
742 742
743(eval-and-compile
744 (defun eieio--check-slot-name (exp _obj slot &rest _)
745 (pcase slot
746 ((and (or `',name (and name (pred keywordp)))
747 (guard (not (eieio--known-slot-name-p name))))
748 (macroexp-warn-and-return
749 (format-message "Unknown slot `%S'" name)
750 exp nil 'compile-only name))
751 (_ exp))))
752
743(defun eieio-oref (obj slot) 753(defun eieio-oref (obj slot)
744 "Return the value in OBJ at SLOT in the object vector." 754 "Return the value in OBJ at SLOT in the object vector."
745 (declare (compiler-macro 755 (declare (compiler-macro eieio--check-slot-name)
746 (lambda (exp)
747 (ignore obj)
748 (pcase slot
749 ((and (or `',name (and name (pred keywordp)))
750 (guard (not (eieio--known-slot-name-p name))))
751 (macroexp-warn-and-return
752 (format-message "Unknown slot `%S'" name)
753 exp nil 'compile-only name))
754 (_ exp))))
755 ;; FIXME: Make it a gv-expander such that the hash-table lookup is 756 ;; FIXME: Make it a gv-expander such that the hash-table lookup is
756 ;; only performed once when used in `push' and friends? 757 ;; only performed once when used in `push' and friends?
757 (gv-setter eieio-oset)) 758 (gv-setter eieio-oset))
@@ -822,6 +823,7 @@ Fills in CLASS's SLOT with its default value."
822(defun eieio-oset (obj slot value) 823(defun eieio-oset (obj slot value)
823 "Do the work for the macro `oset'. 824 "Do the work for the macro `oset'.
824Fills in OBJ's SLOT with VALUE." 825Fills in OBJ's SLOT with VALUE."
826 (declare (compiler-macro eieio--check-slot-name))
825 (cl-check-type slot symbol) 827 (cl-check-type slot symbol)
826 (cond 828 (cond
827 ((cl-typep obj '(or eieio-object cl-structure-object)) 829 ((cl-typep obj '(or eieio-object cl-structure-object))
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index 3f5291d0dee..375a1652d3d 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -31,6 +31,7 @@
31;; `:custom'. 31;; `:custom'.
32 32
33(require 'eieio) 33(require 'eieio)
34(require 'eieio-base) ;; For `eieio-named's slot.
34(require 'widget) 35(require 'widget)
35(require 'wid-edit) 36(require 'wid-edit)
36 37
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 424baafc503..2a80c5d7c3e 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -304,7 +304,7 @@ and reference them using the function `class-option'."
304 ;; but hide it so we don't trigger indefinitely. 304 ;; but hide it so we don't trigger indefinitely.
305 `(,(car whole) (identity ,(car slots)) 305 `(,(car whole) (identity ,(car slots))
306 ,@(cdr slots)) 306 ,@(cdr slots))
307 nil nil (car slots)))) 307 '(obsolete eieio-constructor-name-arg) nil (car slots))))
308 308
309;;; Get/Set slots in an object. 309;;; Get/Set slots in an object.
310;; 310;;
@@ -554,6 +554,7 @@ after they are created."
554Setting a slot's value makes it bound. Calling `slot-makeunbound' will 554Setting a slot's value makes it bound. Calling `slot-makeunbound' will
555make a slot unbound. 555make a slot unbound.
556OBJECT can be an instance or a class." 556OBJECT can be an instance or a class."
557 (declare (compiler-macro eieio--check-slot-name))
557 ;; Skip typechecking while retrieving this value. 558 ;; Skip typechecking while retrieving this value.
558 (let ((eieio-skip-typecheck t)) 559 (let ((eieio-skip-typecheck t))
559 ;; Return nil if the magic symbol is in there. 560 ;; Return nil if the magic symbol is in there.
@@ -700,6 +701,20 @@ for each slot. For example:
700 701
701 (make-instance \\='foo :slot1 value1 :slotN valueN)") 702 (make-instance \\='foo :slot1 value1 :slotN valueN)")
702 703
704(put 'make-instance 'compiler-macro
705 (lambda (whole class &rest slots)
706 (if (or (null slots) (keywordp (car slots))
707 ;; Detect the second pass!
708 (eq 'identity (car-safe (car slots))))
709 whole
710 (macroexp-warn-and-return
711 (format "Obsolete name arg %S to `make-instance'" (car slots))
712 ;; Keep the name arg, for backward compatibility,
713 ;; but hide it so we don't trigger indefinitely.
714 `(,(car whole) ,class (identity ,(car slots))
715 ,@(cdr slots))
716 '(obsolete eieio-constructor-name-arg) nil (car slots)))))
717
703(define-obsolete-function-alias 'constructor #'make-instance "25.1") 718(define-obsolete-function-alias 'constructor #'make-instance "25.1")
704 719
705(cl-defmethod make-instance 720(cl-defmethod make-instance
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el b/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
index c9da7d92deb..13c33a219ee 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
@@ -138,7 +138,7 @@
138 (:AFTER eitest-B-base1) 138 (:AFTER eitest-B-base1)
139 (:AFTER eitest-B) 139 (:AFTER eitest-B)
140 ))) 140 )))
141 (eitest-F (eitest-B nil)) 141 (eitest-F (eitest-B))
142 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list)) 142 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
143 (eieio-test-match ans))) 143 (eieio-test-match ans)))
144 144
@@ -153,7 +153,9 @@
153(ert-deftest eieio-test-method-order-list-4 () 153(ert-deftest eieio-test-method-order-list-4 ()
154 ;; Both of these situations should succeed. 154 ;; Both of these situations should succeed.
155 (should (eitest-H 'eitest-A)) 155 (should (eitest-H 'eitest-A))
156 (should (eitest-H (eitest-A nil)))) 156 (let ((eieio-backward-compatibility t))
157 (with-suppressed-warnings ((obsolete eieio-constructor-name-arg))
158 (should (eitest-H (eitest-A nil))))))
157 159
158;;; Return value from :PRIMARY 160;;; Return value from :PRIMARY
159;; 161;;
@@ -213,7 +215,7 @@
213 (:STATIC C-base1) 215 (:STATIC C-base1)
214 (:STATIC C-base2) 216 (:STATIC C-base2)
215 ))) 217 )))
216 (C nil) 218 (C)
217 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list)) 219 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
218 (eieio-test-match ans))) 220 (eieio-test-match ans)))
219 221
@@ -262,7 +264,7 @@
262 (:PRIMARY D-base2) 264 (:PRIMARY D-base2)
263 (:PRIMARY D-base0) 265 (:PRIMARY D-base0)
264 ))) 266 )))
265 (eitest-F (D nil)) 267 (eitest-F (D))
266 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list)) 268 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
267 (eieio-test-match ans))) 269 (eieio-test-match ans)))
268 270
@@ -304,7 +306,7 @@
304 (:PRIMARY E-base2) 306 (:PRIMARY E-base2)
305 (:PRIMARY E-base0) 307 (:PRIMARY E-base0)
306 ))) 308 )))
307 (eitest-F (E nil)) 309 (eitest-F (E))
308 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list)) 310 (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
309 (eieio-test-match ans))) 311 (eieio-test-match ans)))
310 312
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index 51996fe51be..fced6bc3df2 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
@@ -430,6 +430,9 @@ METHOD is the method that was attempting to be called."
430(defclass virtual-slot-class () 430(defclass virtual-slot-class ()
431 ((base-value :initarg :base-value)) 431 ((base-value :initarg :base-value))
432 "Class has real slot :base-value and simulated slot :derived-value.") 432 "Class has real slot :base-value and simulated slot :derived-value.")
433
434(eieio-declare-slots derived-value)
435
433(with-suppressed-warnings ((obsolete defmethod) 436(with-suppressed-warnings ((obsolete defmethod)
434 (obsolete defgeneric)) 437 (obsolete defgeneric))
435 (defmethod slot-missing ((vsc virtual-slot-class) 438 (defmethod slot-missing ((vsc virtual-slot-class)
diff --git a/test/lisp/jsonrpc-tests.el b/test/lisp/jsonrpc-tests.el
index 68eaae6c44b..148f5870434 100644
--- a/test/lisp/jsonrpc-tests.el
+++ b/test/lisp/jsonrpc-tests.el
@@ -76,7 +76,6 @@
76 (setq endpoint 76 (setq endpoint
77 (make-instance 77 (make-instance
78 'jsonrpc--test-client 78 'jsonrpc--test-client
79 "Emacs RPC client"
80 :process 79 :process
81 (open-network-stream "JSONRPC test tcp endpoint" 80 (open-network-stream "JSONRPC test tcp endpoint"
82 nil "localhost" 81 nil "localhost"