Как определяется макрос defprotocol в clojurescript?

Я пытаюсь выяснить, где находится исходный код макроса defprotocol.

в источнике cljs.core:

https://github.com/clojure/clojurescript/blob/master/src/cljs/cljs/core.cljs

Макрос defprotocol внезапно появляется в строке 155 (вместе с функцией -invoke). Где мы можем найти, где это реализовано?


person zcaudate    schedule 06.05.2013    source источник


Ответы (1)


Все макросы в ClojureScript должны быть реализованы как Clojure.

defprotocol реализован в строке 796 этого файла:

https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/core.clj#L796

Обратите внимание, что этот файл является файлом Clojure, а не файлом ClojureScript.

person Rodrigo Taboada    schedule 06.05.2013
comment
Спасибо! Кстати... Вы знаете, как работает макрос js*? Я вижу это по всему коду cljs.core, но нет определения - person zcaudate; 07.05.2013
comment
js* — это не макрос, а специальная форма. Он используется, чтобы позволить ClojureScript переходить на Javascript, когда это необходимо. В этом видео Крис Хаузер немного говорит об этом. - person Rodrigo Taboada; 07.05.2013
comment
Код, реализующий js*, находится в этом файле: analyzer.clj - person Rodrigo Taboada; 07.05.2013
comment
Здравствуйте, я пишу пост, чтобы объяснить, как clojurescript компилирует defprotocol в javascript, возможно, это может вам помочь :) blog.klipse.tech//clojurescript/2016/04/09/ - person Raphael Boukara; 10.04.2016