diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-06-13 18:01:42 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-06-14 14:24:18 +0200 |
commit | 7b837cd707753919dea0c14207c11643f7a88e87 (patch) | |
tree | 63146c38abe7b66778ebd40e8a05a4f1a7cc1152 /lisp/cedet/semantic | |
parent | 07df91d45a950d7bef323b57dc7e46b34997143f (diff) | |
download | emacs-7b837cd707753919dea0c14207c11643f7a88e87.tar.gz emacs-7b837cd707753919dea0c14207c11643f7a88e87.tar.bz2 emacs-7b837cd707753919dea0c14207c11643f7a88e87.zip |
Use CLOS-style accessors in oref/oset
* lisp/cedet/srecode/texi.el (srecode-semantic-handle-:texitag):
* lisp/cedet/srecode/table.el (srecode-mode-table-new):
(srecode-dump):
* lisp/cedet/srecode/srt-mode.el (srecode-parse-this-macro):
(semantic-analyze-possible-completions):
* lisp/cedet/srecode/semantic.el (srecode-compound-toString):
(srecode-semantic-apply-tag-to-dict-default):
* lisp/cedet/srecode/mode.el (srecode-minor-mode-templates-menu):
(srecode-edit):
* lisp/cedet/srecode/insert.el (srecode-insert-method):
(srecode-inserter-apply-state):
(srecode-insert-ask-default):
(srecode-insert-method-ask):
(srecode-insert-method-field):
(srecode-insert-method-helper):
(srecode-parse-input):
(srecode-match-end):
(srecode-insert-include-lookup):
(srecode-insert-method):
* lisp/cedet/srecode/find.el (srecode-template-table-in-project-p):
(srecode-template-get-table):
(srecode-template-get-table-for-binding):
(srecode-all-template-hash):
* lisp/cedet/srecode/extract.el (srecode-inserter-extract):
(srecode-inserter-extract):
* lisp/cedet/srecode/el.el (srecode-semantic-apply-tag-to-dict):
* lisp/cedet/srecode/dictionary.el (initialize-instance):
(srecode-dictionary-add-template-table):
(srecode-compound-toString):
* lisp/cedet/srecode/cpp.el (srecode-semantic-apply-tag-to-dict):
* lisp/cedet/srecode/compile.el (srecode-compile-template-table):
(srecode-dump):
* lisp/cedet/srecode/args.el (srecode-semantic-handle-:project):
* lisp/cedet/semantic/texi.el (semantic-analyze-possible-completions):
* lisp/cedet/semantic/symref/list.el (semantic-symref-results-dump):
(semantic-symref-list-create-macro-on-open-hit):
(semantic-symref-list-rename-open-hits):
(semantic-symref-list-map-open-hits):
* lisp/cedet/semantic/symref/idutils.el
(semantic-symref-perform-search):
(semantic-symref-parse-tool-output-one-line):
* lisp/cedet/semantic/symref/global.el (semantic-symref-perform-search):
(semantic-symref-parse-tool-output-one-line):
* lisp/cedet/semantic/symref/cscope.el (semantic-symref-perform-search):
(semantic-symref-parse-tool-output-one-line):
* lisp/cedet/semantic/mru-bookmark.el
(semantic-mrub-ring-to-assoc-list):
* lisp/cedet/semantic/grammar.el
(semantic-analyze-possible-completions):
* lisp/cedet/semantic/decorate/include.el
(semantic-decoration-include-describe):
* lisp/cedet/semantic/debug.el (semantic-debug-highlight-lexical-token):
(semantic-debug-highlight-rule):
* lisp/cedet/semantic/db-typecache.el
(semanticdb-typecache-for-database):
* lisp/cedet/semantic/complete.el
(semantic-collector-calculate-completions-raw):
* lisp/cedet/semantic/bovine/make.el
(semantic-analyze-possible-completions):
* lisp/cedet/semantic/analyze/refs.el (semantic-analyze-refs-impl):
(semantic-analyze-refs-proto):
* lisp/cedet/semantic/analyze/debug.el
(semantic-analyzer-debug-describe-scope):
* lisp/cedet/semantic/analyze.el (semantic-analyze-interesting-tag):
(semantic-analyze-interesting-tag):
(semantic-analyze-pulse):
* lisp/cedet/ede/util.el (ede-update-version):
* lisp/cedet/ede/shell.el (ede-shell-run-something):
* lisp/cedet/ede/project-am.el (project-am-load-makefile):
(project-rescan):
(project-am-macro):
(ede-buffer-mine):
(project-compile-target-command):
(project-am-package-info):
* lisp/cedet/ede/files.el (ede--project-inode):
(ede-directory-get-open-project):
(ede-directory-get-toplevel-open-project):
(ede-find-subproject-for-directory):
(ede-toplevel-project):
* lisp/cedet/ede/cpp-root.el (initialize-instance):
(project-compile-project):
(project-compile-target):
* lisp/cedet/ede/config.el (ede-config-get-configuration):
(project-debug-target):
(project-run-target):
(project-compile-project):
(ede-preprocessor-map):
(ede-java-classpath):
* lisp/cedet/ede/base.el (ede-normalize-file/directory): Use
CLOS-style oref/oset accessors instead of eieio-style :colon
accessors. This avoids compilation warnings and is allegedly
faster.
Diffstat (limited to 'lisp/cedet/semantic')
-rw-r--r-- | lisp/cedet/semantic/analyze.el | 10 | ||||
-rw-r--r-- | lisp/cedet/semantic/analyze/debug.el | 2 | ||||
-rw-r--r-- | lisp/cedet/semantic/analyze/refs.el | 4 | ||||
-rw-r--r-- | lisp/cedet/semantic/bovine/make.el | 4 | ||||
-rw-r--r-- | lisp/cedet/semantic/complete.el | 2 | ||||
-rw-r--r-- | lisp/cedet/semantic/db-typecache.el | 2 | ||||
-rw-r--r-- | lisp/cedet/semantic/debug.el | 4 | ||||
-rw-r--r-- | lisp/cedet/semantic/decorate/include.el | 6 | ||||
-rw-r--r-- | lisp/cedet/semantic/grammar.el | 2 | ||||
-rw-r--r-- | lisp/cedet/semantic/mru-bookmark.el | 2 | ||||
-rw-r--r-- | lisp/cedet/semantic/symref/cscope.el | 21 | ||||
-rw-r--r-- | lisp/cedet/semantic/symref/global.el | 19 | ||||
-rw-r--r-- | lisp/cedet/semantic/symref/idutils.el | 19 | ||||
-rw-r--r-- | lisp/cedet/semantic/symref/list.el | 14 | ||||
-rw-r--r-- | lisp/cedet/semantic/texi.el | 6 |
15 files changed, 54 insertions, 63 deletions
diff --git a/lisp/cedet/semantic/analyze.el b/lisp/cedet/semantic/analyze.el index 9ea7ebf7c1b..8f1d92822e6 100644 --- a/lisp/cedet/semantic/analyze.el +++ b/lisp/cedet/semantic/analyze.el @@ -201,7 +201,7 @@ Optional argument DESIRED-TYPE may be a non-type tag to analyze." (cl-defmethod semantic-analyze-interesting-tag ((context semantic-analyze-context)) "Return a tag from CONTEXT that would be most interesting to a user." - (let ((prefix (reverse (oref context :prefix)))) + (let ((prefix (reverse (oref context prefix)))) ;; Go back through the prefix until we find a tag we can return. (while (and prefix (not (semantic-tag-p (car prefix)))) (setq prefix (cdr prefix))) @@ -211,12 +211,12 @@ Optional argument DESIRED-TYPE may be a non-type tag to analyze." (cl-defmethod semantic-analyze-interesting-tag ((context semantic-analyze-context-functionarg)) "Try the base, and if that fails, return what we are assigning into." - (or (cl-call-next-method) (car-safe (oref context :function)))) + (or (cl-call-next-method) (car-safe (oref context function)))) (cl-defmethod semantic-analyze-interesting-tag ((context semantic-analyze-context-assignment)) "Try the base, and if that fails, return what we are assigning into." - (or (cl-call-next-method) (car-safe (oref context :assignee)))) + (or (cl-call-next-method) (car-safe (oref context assignee)))) ;;; ANALYSIS ;; @@ -738,8 +738,8 @@ Optional argument CTXT is the context to show." (cl-defmethod semantic-analyze-pulse ((context semantic-analyze-context)) "Pulse the region that CONTEXT affects." (require 'pulse) - (with-current-buffer (oref context :buffer) - (let ((bounds (oref context :bounds))) + (with-current-buffer (oref context buffer) + (let ((bounds (oref context bounds))) (when bounds (pulse-momentary-highlight-region (car bounds) (cdr bounds)))))) diff --git a/lisp/cedet/semantic/analyze/debug.el b/lisp/cedet/semantic/analyze/debug.el index 8ad9c22216f..0cd8e44f588 100644 --- a/lisp/cedet/semantic/analyze/debug.el +++ b/lisp/cedet/semantic/analyze/debug.el @@ -478,7 +478,7 @@ variable `semantic-dependency-system-include-path'.")) (defun semantic-analyzer-debug-describe-scope (ctxt &optional classconstraint) "Describe the scope in CTXT for finding a global symbol. Optional argument CLASSCONSTRAINT says to output to tags of that class." - (let* ((scope (oref ctxt :scope)) + (let* ((scope (oref ctxt scope)) (parents (oref scope parents)) (cc (or classconstraint (oref ctxt prefixclass))) ) diff --git a/lisp/cedet/semantic/analyze/refs.el b/lisp/cedet/semantic/analyze/refs.el index 773210698ad..cb0f4645320 100644 --- a/lisp/cedet/semantic/analyze/refs.el +++ b/lisp/cedet/semantic/analyze/refs.el @@ -104,7 +104,7 @@ Use `semantic-analyze-current-tag' to debug this fcn." "Return the implementations derived in the reference analyzer REFS. Optional argument IN-BUFFER indicates that the returned tag should be in an active buffer." (let ((allhits (oref refs rawsearchdata)) - (tag (oref refs :tag)) + (tag (oref refs tag)) (impl nil) ) (semanticdb-find-result-mapc @@ -129,7 +129,7 @@ Optional argument IN-BUFFER indicates that the returned tag should be in an acti "Return the prototypes derived in the reference analyzer REFS. Optional argument IN-BUFFER indicates that the returned tag should be in an active buffer." (let ((allhits (oref refs rawsearchdata)) - (tag (oref refs :tag)) + (tag (oref refs tag)) (proto nil)) (semanticdb-find-result-mapc (lambda (T DB) diff --git a/lisp/cedet/semantic/bovine/make.el b/lisp/cedet/semantic/bovine/make.el index 4fe33345d73..3676c6972f2 100644 --- a/lisp/cedet/semantic/bovine/make.el +++ b/lisp/cedet/semantic/bovine/make.el @@ -181,10 +181,10 @@ Uses default implementation, and also gets a list of filenames." (require 'semantic/analyze/complete) (with-current-buffer (oref context buffer) (let* ((normal (semantic-analyze-possible-completions-default context)) - (classes (oref context :prefixclass)) + (classes (oref context prefixclass)) (filetags nil)) (when (memq 'filename classes) - (let* ((prefix (car (oref context :prefix))) + (let* ((prefix (car (oref context prefix))) (completetext (cond ((semantic-tag-p prefix) (semantic-tag-name prefix)) ((stringp prefix) diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el index ea2e2dbd1af..3c950230559 100644 --- a/lisp/cedet/semantic/complete.el +++ b/lisp/cedet/semantic/complete.el @@ -1281,7 +1281,7 @@ Uses semanticdb for searching all tags in the current project." (localstuff (oref scope scope))) (list (cons - (oref scope :table) + (oref scope table) (semantic-find-tags-for-completion prefix localstuff))))) ;(semanticdb-brute-deep-find-tags-for-completion prefix (oref obj path)))) diff --git a/lisp/cedet/semantic/db-typecache.el b/lisp/cedet/semantic/db-typecache.el index 2c99b2cef3b..fe9d2d21056 100644 --- a/lisp/cedet/semantic/db-typecache.el +++ b/lisp/cedet/semantic/db-typecache.el @@ -554,7 +554,7 @@ If there isn't one, create it. (stream nil) ) (dolist (table (semanticdb-get-database-tables db)) - (when (eq lmode (oref table :major-mode)) + (when (eq lmode (oref table major-mode)) (setq stream (semanticdb-typecache-merge-streams stream diff --git a/lisp/cedet/semantic/debug.el b/lisp/cedet/semantic/debug.el index e5c04d1b8d7..b5bb00d8cda 100644 --- a/lisp/cedet/semantic/debug.el +++ b/lisp/cedet/semantic/debug.el @@ -170,7 +170,7 @@ These buffers are brought into view when layout occurs.") (cl-defmethod semantic-debug-highlight-lexical-token ((iface semantic-debug-interface) token) "For IFACE, highlight TOKEN in the source buffer . TOKEN is a lexical token." - (set-buffer (oref iface :source-buffer)) + (set-buffer (oref iface source-buffer)) (object-add-to-list iface 'overlays (semantic-lex-highlight-token token)) @@ -183,7 +183,7 @@ TOKEN is a lexical token." NONTERM is the name of the rule currently being processed that shows up as a nonterminal (or tag) in the source buffer. If RULE and MATCH indices are specified, highlight those also." - (set-buffer (oref iface :parser-buffer)) + (set-buffer (oref iface parser-buffer)) (let* ((rules (semantic-find-tags-by-class 'nonterminal (current-buffer))) (nt (semantic-find-first-tag-by-name nonterm rules)) diff --git a/lisp/cedet/semantic/decorate/include.el b/lisp/cedet/semantic/decorate/include.el index eaf2425c53f..a8f3f2a87d1 100644 --- a/lisp/cedet/semantic/decorate/include.el +++ b/lisp/cedet/semantic/decorate/include.el @@ -437,11 +437,11 @@ its contents. ;; Get the semanticdb statement, and display it's contents. (princ "\nDetails for header file...\n") (princ "\nMajor Mode: ") - (princ (oref table :major-mode)) + (princ (oref table major-mode)) (princ "\nTags: ") - (princ (format "%s entries" (length (oref table :tags)))) + (princ (format "%s entries" (length (oref table tags)))) (princ "\nFile Size: ") - (princ (format "%s chars" (oref table :pointmax))) + (princ (format "%s chars" (oref table pointmax))) (princ "\nSave State: ") (cond ((oref table dirty) (princ "Table needs to be saved.")) diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el index 2af7a7fa826..0db675b8f23 100644 --- a/lisp/cedet/semantic/grammar.el +++ b/lisp/cedet/semantic/grammar.el @@ -1919,7 +1919,7 @@ Optional argument COLOR determines if color is added to the text." (with-mode-local emacs-lisp-mode (semantic-analyze-possible-completions context)) (with-current-buffer (oref context buffer) - (let* ((prefix (car (oref context :prefix))) + (let* ((prefix (car (oref context prefix))) (completetext (cond ((semantic-tag-p prefix) (semantic-tag-name prefix)) ((stringp prefix) diff --git a/lisp/cedet/semantic/mru-bookmark.el b/lisp/cedet/semantic/mru-bookmark.el index a15ea9b316a..627c71a01b8 100644 --- a/lisp/cedet/semantic/mru-bookmark.el +++ b/lisp/cedet/semantic/mru-bookmark.el @@ -315,7 +315,7 @@ non-nil if the minor mode is enabled." (al nil)) (while (< idx len) (let ((r (ring-ref ring idx))) - (setq al (cons (cons (oref r :object-name) r) + (setq al (cons (cons (oref r object-name) r) al))) (setq idx (1+ idx))) (nreverse al))) diff --git a/lisp/cedet/semantic/symref/cscope.el b/lisp/cedet/semantic/symref/cscope.el index 89545965bf1..39f86611316 100644 --- a/lisp/cedet/semantic/symref/cscope.el +++ b/lisp/cedet/semantic/symref/cscope.el @@ -51,14 +51,11 @@ See the function `cedet-cscope-search' for more details.") default-directory)) ;; CScope has to be run from the project root where ;; cscope.out is. - (b (cedet-cscope-search (oref tool :searchfor) - (oref tool :searchtype) - (oref tool :resulttype) - (oref tool :searchscope) - )) - ) - (semantic-symref-parse-tool-output tool b) - )) + (b (cedet-cscope-search (oref tool searchfor) + (oref tool searchtype) + (oref tool resulttype) + (oref tool searchscope)))) + (semantic-symref-parse-tool-output tool b))) (defconst semantic-symref-cscope--line-re "^\\([^ ]+\\) [^ ]+ \\([0-9]+\\) ") @@ -66,22 +63,22 @@ See the function `cedet-cscope-search' for more details.") (cl-defmethod semantic-symref-parse-tool-output-one-line ((tool semantic-symref-tool-cscope)) "Parse one line of grep output, and return it as a match list. Moves cursor to end of the match." - (cond ((eq (oref tool :resulttype) 'file) + (cond ((eq (oref tool resulttype) 'file) ;; Search for files (when (re-search-forward "^\\([^\n]+\\)$" nil t) (match-string 1))) - ((eq (oref tool :searchtype) 'tagcompletions) + ((eq (oref tool searchtype) 'tagcompletions) ;; Search for files (when (re-search-forward "^[^ ]+ [^ ]+ [^ ]+ \\(.*\\)$" nil t) (let ((subtxt (match-string 1)) - (searchtxt (oref tool :searchfor))) + (searchtxt (oref tool searchfor))) (if (string-match (concat "\\<" searchtxt "\\(\\w\\|\\s_\\)*\\>") subtxt) (match-string 0 subtxt) ;; We have to return something at this point. subtxt))) ) - ((eq (oref tool :resulttype) 'line-and-text) + ((eq (oref tool resulttype) 'line-and-text) (when (re-search-forward semantic-symref-cscope--line-re nil t) (list (string-to-number (match-string 2)) (expand-file-name (match-string 1)) diff --git a/lisp/cedet/semantic/symref/global.el b/lisp/cedet/semantic/symref/global.el index 2eb0ab091cf..d1ea921302f 100644 --- a/lisp/cedet/semantic/symref/global.el +++ b/lisp/cedet/semantic/symref/global.el @@ -40,14 +40,11 @@ See the function `cedet-gnu-global-search' for more details.") (cl-defmethod semantic-symref-perform-search ((tool semantic-symref-tool-global)) "Perform a search with GNU Global." - (let ((b (cedet-gnu-global-search (oref tool :searchfor) - (oref tool :searchtype) - (oref tool :resulttype) - (oref tool :searchscope) - )) - ) - (semantic-symref-parse-tool-output tool b) - )) + (let ((b (cedet-gnu-global-search (oref tool searchfor) + (oref tool searchtype) + (oref tool resulttype) + (oref tool searchscope)))) + (semantic-symref-parse-tool-output tool b))) (defconst semantic-symref-global--line-re "^\\([^ ]+\\) +\\([0-9]+\\) \\([^ ]+\\) ") @@ -55,12 +52,12 @@ See the function `cedet-gnu-global-search' for more details.") (cl-defmethod semantic-symref-parse-tool-output-one-line ((tool semantic-symref-tool-global)) "Parse one line of grep output, and return it as a match list. Moves cursor to end of the match." - (cond ((or (eq (oref tool :resulttype) 'file) - (eq (oref tool :searchtype) 'tagcompletions)) + (cond ((or (eq (oref tool resulttype) 'file) + (eq (oref tool searchtype) 'tagcompletions)) ;; Search for files (when (re-search-forward "^\\([^\n]+\\)$" nil t) (match-string 1))) - ((eq (oref tool :resulttype) 'line-and-text) + ((eq (oref tool resulttype) 'line-and-text) (when (re-search-forward semantic-symref-global--line-re nil t) (list (string-to-number (match-string 2)) (match-string 3) diff --git a/lisp/cedet/semantic/symref/idutils.el b/lisp/cedet/semantic/symref/idutils.el index 9f28e16c348..489bcec060d 100644 --- a/lisp/cedet/semantic/symref/idutils.el +++ b/lisp/cedet/semantic/symref/idutils.el @@ -40,14 +40,11 @@ See the function `cedet-idutils-search' for more details.") (cl-defmethod semantic-symref-perform-search ((tool semantic-symref-tool-idutils)) "Perform a search with IDUtils." - (let ((b (cedet-idutils-search (oref tool :searchfor) - (oref tool :searchtype) - (oref tool :resulttype) - (oref tool :searchscope) - )) - ) - (semantic-symref-parse-tool-output tool b) - )) + (let ((b (cedet-idutils-search (oref tool searchfor) + (oref tool searchtype) + (oref tool resulttype) + (oref tool searchscope)))) + (semantic-symref-parse-tool-output tool b))) (defconst semantic-symref-idutils--line-re "^\\(\\(?:[a-zA-Z]:\\)?[^:\n]+\\):\\([0-9]+\\):") @@ -55,14 +52,14 @@ See the function `cedet-idutils-search' for more details.") (cl-defmethod semantic-symref-parse-tool-output-one-line ((tool semantic-symref-tool-idutils)) "Parse one line of grep output, and return it as a match list. Moves cursor to end of the match." - (cond ((eq (oref tool :resulttype) 'file) + (cond ((eq (oref tool resulttype) 'file) ;; Search for files (when (re-search-forward "^\\([^\n]+\\)$" nil t) (match-string 1))) - ((eq (oref tool :searchtype) 'tagcompletions) + ((eq (oref tool searchtype) 'tagcompletions) (when (re-search-forward "^\\([^ ]+\\) " nil t) (match-string 1))) - ((eq (oref tool :resulttype) 'line-and-text) + ((eq (oref tool resulttype) 'line-and-text) (when (re-search-forward semantic-symref-idutils--line-re nil t) (list (string-to-number (match-string 2)) (expand-file-name (match-string 1) default-directory) diff --git a/lisp/cedet/semantic/symref/list.el b/lisp/cedet/semantic/symref/list.el index c11eb310a0f..f6417b1c6b7 100644 --- a/lisp/cedet/semantic/symref/list.el +++ b/lisp/cedet/semantic/symref/list.el @@ -205,7 +205,7 @@ Some useful functions are found in `semantic-format-tag-functions'." (erase-buffer) ;; Insert the contents. (let ((lastfile nil)) - (dolist (T (oref results :hit-tags)) + (dolist (T (oref results hit-tags)) (unless (equal lastfile (semantic-tag-file-name T)) (setq lastfile (semantic-tag-file-name T)) (insert-button lastfile @@ -402,8 +402,8 @@ cursor to the beginning of that symbol, then record a macro as if {kmacro-end-macro} to end the macro, and return to the symbol found list." (interactive) (let* ((oldsym (oref (oref semantic-symref-current-results - :created-by) - :searchfor)) + created-by) + searchfor)) (ol (save-excursion (end-of-line) (car (semantic-overlays-at (1- (point)))))) @@ -448,8 +448,8 @@ Closed items will be skipped." (interactive (list (read-string "Rename to: " (oref (oref semantic-symref-current-results - :created-by) - :searchfor)))) + created-by) + searchfor)))) (let ((count (semantic-symref-list-map-open-hits (lambda () (replace-match newname nil t))))) (semantic-symref-list-update-open-hits) @@ -469,8 +469,8 @@ Return the number of occurrences FUNCTION was operated upon." ;; class members. (Not Done) (let ((oldsym (oref (oref semantic-symref-current-results - :created-by) - :searchfor)) + created-by) + searchfor)) (count 0)) (save-excursion (goto-char (point-min)) diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el index f079bf201c8..3a0050b920c 100644 --- a/lisp/cedet/semantic/texi.el +++ b/lisp/cedet/semantic/texi.el @@ -419,9 +419,9 @@ Since texinfo is not a programming language the default version is not useful. Instead, look at the current symbol. If it is a command do primitive texinfo built ins. If not, use ispell to lookup words that start with that symbol." - (let ((prefix (car (oref context :prefix))) + (let ((prefix (car (oref context prefix))) ) - (cond ((member 'function (oref context :prefixclass)) + (cond ((member 'function (oref context prefixclass)) ;; Do completion for texinfo commands (let* ((cmd (substring prefix 1)) (lst (all-completions @@ -429,7 +429,7 @@ that start with that symbol." (mapcar (lambda (f) (semantic-tag (concat "@" f) 'function)) lst)) ) - ((member 'word (oref context :prefixclass)) + ((member 'word (oref context prefixclass)) ;; Do completion for words via ispell. (require 'ispell) (let ((word-list (ispell-lookup-words prefix))) |