0

これは、この 1 か月か 2 か月の間に起こったに違いありません。誰のせいなのかわかりませんが、c モードから派生したモードをバイトコンパイルしようとすると、Emacs は派生モードで参照されている c モード関数を見つけることができません。cc-bytecom.el を調べたところ (新しいかどうかはわかりませんが、新しいように見えます)、 と の 2 つのマクロが定義されていcc-requreますcc-provide。私は彼らが何をしているのか本当に理解できませんが、Emacs がこれらの関数が利用可能でなければならないことを発見するのを妨げているようです。私のコードで、何も変更(requre 'cc-mode)しないように置き換えようとすると。(cc-requre 'cc-mode)

上記のマクロはコンパイル時にのみ適用されるようですが、確実にはわかりません. (eval-when-compile (cc-bytecomp-restore-environment))andも呼び出します(eval-when-compile (cc-bytecomp-load (symbol-name ,cc-part))). 私はそれが何をするのか理解するのに苦労しています。

4

1 に答える 1

1

あなたが説明した問題はわかりません: haxe-mode ファイルをコンパイルすると、haxe-mode.el がこれらの関数を呼び出すため、実行時に未定義である可能性があるといういくつかの c モード関数に関する警告が表示されますが、内の対応するファイルのみをロードしますeval-when-compile

ところで、これらの警告は、おそらく悪名高い cc-bytecomp からコピーされた奇妙なコードが原因のようです。以下のパッチは、クリーンなコンパイルをもたらすようです:

=== modified file 'haxe-help.el'
--- haxe-help.el    2012-10-16 14:41:06 +0000
+++ haxe-help.el    2012-10-16 15:11:37 +0000
@@ -33,7 +33,6 @@

 ;;; Code:

-(eval-when-compile (require 'cl))
 (require 'cl)

 (defcustom haxe-help-location

=== modified file 'haxe-mode.el'
--- haxe-mode.el    2012-10-16 14:41:06 +0000
+++ haxe-mode.el    2012-10-16 15:21:23 +0000
@@ -77,7 +77,6 @@
 (require 'cc-bytecomp)
 (require 'cc-mode)
 (require 'cc-fonts)
-;; (cc-require-when-compile 'cc-langs)
 (require 'cc-langs)

 (require 'compile)
@@ -91,18 +90,6 @@
 (require 'haxe-log)
 ;; ------------------- my change -------------------------------------

-;; The language constants are needed when compiling.
-(eval-when-compile
-  (let ((load-path
-         (if (and (boundp 'byte-compile-dest-file)
-                  (stringp byte-compile-dest-file))
-             (cons (file-name-directory byte-compile-dest-file) load-path)
-           load-path)))
-    (load "cc-mode" nil t)
-    (load "cc-fonts" nil t)
-    (load "cc-langs" nil t)
-    (load "cc-bytecomp" nil t)))
-
 (eval-and-compile
   ;; Tell the language constant system about haXe and base it on Java.
   (c-add-language 'haxe-mode 'java-mode))
@@ -387,7 +374,7 @@
                   (c-fontify-types-and-refs
                       ((c-promote-possible-types t)
                        (parse-sexp-lookup-properties
-                        (cc-eval-when-compile
+                        (eval-when-compile
                           (boundp 'parse-sexp-lookup-properties))))
                     (save-restriction
                       (narrow-to-region (point) limit)
于 2012-10-16T15:09:52.513 に答える